
- •Практичне заняття 7
- •Введення
- •Розділи носія інформації (partitions) в unix
- •Логічна структура файлової системи і типи файлів в unix
- •Організація файлу на диску в unix на прикладі файлової системи s5fs. Поняття індексного вузла (inode)
- •Організація директорій (каталогів) в unix
- •Поняття суперблоку
- •Операції над файлами і директоріями
- •Системні виклики і команди для виконання операцій над файлами і директоріями
- •Спеціальні функції для роботи з вмістом директорій
- •Поняття про файли, що відображаються в пам'ять (memory mapped файлах). Системні виклики mmap(), munmap()
- •Аналіз, компіляція і прогін програми для створення memory mapped файлу і запису його вмісту Аналіз, компіляція і прогін програми для створення memory mapped файлу і запису його вмісту
- •Питання до захисту роботи
Операції над файлами і директоріями
Хоча з погляду користувача розгляд операцій над файлами і директоріями представляється достатньо простим і зводиться до переліку ряду системних викликів і команд операційної системи, спроба систематичного підходу до набору операцій викликає певні утруднення. Далі мова піде в основному про регулярні файли і файли типу "директорія".
В лекції (лекція 11, розділ "Організація файлів і доступ до них") йшлося про те, що існує два основні види файлів, що розрізняються по методу доступу: файли послідовного доступу і файли прямого доступу. Якщо розглядати файли прямого і послідовного доступу як абстрактні типи даних, то вони представляються як щось, що містить інформацію, над якою можна скоювати наступні операції:
Для послідовного доступу: читання чергової порції даних (read), запис чергової порції даних (write) і позиціонування на початку файлу (rewind).
Для прямого доступу: читання чергової порції даних (read), запис чергової порції даних (write) і позиціонування на необхідній частині даних (seek).
Робота з об'єктами цих абстрактних типів має на увазі наявність ще двох необхідних операцій: створення нового об'єкту (new) і знищення існуючого об'єкту (free).
Розширення математичної моделі файлу за рахунок додавання до береженої інформації атрибутів, властивих файлу (права доступу, облікові дані), спричиняє за собою появу ще двох операцій: прочитати атрибути (get attribute) і встановити їх значення (set attribute).
Наділювання файлів якою-небудь внутрішньою структурою (як у файлу типу "директорія") або накладення на набір файлів зовнішньої логічної структури (об'єднання в ациклічний направлений граф) приводить до появи інших наборів операцій, що становлять інтерфейс роботи з файлами, які, проте, будуть комбінаціями перерахованих вище базових операцій.
Для директорії, наприклад, такий набір операцій, визначуваний її внутрішньою будовою, може виглядати так: операції new, free, set attribute і get attribute залишаються без змін, а операції read, write і rewind (seek) замінюються більш високорівневими:
прочитати запис, відповідний імені файлу, – get record;
додати новий запис – add record;
видалити запис, відповідний імені файлу, – delete record.
Неповний набір операцій над файлами, пов'язаний з їх логічним об'єднанням в структуру директорій, виглядатиме таким чином:
Операції для роботи з атрибутами файлів – get attribute, set attribute.
Операції для роботи з вмістом файлів – read, write, rewind(seek) для регулярних файлів і get record, add record, delete record для директорій.
Операція створення регулярного файлу в деякій директорії (створення нового вузла графа і додавання в граф нового іменованого ребра, що веде в цей вузол з деякого вузла, відповідного директорії) – create. Цю операцію можна розглядати як суперпозицію двох операцій: базової операції new для регулярного файлу і add record для відповідної директорії.
Операція створення піддиректорії в деякій директорії – make directory. Ця операція відрізняється від попередньої операції create занесенням у файл нової директорії інформації про файли з іменами "." і "..", тобто по суті справи вона є суперпозиція операції create і двох операцій add record.
Операція створення файлу типу "зв'язок" – symbolic link.
Операція створення файлу типа "FIFO" – make FIFO.
Операція додавання до графа нового іменованого ребра, що веде від вузла, відповідного директорії, до вузла, відповідному будь-якому іншому типу файлу, – link. Це просто add record з деякими обмеженнями.
Операція видалення файлу, що не є директорією або "зв'язком" (видалення іменованого ребра з графа, що веде до термінальної вершини з одночасним видаленням цієї вершини, якщо до неї не ведуть інші іменовані ребра), – unlink.
Операція видалення файлу типу "зв'язок" (видалення іменованого ребра, що веде до вузла, відповідному файлу типу "зв'язок", з одночасним видаленням цього вузла і неіменованого ребра, що виходить з нього, якщо до цього вузла не ведуть інші іменовані ребра), – unlink link.
Операція рекурсивного видалення директорії зі всіма вхідними в неї файлами і піддиректоріями – remove directory.
Операція перейменування файлу (ребра графа) – rename.
Операція переміщення файлу з однієї директорії в іншу (переміщається точка виходу іменованого ребра, яке веде до вузла, відповідного даного файлу) – move.
Можливі і інші подібні операції.
Спосіб реалізації файлової системи в реальній операційній системі також може додавати нові операції. Якщо частина інформації файлової системи або окремого файлу кэшується в адресному просторі ядра, то з'являються операції синхронізації даних в кеші і на диску для всієї системи в цілому (sync) і для окремого файлу (sync file).
Природно, що всі перераховані операції можуть бути виконані процесом тільки за наявності у нього певних повноважень (прав доступу і т.д.). Для виконання операцій над файлами і директоріями операційна система надає процесам інтерфейс у вигляді системних викликів, бібліотечних функцій і команд операційної системи. Частина цих системних викликів, функцій і команд ми розглянемо в наступних розділах.