Теорія операційної системи

:: Меню ::

Головна
Представлення даних в обчислювальних системах
Машинні мови
Завантаження програм
Управління оперативною пам'яттю
Сегментна і сторінкова віртуальна пам'ять
Комп'ютер і зовнішні події
Паралелізм з точки зору програміста
Реалізація багатозадачності на однопроцесорних комп'ютерах  
Зовнішні пристрої
Драйвери зовнішніх пристроїв
Файлові системи
Безпека
Огляд архітектури сучасних ОС

:: Друзі ::

Карта сайту
 

:: Статистика ::

 

 

 

 

 

Прості файлові системи

Найбільш простий файловою системою можна рахувати структуру, що створюється архіватором системи UNIX — програмою tar (Таре Archive — архів на [магнітною] стрічці). Цей архіватор просто пише файли один за іншим поміщаючи на початку кожного файлу заголовок з його ім'ям і довжиною (мал. 11.5). Аналогічну структуру мають файли, що створюються архіваторами типа arj; на відміну від них, tar не упаковує файли.

Мал. 11.5. Структура архіву tar

Для пошуку якогось певного файлу ви повинні прочитати перший заголовок; якщо це не той файл, то відмотати стрічку до його кінця, прочитати новий заголовок і так далі Це не дуже зручно, якщо ми часто звертаємося до окремих файлів, особливо враховуючи те, що цикл перемотування — прочитування — перемотування у більшості стрічкопротяжних пристроїв відбувається набагато повільніше, ніж просте перемотування. Зміна ж довжини файлу в середині архіву або його стирання взагалі перетворюється на цілу епопею. Тому tar використовується для того, щоб зібрати файли з диска в якусь єдину суть, наприклад, для передачі по мережі або для резервного копіювання, а для роботи файли зазвичай розпаковуються на диск або інший пристрій з довільним доступом.
Для того, щоб не займатися при кожному новому пошуку переглядом всього пристрою, найзручніше розмістити каталог у визначеному місці, наприклад на початку стрічки. Найбільш просту, із знайомих авторові, файлову систему такого типа має ОС Rt-11. Це єдина відома авторові файлова система, яка з однаковим успіхом застосовувалася як на стрічках, так і на пристроях з довільним доступом. Усе більш складні ФС, обговорювані далі, використовуються лише на пристроях довільного доступу. У наш час найбільш поширений тип пристрою довільного доступу, що запам'ятовує, — це магнітний або оптичний диск, тому далі в тексті ми називатимемо такі пристрої просто дисками — скорочено, хоча таке скорочення і не цілком коректно.
У цій ФС, як і у всіх обговорюваних далі, місце на диску або стрічці виділяється блоками. Розмір блоку, як правило, збігається з апаратним розміром сектора (512 байт у більшості дискових пристроїв), проте багато фс можуть використовувати логічні блоки, що складаються з декількох секторів (так звані кластери).
Використання блоків і кластерів замість адресації з точністю до байта обумовлене двома причинами. По-перше, у більшості пристроїв довільного доступу доступ довільний лише з точністю до сектора, тобто не можна довільно вважати або записати будь-який байт — потрібно прочитувати або записувати весь сектор цілком. Саме тому в системах сімейства Unix такі пристрої називаються блоковими (block-oriented).
По-друге, використання крупних одиниць, що адресуються, дозволяє різко збільшити простір, що адресується. Так, використовуючи 16-бітовий покажчик, з точністю до байта можна адресувати всього 64 Кбайт, але якщо як одиниця адресації узяти 512-байтовий блок, то об'єм даних, що адресуються, зможе досягти 32 Мбайт; якщо ж використовувати кластер розміром 32 Кбайт, то можна працювати з даними об'ємом до 2 Гбайт. Аналогічно, 32-бітовий покажчик дозволяє адресувати з точністю до байта 4 Гбайт даних, тобто менше, ніж типовий сучасний жорсткий диск; але якщо перейти до адресації по блоках, то адресний простір виросте до 2 Тбайт, що вже цілком прийнятно для більшості сучасних пристроїв, що запам'ятовують.
Таким чином, адресація блоками і кластерами дозволяє використовувати в системних структурах даних короткі покажчики, що приводить до зменшення об'єму цих структур і до зниження накладних витрат. Під накладними витратами в даному випадку мається на увазі не лише звільнення дискового простору, але і прискорення доступу: структури меншого розміру швидше прочитуються, в них швидше проводиться пошук і так далі Проте збільшення об'єму кластера має оборотну сторону — воно приводить до внутрішньої фрагментації (див. разд. Алгоритми динамічного управління пам'яттю).
Ряд сучасних файлових систем використовує механізм, по-англійськи званий block siiballocation тобто розміщення частин блоків. У цих ФС кластери мають великий розмір, але є можливість розділити кластер на декілька блоків меншого розміру і записати в ці блоки "хвости" від декількох різних файлів (мал. 11.6). Це, безумовно, ускладнює ФС, але дозволяє одночасно використовувати переваги, властиві і великим, і маленьким блокам. Тому ряд поширених ФС, наприклад файлова система Novell Netware 4.1 і FFS (відома також як UFS і Berkley FS), використовувана в багатьох системах сімейства Unix, пріменяє цей механізм.

Мал. 11.6. Субаллокация блоків

Субаллокация вимагає від файлової системи підтримки запасу вільних блоків на випадок, якщо користувачеві потрібно буде збільшити довжину одного з файлів, "хвіст" якого був упакований у фрагментований блок. Навчальні посібники по Netware рекомендують підтримувати на томах з субаллокацией не менше тисячі вільних кластерів, але не надають штатних методів забезпечення цієї вимоги. Навпаки, UFS показує вільне місце на диску з врахуванням "недоторканного" резерву вільного простору, так що нульовий вільний простір, що показується, відповідає 5% або 10% фізичного вільного місця. Об'єм цього резерву набудовується утилітами конфігурації ФС.
Але повернемося до простих файлових систем. У Rt-11 кожному файлу виділяється безперервна область на диску. Завдяки цьому в каталозі досить зберігати адресу першого блоку файлу і його довжину, також виміряну в блоках. У Rt-11 вчинили ще простіше: порядок записів в каталозі збігається з порядком файлів на диску, і початком файлу вважається закінчення попереднього файлу. Вільним ділянкам диска теж відповідає запис в каталозі (мал. 11.7). При створенні файлу система шукає першу вільну ділянку відповідного розміру.
Фактично ця структура відрізняється від формату tar лише тим, що каталог винесений в початок диска, і існує поняття вільної ділянки усередині області даних. Ета проста організація має дуже серйозні недоліки.

  1. 1. При створенні файлу програма повинна вказати його довжину. Часто це буває скрутно. Особливо незручно збільшувати розмір вже створеного файлу. Точніше, це просто неможливо: замість подовження старого файлу доводиться створювати новий файл потрібної довжини і копіювати вміст старого файлу в нього.
  2. 2. При хаотичному створенні і видаленні файлів виникає проблема фрагментації вільного простору. Для її вирішення існує спеціальна програма SQUEESE (стискувати [диск]), яка переписує файли г так, щоб об'єднати всі вільні фрагменти (мал. 11.8). Ця програма вимагає багато часу, особливо для великих дискових томів, і потенційно небезпечна: якщо при її виконання станеться збій системи (а з машинами третього покоління таке траплялося по декілька раз на день), то значна частина даних буде необоротний зруйнована.

Мал. 11.7. Структура файлової системи Rt-11

Мал. 11.8. Дефрагментація диска в Rt-11


Для того, щоб вирішити обидві ці проблеми, необхідно дозволити файлам займати несуміжні області диска. Найбільш простим рішенням було бь зберігати в кінці кожного блоку файлу покажчик на наступний, тобто превра тіть файл в зв'язаний список блоків (мал. 11.9). При цьому, природно в кожному блоці зберігати не 512 байт даних, а на 2 — 4 байти менше. При строго послідовному доступі до файлу таке рішення було б впотне прийнятним, але при спробах реалізувати довільний доступ виникнуть незручності. Можливо, тому, а може і по якихось причинах, що історично склалися, таке рішення не використовується ні в одній з відомих авторові ОС.

Мал. 11.9. Файл у вигляді односвязного списку блоків

Частково схоже рішення було реалізоване в MS DOS і DR DOS. Ці системи створюють на диску таблицю, звану FAT (File Allocation Table, таблиця розміщення файлів). У цій таблиці кожному блоку, призначеному для зберігання даних, відповідає 12-бітове значення. Якщо блок вільний, то значення буде нульовим. Якщо ж блок належить файлу, то значення дорівнює адресі наступного блоку цього файлу. Якщо це останній блок у файлі, то значення — OXFFF (мал. 11.10). Існує також спеціальний код для позначення поганого (bad) блоку, що не читається із-за дефекту фізичного носія. У каталозі зберігається номер першого блоку і довжина файлу, вимірювана в байтах.
Ємкість диска при використанні 12-бітовій FAT виявляється обмежена 4096 блоками (2 Мбайт), що прийнятно для дискет, але абсолютно не годиться для жорстких дисків і інших пристроїв великої ємкості. На таких пристроях DOS використовує FAT з 16-бітовими елементами. На ще більших (більше 32 Мбайт) дисках DOS виділяє простір не блоками. а кластерами з декількох блоків. Ета файлова система так і називається - FAT.
Вона дуже проста і має одну серйозну гідність: природжену стійкість до збоїв (fault tolerance) але про це далі. В той же час у неї є і ряд серйозних недоліків.

Мал. 11.10. Структура файлової системи FAT

Перший недолік полягає в тому, що при кожній операції над файлами система повинна звертатися до FAT. Це приводить до частих переміщень голівок дисковода і в результаті до різкого зниження продуктивності. Дійсно, виконання програми arj на одній і тій же машині під MS DOS і під DOS-эмулятором систем Unix або Os/2 розрізняється за швидкістю майже в 1,5 разу. Особливо це помітно при архівації великих каталогів.
Використання дискових кешів, а особливе приміщення FAT в оперативну пам'ять, істотно прискорює роботу, хоча зазвичай FAT кешируєтся лише для читання ради стійкості до збоїв. При цьому ми стикаємося із специфічною проблемою: чим більше диск, тим більше у нього FAT, відповідно, тим більше потрібно пам'яті. В тому Novell Netware 3.12 розміром 1,115 Гбайт з розміром кластера 4 Кбайт розмір FAT досягає мегабайта (легко зрозуміти, що Netware використовує FAT з 32-розрядними елементами. При 16-розрядному елементі FAT дисковий том такого об'єму з таким розміром кластера просто неможливий). При монтуванні такого тому Netware займає під FAT і кеш каталогів близько 6 Мбайт пам'яті.
Для порівняння, Netware 4 використовує субаллокацию, тому можна відносно безкарно збільшувати об'єм кластера і немає необхідності робити кластер таким маленьким. Для дисків такого об'єму Netware 4 встановлює розмір кластера 16 Кбайт, що приводить до зменшення всіх структур даних в 4 рази. Зрозуміло, що для MS DOS, яка уміє адресувати всього 1 Мбайт (1088 Кбайт, якщо дозволений НМА), зберігати такий FAT в пам'яті цілком просто неможливо.
Розробники фірми Microsoft пішли іншим шляхом: вони обмежили розрядність елементу FAT 16 бітами. При цьому розмір таблиці не може перевищувати 128 Кбайт, що цілком терпимо. Зате вся файлова система може бути розбита лише на 64 Кбайт блоків. У старих версіях MS DOS це приводило до неможливості створювати файлові системи розміром 32 Мбайт.
У версіях старше 3.11 з'явилася можливість об'єднувати блоки в кластери Наприклад, на дисках розміром від 32 до 64 Мбайт кластер складатиметься з 2 блоків і матиме розмір 1 Кбайт. На дисках розміром 128—265 Мбайт кластер буде вже розміром 4 Кбайта і так далі
Windows 95 використовує захищений режим процесора х86, тому адресний простір там значно більше одного мегабайта. Розробники фірми Microsoft вирішили скористатися цим і реалізували версію FAT з 32-бітовим елементом таблиці — так званий Fat32. Проте дисковий кеш Windows 95 не прагне утримати весь FAT в пам'яті; замість цього FAT кешируєтся на спільних підставах, нарівні з призначеними для користувача даними. Оскільки робота з файлами великого (більше одного кластера) об'єму вимагає дослідження ланцюжка елементів FAT, а відповідні блоки таблиці можуть не потрапляти в кеш, то продуктивність різко падає. У супровідному файлі Microsoft визнає, що продуктивність Fat32 на операціях послідовного читання і запису може бути в півтора рази нижче, ніж в кешированного FAT 16.
На закінчення можна сказати, що при використанні FAT на великих дисках ми вимушені робити вибір між низькою продуктивністю, потребами в значному об'ємі оперативної пам'яті або великим розміром кластера, який приводить до істотних втрат із-за внутрішньої фрагментації.
Для ефективного управління великими об'ємами даних необхідне щось складніше, ніж FAT.

 

:: Реклама ::

 

:: Посилання ::


 

 

 


Copyright © Kivik, 2017