
- •Передумови виникнення файлових систем
- •Імена файлів
- •Внутрішня структура файлів
- •Типи файлів
- •Атрибути файлів
- •Операції з файлами
- •Каталоги
- •Системи з однорівневими каталогами
- •Ієрархічні системи каталогів
- •Імена файлів
- •Операції з каталогами
- •Реалізація файлової системи Структура файлової системи
- •Реалізація файлів Неперервне розміщення
- •Реалізація каталогів
- •Типи файлових систем
- •Файлові системи з журнальною структурою
- •Журнальовані файлові системи
- •Віртуальні файлові системи
- •Керування файловою системою
- •Керування дисковим простором
- •Розмір блоку
- •Відслідковування вільних блоків
- •Дискові квоти
- •Резервне копіювання файлової системи
- •Несуперечливість (Однозначність)файлової системи
- •Продуктивність файлової системи Кешування
- •Випереджаюче читання блоку
- •Скорочення обсягу переміщень блоку головок диска
Типи файлів
Більшість операційних систем підтримують декілька типів файлів. Наприклад, в системах UNIX та Windows є звичайні файли і каталоги. В системі UNIX є також символьні та блочні спеціальні файли. Звичайними вважаються файли, що містять інформацію користувача. Всі файли на рис. 4.1 є звичайними. Каталоги - це системні файли, призначені для підтримки структури файлової системи. Ми розглянемо їх трохи пізніше. Символьні спеціальні файли мають відношення до вводу-виводу і використовуються для моделювання послідовних пристроїв введення-виведення, до яких відносяться термінали, принтери та мережі. Блокові спеціальні файли використовуються для моделювання дисків.
Як правило, до звичайних файлів відносяться або файли ASCII, або виконавчі файли. ASCII-файли складаються з текстових рядків. У деяких системах кожен рядок завершується символом повернення каретки. В інших системах використовується символ переходу на наступний рядок. Деякі системи (наприклад, MS-DOS) використовують обидва символи. Рядки не обов'язково повинні мати однакову довжину.
Перевагою ASCII-файлів є можливість їх відображення та друку в початковому вигляді, а також вони можуть бути відредаговані в будь-якому текстовому редакторі. Більше того, якщо велика кількість програм використовують ASCII-файли для введення та виведення інформації, то це спрощує підключення виходу однієї програми до входу іншої, як це робиться в конвеєрах оболонки. (При цьому обмін даними між процесами нітрохи не спрощується, але інтерпретація інформації, безсумнівно, стає простішою, якщо для її вираження використовується стандарт типу ASCII.)
Всі інші файли відносяться до двійкових, це означає, що вони не є ASCII-файлами. Їх вивід буде незрозумілим і непотрібним набором символів. Зазвичай у них є якась внутрішня структура, відома лише програмі, що їх використовує.
Наприклад, на рис. 4.2, а показаний простий виконуваний двійковий файл, взятий з однієї з ранніх версій UNIX. Хоча з технічної точки зору цей файл являє собою всього лише послідовність байтів, операційна система виконає файл тільки в тому випадку, якщо він буде мати допустимий формат. Файл складається з п'яти розділів: заголовка, тексту, даних, бітів переміщення і таблиці символів. Заголовок починається з так званого магічного числа, що ідентифікує файл як виконуваний (щоб запобігти випадковому виконанню файлу, який не відповідає даному формату). Потім слідують розміри різних частин файлу, адреса, з якої починається його виконання, і ряд бітів-прапорів. За заголовком іде текст програми і дані. Вони завантажуються в оперативну пам'ять і переміщуються з використанням бітів переміщення. Таблиця символів використовується для відлагодження.
Ще одним прикладом двійкового файлу є архів, також взятий з UNIX (рис. 4.2, б). Він складається з набору відкомпільованих, але не скомпонованих бібліотечних процедур (модулів). Перед кожним модулем є заголовок, що повідомляє про його ім’я, дату створення, власника, код захисту та розмір. Як і в виконуваному файлі, заголовки модулів заповнені двійковими числами.
Кожна операційна система повинна розпізнавати принаймні один тип файлу - свій власний виконуваний файл, але деякі операційні системи розпізнають і інші типи файлів. Стара система TOPS-20 (для комп'ютера DECsystem 20) дійшла навіть до перевірки часу створення кожного призначеного для виконання файлу. Потім вона знаходила вихідний файл і перевіряла, чи не був він змінений з часу створення виконуваного файлу. Якщо він був змінений, вона автоматично перекомпільовувала вихідний файл. У термінах UNIX це означає, що програма make була вбудована в оболонку. Використання розширень імен файлів було обов'язковим, щоб операційна система могла визначити, яка двійкова програма до якого вихідного файлу прив’язана.
Настільки сувора типізація файлів створює проблеми, якщо користувач робить будь-що несподіване для розробників системи. Уявіть, наприклад, систему, в якій вихідні файли програми мають розширення .dat (файли даних). Якщо користувач пише програму форматування, яка зчитує файл з розширенням .c (програма мовою С), здійснює її перетворення (наприклад, конвертуючи її у вигляд із стандартними відступами), а потім записує перетворений файл в якості вихідного, то вихідний файл отримує тип dat. Якщо користувач намагається запропонувати цей файл компілятору С, щоб той його відкомпілювати, то система відмовить йому в цьому, оскільки у імені файлу невірне розширення. Спроби скопіювати file.dat в file.с будуть відкинуті системою як неприпустимі (щоб уберегти користувача від помилок)
Хоча подібна «дружність» по відношенню до користувача і може надати допомогу новачкам, вона не є зручною для досвідчених користувачів, оскільки їм доводиться докладати значних зусиль, щоб обійти уявлення операційної системи про те, що прийнятно, а що ні.
Доступ до файлів
У найперших операційних системах надавався тільки один тип доступу до файлів - послідовний доступ. У цих системах процес міг читати всі байти або запису файлу тільки по порядку, з самого початку, але не міг перескочити і зчитувати їх не по порядку. Але послідовні файли можна було перемотати назад, щоб зчитати їх по мірі необхідності. Ці файли були зручні в ті часи, коли носієм у сховищах даних служила магнітна стрічка, а не диск.
Коли для зберігання файлів стали використовуватися диски, з'явилася можливість зчитувати байти або записи файлів не у порядку їх розміщення, або мати доступ до записів по ключу, а не по позиції. Файли, чиї байти або записи могли бути зчитані в будь-якому порядку, стали називати файлами з довільним доступом.
Файли з довільним доступом є невід'ємною частиною багатьох додатків, наприклад систем управління базами даних. Якщо авіапасажир замовляє місце на конкретний рейс, програма бронювання повинна мати можливість доступу до запису, що відноситься до цього рейсу, не обтяжуючи себе необхідністю попереднього зчитування записів, що відносяться до багатьох тисяч інших рейсів.
Для визначення місця початку зчитування можуть бути застосовані два методи. При першому методі позиція у файлі, з якої починається читання, задається при кожній операції читання - read. У другому методі для установки на поточну позицію надається спеціальна операція пошуку потрібного місця - seek. Після цієї операції файл може бути зчитаний послідовно з тільки що встановленої поточної позиції. Останній метод використовується в UNIX і Windows.