
- •Передумови виникнення файлових систем
- •Імена файлів
- •Внутрішня структура файлів
- •Типи файлів
- •Атрибути файлів
- •Операції з файлами
- •Каталоги
- •Системи з однорівневими каталогами
- •Ієрархічні системи каталогів
- •Імена файлів
- •Операції з каталогами
- •Реалізація файлової системи Структура файлової системи
- •Реалізація файлів Неперервне розміщення
- •Реалізація каталогів
- •Типи файлових систем
- •Файлові системи з журнальною структурою
- •Журнальовані файлові системи
- •Віртуальні файлові системи
- •Керування файловою системою
- •Керування дисковим простором
- •Розмір блоку
- •Відслідковування вільних блоків
- •Дискові квоти
- •Резервне копіювання файлової системи
- •Несуперечливість (Однозначність)файлової системи
- •Продуктивність файлової системи Кешування
- •Випереджаюче читання блоку
- •Скорочення обсягу переміщень блоку головок диска
Несуперечливість (Однозначність)файлової системи
Багато файлових систем зчитують блоки, вносять до них зміни, а потім записують їх назад на носій. Якщо збій системи відбудеться до того, як записані всі модифіковані блоки, файлова система може залишитися в суперечливому стані. Для вирішення проблеми суперечливості файлових систем на багатьох комп'ютерах є службові програми, що перевіряють їх несуперечливість. Так, у системі UNIX є fsck, а в системі Windows є scandisk. Можуть застосовуватися два типи перевірки несуперечності: блоковий і файловий.
Для перевірки блокової несуперечності програма створює дві таблиці, кожна з яких складається з лічильника для кожного блоку, спочатку встановленого в нуль. Лічильники в першій таблиці відстежують кількість появ кожного блоку у файлі, а лічильники в другій таблиці реєструють кількість появ кожного блоку в списку вільних блоків.
Потім програма зчитує всі i-вузли, при цьому файлова структура ігнорується, і повертаються всі дискові блоки починаючи з нульового. Починаючи з i-вузла можна побудувати список всіх номерів блоків, використовуваних у відповідному файлі. Як тільки буде зчитаний номер кожного блоку, збільшується значення його лічильника в першій таблиці. Потім програма перевіряє список або бітовий масив вільних блоків, щоб знайти всі невживані блоки. Кожна поява блоку в списку вільних блоків призводить до збільшення значення його лічильника в другій таблиці.
Якщо у файлової системи немає протиріч, у кожного блоку буде 1 або в першій, або в другій таблиці. Але в результаті відмови таблиці можуть прийняти вигляд, показаний на рис. 4.23, б, де блок 2 відсутній в обох таблицях. Він буде фігурувати як зниклий блок. Хоча зниклі блоки не заподіюють істотної шкоди, вони забирають простір, скорочуючи ємність диска. У відношенні зниклих блоків приймається досить просте рішення: програма перевірки файлової системи включає їх у список вільних блоків.
Інша ситуація виникає коли блок (у нас це номер 4) фігурує в списку вільних блоків двічі. (Дублікати можуть з'явитися, тільки якщо використовується саме список вільних блоків, а не бітовий масив, з яким це просто не може відбутися.) Рішення в такому випадку теж просте: перебудувати список вільних блоків.
Найгірше, якщо один і той же блок даних присутнє у двох або декількох файлах, як сталося з блоком 5 на рис. 4.23, м Якщо який-небудь з цих файлів видаляється, блок 5 поміщається в список вільних блоків, що призведе до того, що один і той же блок буде використовуваним і вільним одночасно. Якщо будуть видалені обидва файли, то блок потрапить в список вільних блоків двічі. Прийнятним вирішенням проблеми є виділення вільного блоку, копіювання в нього вмісту блоку 5 і вставка копії в один з файлів. При цьому інформаційний вміст файлів не зміниться (Хоча в одного з них воно майже завжди буде спотвореним), але структура файлової системи в усякому разі буде несуперечливою. Окрім перевірки правильності обліку кожного блоку програма перевірки файлової системи також перевіряє систему каталогів. Вона також використовує таблицю лічильників, але тепер уже для кожного файлу, а не для кожного блоку. Починаючи з кореневого каталогу вона рекурсивно спускається по дереву, перевіряючи кожен каталог файлової системи. Для кожного i-вузла в кожному каталозі вона збільшує значення лічильника, щоб воно відповідало кількості використань файлу.