
- •Глава 6
- •Мал. 6.3. Сегментований процес до відображення файлів на адресний простір (а); процес після відображення існуючого файлу abc на один сегмент і створення нового сегменту для файлу xyz (б)
- •Мал. 6.5. Дворівнева каталогова система
- •Мал. 6.11. Таблиця розміщення файлів
- •Мал. 6.13. Простий каталог, що містить записи фіксованої довжини з атрибутами і дисковими адресами (а); каталог, в якому кожен запис являється просто посиланням на I-вузол (б)
- •Мал. 6.15. Файлова система, що містить сумісно використовуваний файл.
- •Мал. 6.16. Ситуація до зв’язку (а); після створення зв’язку (б); власник видалив свій файл (в)
- •Мал. 6.19. Майже повний блок покажчиків вільних блоків в пам'яті і три блоки покажчиків на диску (а); результат видалення трьохблокового файлу (б); альтернативна стратегія (в)
- •Мал. 6.21. Файлова система, що архівується
- •Мал. 6.23. Стани файлової системи : несуперечливе (а); зниклий блок (б); дублікат блоку в списку вільних блоків (в); дублікат блоку даних (г)
- •Мал. 6.24.Структура даних блочного кеша
- •Мал. 6.25.1-вузли, розміщені на початку диска (а); диск, розділений на групи циліндрів, кожна зі своїми власними блоками і і-вузлами (б)
- •Мал.6.29. Формат каталогового запису в системі ms – dos/
- •Мал. 6. 32. Приклад збереження довгого імені файлу в системі Windows 98.
- •Мал. 6.34. І-вузол файлової системи unix v7.
- •Мал. 6. 35. Етапи пошуку файлу /usr/ast/mbox
Мал.6.29. Формат каталогового запису в системі ms – dos/
Каталоговий запис також містить дату і час створення або останньої зміни файлу. Час зберігається з точністю ±2 с, оскільки для нього відведено 2-байтове поле, здатне містити всього 65 536 унікальних значень, а в добі 86 400 с. Поле часу розбивається на підполя секунд (5 біт), хвилин (6 біт) і годин (5 біт). 16-розрядне поле дати також розбивається на три підполя: день (5 біт), місяць (4 біт) і рік - 1980 (7 біт). При 7 двійкових розрядах для зберігання року і 1980 як точка відліку максимальне значення року, яке можна виразити у такий спосіб, - це 2107-й. Таким чином, файлова система MS - DOS має вбудовану проблему 2108 року. Щоб уникнути катастрофи, користувачі системи MS - DOS повинні почати готуватися до 2108 року якомога раніше. Якби в MS - DOS використовувався єдиний 32-розрядний лічильник секунд, точність представлення часу була б в два рази вище, а катастрофу можна було б відкласти до 2116 року.
На відміну від файлової системи СР/М, що не зберігає точного розміру файлу, система MS - DOS зберігає точний розмір. Оскільки для розміру файлу використовується 32-розрядне число, в теорії файли можуть бути розміром до 4 Гбайт. Проте інші межі (описувані нижче) обмежують максимальний розмір файлу розміром 2 Гбайт або менше. Напрочуд велика частина описувача файлу (10 байт) не використовується.
Інша відмінність системи MS - DOS від СР/М полягає в тому, що дискові адреси файлів не зберігаються прямо в їх описувачах, можливо, оскільки розробники системи розуміли, що великі жорсткі диски (звичайні у той час на міні-комп'ютерах) одного дня з'являться у світі MS - DOS. Замість цього файлова система MS - DOS зберігає номери блоків файлу в спеціальній таблиці розміщення файлів, в оперативній пам'яті. У каталоговому записі зберігається номер першого блоку файлу. Цей номер використовується як індекс для 64 К1 елементів FAT-таблиці, що зберігається в оперативній пам'яті. Усі блоки файлу можуть бути знайдені, якщо проїхати по ланцюжку елементів таблиці. Принцип дії FAT-таблиці проілюстрований на мал. 6.11.
Залежно від кількості блоків на диску в системі MS - DOS застосовується три версії файлової системи FAT : FAT - 12, FAT - 16 і FAT - 32. У дійсності FAT - 32 є невірною назвою, оскільки використовуються тільки 28 молодших бітів дискової адреси. Її слід було б назвати FAT - 28, але міри двох зву-чат набагато приємніший.
У усіх файлових системах FAT розмір блоку диска в байтах може бути встановлений рівним деякому числу, кратному 512 (можливо, різному для кожного розділу диска), з наборами дозволених розмірів блоків (званих корпорацією Microsoft розмірами кластерів), різними для кожного варіанту FAT. У першій версії системи MS - DOS використовувалася FAT - 12 з 512-байтови-ми блоками, що дозволяло створювати дискові розділи розміром до 212 х 512 байт (насправді тільки 4086 х 512 байт, оскільки 10 дискових адрес використовувались як спеціальні маркери - кінець файлу, дефектний блок і т. д.). При цьому максимальний розмір дискового розділу міг складати 2 Мбайт, а в оперативній пам'яті FAT-таблиця займала 4096 елементів по два байти кожен. Крім того, обробка 12-розрядних адрес була досить повільною.
Така система непогано працювала на гнучких дисках, але з появою жорстких дисків з'явилися проблеми. Корпорація Microsoft спробувала вирішити проблему, дозволивши використовувати дискові блоки (кластери) розміром 1, 2 і 4 Кбайт. Це дозволило зберегти структуру і розмір таблиці FAT - 12 і збільшити разів-заходів дискового розділу до 16 Мбайт.
Оскільки система MS - DOS підтримувала до чотирьох дискових розділів на диску, нова файлова система FAT - 12 могла працювати з дисками місткістю до 64 Мбайт. Для підтримки вінчестерів більшого розміру треба було робити щось ще. В результаті була розроблена файлова система FAT - 16, з 16-розрядними дисковими покажчиками. Додатково було дозволено використовувати кластери розмірів 8, 16 і 32 Кбайт. (32 768 - це максимальне число, що є мірою двох, яке може бути представлене 16 двійковими розрядами.) Тепер таблиця FAT - 16 постійно займала 128 Кбайт оперативної пам'яті, але із зростанням розмірів пам'яті комп'ютерів вона отримала широке застосування і швидко витіснила файлову систему FAT - 12. Максимальний розмір дискового розділу, підтримуваний системою FAT, - 16, дорівнює 2 Гбайт (64 До елементів по 32 Кбайт кожен), а максимальний розмір диска - 8 Гбайт, тобто чотири розділи по 2 Гбайт кожен.
Для зберігання ділового листування таке обмеження проблем не викликає, проте при роботі з цифровим відео в стандарті DV один 2-гігабайтний файл вміщує усього лише дещо більше 9 мін відеофільму. Таким чином, на увесь диск з чотирьох розділів може поміститися близько 38 мін відео, незалежно від розмірів самого диска. Це обмеження також означає, що в режимі on - line редагувати можна не більше 19 мін фільму, оскільки на диску потрібно одночасно зберігати і вхідні і вихідні файли.
З виходом другої версії операційної системи Windows 95 була представлена файлова система FAT - 32 зі своїми 28-розрядними адресами. При цьому вер-сия системи MS - DOS, що лежить в основі Windows 95, була адаптована для підтримки FAT - 32. Теоретично в цій системі розділи могли бути по 228 х 215 байт, але фактично розмір розділів обмежений 2 Тбайт (2048 Гбайт), оскільки внутрішньо система враховує розміри розділів в 512-байтових секторах за допомогою 32-розрядних чисел, а 232 х 29 байт рівне 2 Тбайт. Максимальний розмір розділу для усіх трьох типів FAT і різних розмірів кластерів показаний в таблиці. 6.3. Порожнім елементам таблиці відповідають заборонені комбінації.
Таблиця
6.3. Максимальний розмір розділу для
різних розмірів кластерів
Розмір кластера,
Кбайт
FAT - 12, Мбайт
FAT - 16, Мбайт
FAT - 32, Тбайт
0,5
2
1
4
2
8
128
4
16
256
1
8
512
2
16
1024
2
32
2048
2
Окрім підтримки дисків більшого розміру, файлова система FAT - 32 володіє двома іншими перевагами перед системою FAT - 16. По-перше, 8-ги-габайтний диск, що використовує FAT - 32, може складатися з усього одного розділу. При використанні FAT - 16 він повинен був містити чотири розділи, що прононувалось користувачам системи Windows як логічні пристрої С:, D:, Е: і F :. Який файл на якому пристрої розташовувати, вирішувати користувачеві.
Інша перевага FAT - 32 перед FAT - 16 полягає в тому, що для дискового розділу заданого розміру можуть використовуватися блоки меншого розміру. Наприклад, для 2-гігабайтного дискового розділу система FAT - 16 повинна користуватись 32-кілобайтними блоками, інакше за наявності всього 64 До доступних дискових адрес вона не змогла б покрити увесь розділ. В той же час система FAT - 32 для такого ж дискового розділу може використовувати, наприклад, блоки розміром 4 Кбайт. Перевага блоків меншого розміру полягає в тому, що довжина більшості файлів менше 32 Кбайт. При розмірі блоку в 32 Кбайт навіть 10-байтовий файл займатиме на диску 32 Кбайт. Якщо середній розмір файлів, скажімо, дорівнює 8 Кбайт, тоді при використанні 32-кілобайтних блоків близько 3/4 дискових простору втрачатиметься, тобто ефективність використання диска буде низькою. При 8-кілобайтних файлах і 4-кілобайтних блоках втрат дискового простору не буде, але платою за це буде те, що для збереження таблиці FAT буде потрібно значно більше оперативній пам'яті. При 4-кілобайтних блоках 2-гігабайтний розділ складатиметься з 512 До блоків, по-цьому таблиця FAT повинна складатися з 512 До елементів (займаючи 2 Мбайт ОЗУ).
Файлова система MS - DOS використовує FAT для обліку вільних блоків. Будь-який незайнятий блок позначається спеціальним кодом. Коли системі MS - DOS потрібно новий блок на диску, вона шукає цей код в таблиці FAT. Таким чином, бітовий масив або список вільних блоків не потрібні.
Файлова система Windows 98
Перша версія операційної системи Windows 95 використовувала файлову систему MS - DOS, з іменами файлів з 8 + 3 символів і системами FAT - 12 і FAT - 16. Починаючи з другої версії системи Windows 95, були дозволені довші імена файлів. Крім того, була представлена система FAT - 32, в першу чергу для підтримки дисків розміром більше 8 Гбайт і дискових розділів, більших, ніж 2 Гбайт. Та ж файлова система була використана в системі Windows 98. Нижче будуть описані ці особливості файлової системи Windows 98, також застосовуються в системі Windows Me.
Оскільки довгі імена файлів справляють на користувачів більше сильне враження, ніж структура FAT, розглянемо їх в першу чергу. Для того, щоб дозволити користувачам працювати з довгими іменами файлів, можна було просто розробити нову структуру каталогу. Недолік такого підходу полягає в тому, що якби корпорація Microsoft зробила це, користувачі, що досі переходять з Windows 3 на Windows 95 або Windows 98, не змогли б мати доступу до усіх своїх файлів одночасно з обох систем. У корпорації Microsoft було прийнято політичне рішення про те, що файли, створені в системі Windows 98, мають бути також доступні з Windows 3 (для машин з подвійним завантаженням). В результаті була розроблена система підтримки довгих імен, що мала зворотну сумісність із старою системою імен 8 + 3, що застосовувалась в MS - DOS. Оскільки такі вимоги зворотної сумісності нерідкі в комп'ютерній промисловості, варто детально ознайомитися з тим, як корпорація Microsoft виконала це завдання.
Отже, каталогова структура системи Windows 98 повинна була мати зворотну сумісність із структурою каталогів MS - DOS. Як вже було показано, ця структура є просто списком 32-байтових описувачів (мал. 6.30). Такий формат був запозичений у файлової системи СР/М (написаною для процесора Intel 8080), що демонструє, наскільки довго структури (застарілі) можуть існувати у комп'ютерному світі.
Проте в 32-байтовому описувачі файлу залишалися незадіяними 10 байт (див. мал. 6.29), що і було використано. Ця зміна не має ніякого відноення до довгих імен, але використовується в Windows 98, тому варто звернути на нього увагу.
Мал. 6.30. Формат каталогового запису в системі MS - DOS
Зміна каталогового запису полягає в додаванні п'яти нових полів на місце тих, що не використалися 10 байт. Поле NT призначене для сумісності з Windows NT і забезпечує відображення імені файлу в правильному регістрі. Поле Sec вирішує проблему неможливості зберігання часу доби в 16-бітовому полі з точністю до секунди. Вісім додаткових розрядів дозволяють зберігати поле Creation time (час створення) з точністю до 10 мс. Ще одне нове поле Last access (дата останнього доступу) зберігає дату (але не час) останнього доступу до файлу. Нарешті, перехід на файлову систему FAT - 32 означає, що номери блоків тепер 32-розрядні, тому для зберігання старших розрядів номера початкового блоку файлу потрібно додаткові 16 біт.
Тепер ми підходимо до серця файлової системи Windows 98: способу представлення довгих імен файлів, що має зворотну сумісність з MS - DOS. Вибране рішення полягає в призначенні кожному файлу двох імен : (потенціально) довгого імені файлу (у форматі Unicode, для сумісності з Win - dows NT) і імені формату 8 + 3 для сумісності з MS - DOS. Доступ до файлів може дістати по будь-якому імені. Коли створюється файл, ім'я якого не задовольняє правилам MS - DOS (8 символів для імені і 3 символи для розширення, обмежений набір символів, відсутність пропусків і т. д.), Windows 98 створює додаткове ім'я формату MS - DOS відповідно до певного алгоритму. Беруться перші шість символів імені, перетворяться при необхідності у верхній регістр ASCII, після чого до них додається суфікс - 1. Якщо таке ім'я вже є, то використовується суфікс - 2 і т. д. Крім того, віддаляються Пропуски і зайві точки, а певні символи перетворяться в символи підкреслення. Наприклад, ім'я файлу The time has come the walrus saidотримує ім'я формату MS - DOS THETIM - 1. Якщо згодом створюється файл з ім'ям The time has come the rabbit said, йому призначається ім'я THETIM - 2 і т. д.
Ім'я формату MS - DOS зберігається в каталозі прямо в описувачі, показаному на мал. 6.30. Якщо у файлу є також довге ім'я, воно зберігається в одній або декількох каталогових записах, передуючих описувачу файлу з ім'ям у форматі MS, - DOS. Кожен такий запис містить до 13 символів формату Unicode. Елемент імені зберігаються в зворотному порядку, починаючись відразу перед описувачем файлу у форматі MS - DOS і наступними фрагментами перед ним. Формат кожного фрагмента довгого імені показаний на мал. 6.31.
Мал. 6.31. Формат каталоговой запису з фрагментом довгого імені файлу в Windows 98
Виникає очевидне питання: "Як файлова система Windows 98 відрізняє каталогові записи, що містять ім'я файлу у форматі MS - DOS, від фрагментів довгих імен"? Відповідь міститься в полі Attributes (атрибути). Для фрагмента довгого імені це поле містить значення OxOF, що відповідає неможливої комбінації атрибутів для описувача файлу в MS - DOS. Старі програми, написані для роботи в MS, - DOS, читаючи каталог, просто ігнорують такі описувачі як невірні. Порядок фрагментів імені враховується в першому байті каталогового запису. Останній фрагмент імені відзначається додаванням до порядкового номера числа 64. Оскільки для порядкового номера використовується всього 6 біт, теоретично максимальна довжина імені файлу може скласти 63 х 13 = 819 символів. На практиці вона обмежена 260 символами з історичних причин.
Кожен фрагмент довгого імені містить поле Checksum (контрольна сума) щоб уникнути наступної проблеми. Спочатку програма, що працює в системі Windows 98, створює файл з довгим ім'ям. Потім комп'ютер перезавантажується в MS - DOS або Windows 3. Після цього стара програма, видаляючи файл, видаляє з каталогу ім'я формату MS - DOS, але залишає в нім передування йому довге ім'я (оскільки їй нічого не відомо про довгі імена). Нарешті, якась програма створює новий файл, використовуючи місце, що звільнилося, в каталогу. До цього моменту ми маємо вірну послідовність фрагментів довгого імені, передуючу описувачу файлу формату MS, - DOS, який не має до неї ніякого відношення. Поле Checksum дозволяє системі Windows 98 знайти таку ситуацію. Звичайно, оскільки для поля Checksum використовується всього один байт, є один шанс з 256, що Windows 98 не помітить підміни.
Розглянемо приклад використання довгого імені файлу на мал. 6.32. В даному випадку файл названий The quick brown fox jumps over the lazy dog. Оскільки в цьому імені 42 символи, то воно ясно кваліфікується як довге. Ім'я формату MS - DOS, створене з нього, виглядає як THEQUI~ 1 і зберігається в останньому записі.