Операції над директоріями

Розділи диска. Організація доступу до архіву файлів.

Завдання шляху до файлу у файлових системах деяких ОС відрізняється тим, з чого починається цей ланцюжок імен.

У сучасних ОС прийнято розбивати диски на логічні диски (це низькорівнева операція), іноді звані розділами (partitions). Буває, що, навпаки, поєднують кілька фізичних дисків в один логічний диск (наприклад, це можна зробити в Windows NT). Тому в подальшому викладі ми ігноруватимемо проблему фізичного виділення простору для файлів і вважати, що кожен розділ є окремим (віртуальним) диском. Диск містить ієрархічну деревоподібну структуру, що складається з набору файлів, кожен з яких є сховищем даних користувача, та каталогів або директорій (тобто файлів, які містять перелік інших файлів, що входять до складу каталогу), необхідні зберігання інформації про файли системи.

У деяких системах керування файлами потрібно, щоб кожен архів файлів повністю розташовувався на одному диску (розділі диска). У цьому випадку повне ім'я файлу починається з імені дискового пристрою, на якому встановлений відповідний диск (літери диска). Наприклад, c:\util\nu\ndd.exe. Такий спосіб іменування використовується у файлових системах DEC та Microsoft.

В інших системах (Multics) вся сукупність файлів та каталогів є єдиним деревом. Сама система, виконуючи пошук файлів на ім'я, починаючи з кореня, вимагала встановлення необхідних дисків.

У ОС Unix передбачається наявність кількох архівів файлів, кожен у своєму розділі, з яких вважається кореневим. Після запуску системи можна"змонтувати" кореневу файлову систему та ряд ізольованих файлових систем в одну загальну файлову системусистему.

Технічно це здійснюється за допомогою створення в кореневій файловій системі спеціальних порожніх каталогів (див. наступну лекцію). Спеціальний системний виклик mount ОС Unix дозволяє підключити до одного з цих пустих каталогів кореневий каталог вказаного архіву файлів. Після монтування загальної файлової системи найменування файлів проводиться так само, якби вона з самого початку була централізованою. Завданням ОС є безперешкодний прохід точки монтування для отримання доступу до файлу по ланцюжку імен. Якщо врахувати, що зазвичай монтування файлової системи здійснюється під час завантаження системи, користувачі ОС Unix зазвичай і не замислюються про походження загальної файлової системи.

Як і у випадку з файлами, система зобов'язана забезпечити користувача набором операцій, необхідні роботи з директоріями, реалізованих через системні виклики. Незважаючи на те, що директорії - це файли, логіка роботи з ними відрізняється від логіки роботи зі звичайними файлами та визначається природою цих об'єктів, призначених для підтримки структури файлового архіву. Сукупність системних викликів керувати директоріями залежить від особливостей конкретної ОС. Нагадаємо, що операції над каталогами є прерогативою ОС, тобто користувач не може, наприклад, виконати запис до каталогу, починаючи з поточної позиції. Розглянемо як приклад деякі системні виклики, необхідних роботи з каталогами [Таненбаум, 2002].

Створення директорії. Новостворена директорія включає записи з іменами '.' і '..', проте вважається порожнім.

Видалення директорії. Видалена може лише порожня директорія.

Відкриття директорії для подальшого читання. Наприклад, щоб перерахувати файли, що входять до директорії, процес повинен відкрити директоріюі рахувати імена всіх файлів, які вона включає.

Закриття директорії після її читання звільнення місця у внутрішніх системних таблицях.

Пошук. Цей системний дзвінок повертає вміст поточного запису у відкритій директорії. Взагалі кажучи, для цих цілей може використовуватися системний виклик Read, але в цьому випадку програміст вимагає знання внутрішньої структури директорії.

Отримання списку файлів у каталозі.

Перейменування. Імена директорій можна змінювати, як і імена файлів.

Створення файлу. Під час створення нового файлу необхідно додати до каталогу відповідний елемент.

Видалення файлу. Видалення з каталогу відповідного елемента. Якщо файл, що видаляється, присутній тільки в одній директорії, то він взагалі видаляється з файлової системи, в іншому випадку система обмежується тільки видаленням специфікованого запису.

Очевидно, що створення та видалення файлів передбачає також виконання відповідних файлових операцій. Є ще низка інших системних викликів, наприклад, пов'язаних із захистом інформації.