Розвиток файлових систем UNIX

Описана вище класична файлова система UNIX є по-своєму вельми стрункої і потужною, здатної задовольнити різноманітні вимоги користувачів. У той же час ця система давно вже піддавалася критиці за два істотні недоліки, що визначаються вибором описаних вище структур даних.

Ці недоліки наступні:

· Ненадійність;

· Низька продуктивність.

Поговоримо спочатку про ненадійність. Можна назвати такі небезпечні місця в структурі файлової системи UNIX.

· Широке використання зчеплених списковому структур для зберігання життєво важливої ​​інформації про розміщення файлів і вільних блоків. Програмістам відомий основний недолік зчеплених списків: при мінімальному спотворенні хоча б одного з покажчиків втрачається, в кращому випадку, вся наступна частина списку. Можлива і втрата даних, що не входять в ушкоджений список. Спробуйте уявити собі, що станеться на диску, якщо в якості номера непрямого блоку внаслідок апаратного збою буде записано номер ні в чому не винного блоку даних із зовсім іншого файлу ...

· Інтенсивне використання суперблоку для зберігання часто змінюється інформації. Оскільки кожна операція запису пов'язана з можливістю спотворення даних, під загрозою виявляються життєво важливі параметри файлової системи, які теж зберігаються в суперблоці, але не вимагають частих змін: розміри всієї файлової системи і її частин, розмір блоку і т.п.

· Компактне розміщення на початку дискового тому найбільш важливих метаданих (суперблок, масив дескрипторів) призводить до того, що при механічному пошкодженні початкових доріжок диска втрачається можливість доступу до всіх даних на диску.

Давно відомі і фактори, що впливають на зниження продуктивності роботи:

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

· Використовувані алгоритми виділення і звільнення дискових блоків за принципом «останнім звільнився - першим зайнятий» сприяють фрагментації дискового простору, а це, як нам відомо, призводить до зниження швидкості доступу.

Не дивно, що в якості заміни системи s5fs були запропоновані різні більш надійні і продуктивні файлові системи. До їх числа відносяться, наприклад, система FFS, використовувана в версії UNIX 4BSD, а також система ext2, що поставляється з Linux. Всі ці системи підтримують звичну архітектуру UNIX, включаючи структуру каталогів, жорсткі та символічні зв'язки, типи файлів, набір атрибутів. Відмінності полягають в реалізують цю архітектуру структурах дискових даних і в алгоритмах роботи з ними.

Постараємося дати загальне уявлення про напрямки удосконалення файлових систем UNIX, не вдаючись у деталі конкретних систем.

· Дисковий тому розбивається на декілька груп циліндрів. Кожна група містить копію загального суперблоку, а також окремий масив дескрипторів і блоки даних. У разі пошкодження основного примірника суперблоку його вміст може бути відновлено за збереженої копії. Пошкодження метаданих в одній з груп циліндрів не веде до втрати інформації в інших групах.

· Дані про кількість та місцезнаходження вільних блоків винесені з суперблоку і зберігаються окремо в кожній групі циліндрів.

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

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

Потрібно відзначити, що в сучасних версіях UNIX, як і в інших сучасних ОС, підтримується одночасне використання різних файлових систем на різних дискових томах. Цій меті служить поняття віртуальної файлової системи (VFS). Вона дозволяє підключати до єдиного дереву каталогів файлові системи різних типів, у тому числі такі чужорідні для UNIX, як FAT або NTFS. Для роботи з файлами використовується єдиний набір файлових функцій, однак при їх виклик, в залежності від того, до якої файлової системи належить даний файл, будуть викликатися різні підпрограми.