Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
1.docx
Скачиваний:
27
Добавлен:
12.02.2016
Размер:
1.06 Mб
Скачать

Несуперечливість (Однозначність)файлової системи

Багато файлових систем зчитують блоки, вносять до них зміни, а потім записують їх назад на носій. Якщо збій системи відбудеться до того, як записані всі модифіковані блоки, файлова система може залишитися в суперечливому стані. Для вирішення проблеми суперечливості файлових систем на багатьох комп'ютерах є службові програми, що перевіряють їх несуперечливість. Так, у системі UNIX є fsck, а в системі Windows є scandisk. Можуть застосовуватися два типи перевірки несуперечності: блоковий і файловий.

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

Потім програма зчитує всі i-вузли, при цьому файлова структура ігнорується, і повертаються всі дискові блоки починаючи з нульового. Починаючи з i-вузла можна побудувати список всіх номерів блоків, використовуваних у відповідному файлі. Як тільки буде зчитаний номер кожного блоку, збільшується значення його лічильника в першій таблиці. Потім програма перевіряє список або бітовий масив вільних блоків, щоб знайти всі невживані блоки. Кожна поява блоку в списку вільних блоків призводить до збільшення значення його лічильника в другій таблиці.

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

Інша ситуація виникає коли блок (у нас це номер 4) фігурує в списку вільних блоків двічі. (Дублікати можуть з'явитися, тільки якщо використовується саме список вільних блоків, а не бітовий масив, з яким це просто не може відбутися.) Рішення в такому випадку теж просте: перебудувати список вільних блоків.

Найгірше, якщо один і той же блок даних присутнє у двох або декількох файлах, як сталося з блоком 5 на рис. 4.23, м Якщо який-небудь з цих файлів видаляється, блок 5 поміщається в список вільних блоків, що призведе до того, що один і той же блок буде використовуваним і вільним одночасно. Якщо будуть видалені обидва файли, то блок потрапить в список вільних блоків двічі. Прийнятним вирішенням проблеми є виділення вільного блоку, копіювання в нього вмісту блоку 5 і вставка копії в один з файлів. При цьому інформаційний вміст файлів не зміниться (Хоча в одного з них воно майже завжди буде спотвореним), але структура файлової системи в усякому разі буде несуперечливою. Окрім перевірки правильності обліку кожного блоку програма перевірки файлової системи також перевіряє систему каталогів. Вона також використовує таблицю лічильників, але тепер уже для кожного файлу, а не для кожного блоку. Починаючи з кореневого каталогу вона рекурсивно спускається по дереву, перевіряючи кожен каталог файлової системи. Для кожного i-вузла в кожному каталозі вона збільшує значення лічильника, щоб воно відповідало кількості використань файлу.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]