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

Журнальовані файлові системи

Основна ідея полягає в журналюванні всіх намірів файлової системи перед їх здійсненням, тому якщо в системі стається збій ще до того, як у неї з'являється можливість здійснити заплановані дії, то після перезавантаження вона може подивитися в журнал, визначити, що вона збиралася зробити на момент аварії, і завершити свою роботу. Такими є файлова система NTFS, а також файлові системи Linux ext3 і ReiserFS.

Так для видалення файлу в UNIX потрібно виконати три дії:

1. Видалити файл з його каталогу.

2. Звільнити i-вузол, помістивши його в пул вільних i-вузлів.

3. Повернути всі дискові блоки файлу в пул вільних дискових блоків.

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

При журналюванні всі операції повинні бути ідемпонентними, що означає можливість їх повторення необхідну кількість разів без нанесення якої-небудь шкоди. Для досягнення додаткової надійності в файловій системі може бути реалізована концепція атомарної транзакції. Група дій може бути вкладена між операціями початку транзакції – begin transaction і завершення транзакції - end transaction. Розпізнавши ці операції файлова система повинна або повністю виконати всі укладені в цю пару операції, або не виконати жодної з них. NTFS володіє вичерпною системою журналювання, в Linux журналювання підтримують ФС ReiserFS та ext3.

Віртуальні файлові системи

Для інтеграції кількох файлових систем у впорядковану структуру, використовують концепцію віртуальної файлової системи – VFS (virtual file system). Ключова ідея полягає в тому, щоб виділити якусь частину файлової системи, яка є спільною для всіх файлових систем, і помістити її код на окремий рівень, з якого викликаються розташовані нижче конкретні файлові системи з метою фактичного управління даними. Вся структура показана на рис. 5.8.

Рис. 5.7. Розташування віртуальної файлової системи

VFS володіє «верхнім» інтерфейсом до користувальницьких процесів, і це добре відомий інтерфейс POSIX (розуміє POSIX-виклики, такі як open, read, write, Iseek), у VFS є також «нижній» інтерфейс до конкретної файлової системи. Цей інтерфейс складається з декількох десятків викликів функцій, які VFS здатна направляти до кожної файлової системи для досягнення кінцевого результату. За внутрішньою структурою VFS є об'єктно-орієнтованими. Як правило, в них підтримується ряд ключових типів об'єктів. Серед них суперблоки (superblock), які описують файлову систему, v-вузол (v-node), що описує файл, і каталог (Directory), що описує каталог файлової системи. Кожен з них має пов'язані з ними операції (методи), які повинні підтримуватися конкретною файловою системою. Також VFS має ряд внутрішніх структур даних для свого власного використання, включаючи таблицю монтування і масив описувачів файлів, що дозволяє відстежувати всі файли, відкриті в користувальницьких процесах.

Послідовність виконання операцій при роботі VFS:

  1. При завантаженні системи VFS реєструє кореневу файлову систему. При реєстрації файлової системи вона надає список адрес функцій, необхідних VFS, або у вигляді довгого вектора виклику (таблиці), або декількох таких векторів, по одному на кожен VFS-об'єкт, як цього вимагає VFS.

  2. При звернення до файлу, який розташований в одній із файлових систем VFS визначає місце розташування суперблоку, просканувавши список суперблоків встановлених файлових систем.

  3. VFS знаходить кореневий каталог встановленої файлової системи, а в ньому шлях.

  4. VFS створює v-вузол і направляє виклик конкретної файлової системи, щоб повернулася вся інформація, наявна в i-вузлі файлу.

  5. Ця інформація копіюється в v-вузол (в оперативній пам'яті).

  6. Створює запис у таблиці описувачів файлів для процесу і налаштовує її так, щоб вона вказувала на новий v-вузол.

  7. Повертає описувач файлу процесу, який цей файл викликав, щоб той міг використовувати його при читанні, записі та закритті файлу.

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