5. Абстрактна файлова система.
Розглянемо приклад найпростішої (абстрактної) таблиці змісту, заголовку тому (диска, пакета дисків), яка в різних ОС має різні найменування - VTQC - Volume Table of Content (таблиця змісту томи), FAT - File Allocation Table (таблиця розміщення файлів), FDT - File Definition Table (таблиця визначення файлів) і т.п. (рис).
Вона дуже схожа на «справжню» і складається з трьох областей:
• область файлів – таблиця, що має зазвичай обмежене число рядків N (в MS DOS, наприклад, N = 500, тобто число файлів не більше 500). Кількість стовпців М (у прикладі М = 5) зазвичай вибирається з тих міркувань, щоб 85-95% файлів, що створюються користувачами, містили б не більше М блоків, що залежить як від розміру блоку і типу користувача, так і від загального рівня розвитку інформаційного та програмного забезпечення. Перший стовпець таблиці в кожному рядку (заголовковий запис - Title Record) містить дані про фото, в даному прикладі - ім’я файлу;
• область переповнення - додаткова таблиця аналогічної структури, в яку записуються номери блоків особливо довгих файлів (у прикладі File_l). Організація таблиці розміщення у формі області файлів і області переповнення, дозволяє заощадити на обсязі таблиці в цілому, не обмежуючи вірогідної довжини файлу;
• список вільних блоків - інформація, необхідна для розміщення створюваних або розширюваних файлів. Список створюється при ініціалізації і включає всі блоки, крім пошкоджених, а потім коригується при створенні, видаленні, модифікації файлів;
• список збійних блоків - таблиця, яка створена при ініціалізації (розмітці, форматуванні) тому (диска), поповнювана програмами діагностики та запобігання виділення дефектних областей на магнітному носії під файли даних.
Тут не вказані такі відомі як атрибути файлів, довжина (в байтах), час створення, тип (архівний, прихований, тільки для читання, не для виконання та ін.), Які можуть міститися в заголовковому записі таблиці (колонка 1). У розвинених системах колективного користування такі дані містяться в спеціальних таблицях поділу повноважень, оскільки перераховані, та й інші атрибути повинні бути співвіднесені з конкретними користувачами.
Крім того, десь повинні бути розміщені мітка тому (ім’я та тип / об’єм), кількість зайнятого і вільного простору та інша сукупна інформація по тому даних.
Перерахуємо особливості ситуації, в найпростішій (штучній) файловій системі:
• File_l займає 6 блоків, це число більше за максимальне, тому адресу останнього блоку (№ 23) розміщено в таблиці переповнення;
• File_2 займає 2 блоки, що менше обмеження, тому вся інформація зосереджена в області файлів.
Є такі конфліктні ситуації:
• File_3 не містить жодного блоку (отже, файл був видалений, але заголовковий запис зберігся);
• File_4 і File_l посилаються на блок № 3. Це – помилка, оскільки кожен блок повинен бути закріплений за єдиним файлом;
«File_l містить посилання на блок № 7, позначений як зіпсований (незчитаний). Це призведе до неможливості коректно повністю прочитати даний файл;
• у списку вільних блоків містяться номери блоків № 12 (позначений як зіпсований) і № 13 (розподілений під File_l).
Це очевидні свідчення про початок руйнування файлової системи. Перераховані конфлікти можуть мати свої джерела збою, програмні помилки (розробників ОС), некоректне завершення ОС або цілеспрямовану діяльність вірусних чи інших зловмисних програм.
Всі операційні системи, як правило, підтримують наступні елементи ієрархічних файлових систем – звичайні файли, каталоги, спеціальні байт-орієнтовані і блокорієнтовані файли. Файл є масивом байтів (блоків фіксованої довжини). Каталоги забезпечують зв’язок між іменами файлів і власне файлами. Кожен елемент каталогу містить ім’я файлу і посилання на конкретний файл. Для іменування файлів використовуються кореневі та поточні каталоги.
Найбільш поширені два підходи:
• записо-орієнтовані файли - вже відомий підхід, коли користувачі представляють файл як послідовність записів. Записи можна читати або записувати послідовно або позиціонувати файл на запис з вказаним номером;
• потоко-орієнтовані файли - другий підхід, який став поширеним разом з операційною системою UNIX, полягає в тому, що будь-який файл представляється як послідовність байтів. З файлу можна прочитати вказане число байтів, або починаючи з його початку, або попередньо провівши його позиціонування на байт з вказаним номером. Аналогічно можна записати вказане число байтів в кінець файлу або попередньо виконавши позиціонування файлу (Рис).
