Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
практична робота 7.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
253 Кб
Скачать
☆

Логічна структура файлової системи і типи файлів в unix

Ми не даватимемо тут визначення файлу, вважаючи, що інтуїтивне уявлення про файли у вас є, а в лекції 11 (розділ "Введення") було введено поняття про файли, як про іменовані абстрактні об'єкти, що володіють певними властивостями. При цьому в просторі імен файлів одному файлу можуть відповідати декілька імен.

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

  • звичайні або регулярні файли;

  • директорії або каталоги;

  • файли типа FIFO або іменовані pip'и;

  • спеціальні файли пристроїв;

  • сокети (sockets);

  • спеціальні файли зв'язку (link).

Що таке регулярні файли і директорії, вам винне бути добре відомо з особистого досвіду і з лекцій (лекція 11). Про способи їх відображення в дисковий простір мова піде трохи пізніше. Файли типа FIFO були представлені в практичній роботі 5, коли розглядалася робота з іменованими pip'ами (розділ "Поняття FIFO. Використовування системного виклику mknod() для створення FIFO. Функція mkfifo()"). Файли типу "зв'язок" ми представимо в цьому занятті, коли обговорюватимемо операції над файлами (розділ "Операції над файлами і директоріями") і відповідні їм системні виклики (розділ "Системні виклики і команди для виконання операцій над файлами і директоріями"). Про спеціальні файли пристроїв буде розказано в подальших практичних заняттях.

Файли всіх перерахованих типів логічно з'єднані в ациклічний граф з однонаправленими ребрами, що виходить з дерева в результаті зрощення декількох термінальних вузлів дерева або декількох його нетермінальних вузлів так, щоб одержаний граф не містив циклів. В нетермінальних вузлах такого ациклічного графа (тобто у вузлах, з яких виходять ребра) можуть розташовуватися тільки файли типів "директорія" і "зв'язок". Причому з вузла, в якому розташовується файл типу "зв'язок", може виходити тільки рівно одне ребро. В термінальних вузлах цього ациклічного графа (тобто у вузлах, з яких не виходить ребер) можуть розташовуватися файли будь-яких типів (див. рис. 11–12.1), хоча присутність в термінальному вузлі файлу типу "зв'язок" звичайно говорить про деяке порушення цілісності файлової системи.

Мал. 11-12.1.  Приклад графа файлової системи

На відміну від деревовидної структури набору файлів, де імена файлів зв'язувалися з вузлами дерева, в такому ациклічному графі ім'я файлу зв'язується не з вузлом, відповідним файлу, а з вхідним в нього ребром. Ребра, що виходять з вузлів, відповідних файлам типу "зв'язок", є неіменованими. Треба відзначити, що практично у всіх існуючих реалізаціях UNIX-подібних систем у вузол графа, відповідний файлу типу "директорія", не може входити більш одного іменованого ребра, хоча стандарт на операційну систему UNIX і не забороняє цього. Як повне ім'я файлу може використовуватися будь-яке ім'я, що виходить при проходженні по ребрах від кореневого вузла графа (тобто вузла, в який не входить жодне ребро) до вузла, відповідного цьому файлу, по будь-якому шляху за допомогою наступного алгоритму:

  1. Якщо файлу, що цікавить нас, відповідає кореневий вузол, то файл має ім'я "/".

  2. Беремо перше іменоване ребро в дорозі і записуємо його ім'я, якому передуємо символу "/".

  3. Для кожного чергового іменованого ребра в дорозі приписуємо до рядка, що вже вийшов, справа символ "/" і ім'я відповідного ребра.

Повне ім'я є унікальним для всієї файлової системи і однозначно визначає відповідний йому файл.