Курсовая работа: Розробити програму-аналог програми Doc Undelete
Кластер не використовується і доступний для розміщення нового файлу
З (F) FF0 до (F) FF6
Зарезервований кластер (недоступний для звичайного збереження файлів)
(F) FF7
Кластер позначений, як зіпсований, операційною системою MS - DOS і не використовується збереження файлів
З (F) FF8 до (F) FFF
Останній кластер, зайнятий файлом
(X) XXX
Будь-яку інше значення вказує номер кластера в ланцюги, що визначає порядок розміщення файлу
Чому існує два різних формати таблиці FAT? До того, як була введена підтримка твердих дисків під керуванням операційної системи MS-DOS (версія 2.0 операційної системи MS-DOS), розроблювачі операційної системи MS-DOS намагалися мінімізувати розмір пам'яті, необхідний для розміщення таблиці FAT. Оскільки максимальний розмір кластерів для гнучких дисків менше числа 4085 (2847 кластерів на 1,44 3,5-дюймових дисках), дисковий простір буде витрачатися дарма, якщо будуть використовуватися 16-бітові елементи таблиці FAT, а максимальна кількість кластерів, що може бути відображене при 8-бітових елементах буде дорівнювати 255, що не відповідає вимогам використання пам'яті. Тому для того, щоб декодувати значення елементів таблиці FAT, спочатку потрібно визначити загальна кількість кластерів на диску.
Обробка 12-бітових елементів таблиці FAT.
Схема операційної системи MS-DOS розміщення чисел, що мають 1,5 байта в довжину, в елементах таблиці FAT на гнучких дисках може показатися дивної. Але треба знати, що операційна система MS-DOS була спроектована з метою швидкого декодування цих байтів. Спосіб, яким операційна система MS-DOS зберігає інформацію в таблиці FAT, полягає в зашифровці елементів таблиці FAT парами, у яких два 1,5-байтовых елементи об'єднані в невелику 3-байтову пару. Якщо ми хочемо визначити номер кластера в елементі 2 таблиці FAT, ми також повинні подивитися на елемент 3 таблиці FAT. Якщо ми хочемо подивитися на номер кластера в елементі 3 таблиці FAT, ми повинні повернутися назад і подивитися на елемент 2 таблиці FAT. Елементи 4 і 5 таблиці FAT будуть теж здвоєні, як і елементи 6 і 7, 8 і 9 і так далі.
Якщо з номера кластера витягається тільки три цифри, чому ж друга по старшинству цифра номера першого кластера переставляється на місце молодшої цифри другого кластера? Схема перестановок працює швидше, коли машина сама декодує байти і витягає інформацію. Цифри з'являються вже в переставленому виді тільки тоді, коли користувач читає таблицю FAT через DEBUG.
Для декодування інформації у 12-бітових елементах таблиці FAT на чи папері усередині програми потрібно користатися представленою нижче послідовністю дій:
1. Помножити номер елемента таблиці FAT чи кластера на 1,5 байтів (спочатку множте число на 3, а потім поділяєте результат на 2).
2. Використовуйте результат як зсув у таблицю FAT, що вказує на елемент, що відбиває тільки що використовувався кластер. Цей елемент містить номер наступного кластера, займаного тим же файлом.
3. Завантажите слово (2-байтове число), розташоване з цим зсувом, у регістр
4. Тепер у регістрі знаходяться чотири шістнадцяткові цифри. Оскільки нам потрібно тільки три цифри для тризначного елемента таблиці FAT, варто визначити, чи є номер елемента таблиці FAT парним чи непарним числом.
5. Якщо номер елемента представлений парним числом, у регістрі варто зберігати три молодші цифри шляхом виконання операції логічного додавання "И" із зсувом 0FFF. Якщо номер елемента представлений непарним числом, варто зберегти три старші цифри шляхом зрушення регістра вправо на чотири біти командою SHR.
6. Якщо результуючі три цифри являють собою число від FF8 до FFF, це значить, що ви досягли кінця файлу. У противному випадку ці три цифри являють собою номер наступного кластера, зайнятого тим же файлом.
Обробка 16-бітових елементів таблиці FAT.
Робота з номерами кластерів і елементами таблиці FAT на дисках, що використовують 126-бітові елементи таблиці FAT, значно полегшується в порівнянні з роботою, у якій використовуються 12-бітові елементи таблиці FAT, тому що всі елементи таблиці FAT тут вирівняні на границю слова, тобто, кожен елемент таблиці FAT може чи зчитуватися записуватися, як ціле повне слово. При цьому не потрібно піклуватися про сусідні елементи таблиці FAT.
Для декодування інформації у 12-бітових елементах таблиці FAT на чи папері усередині програми потрібно користатися представленою нижче послідовністю дій:
1. Одержати початковий кластер файлу з елемента каталогу
2. Помножити використовуваний номер кластера на 2 (байти; 1 слово).
3. Використовуйте результат як зсув у таблицю FAT, що вказує на елемент, що відбиває тільки що що використовувався кластер. Цей елемент містить номер наступного кластера, займаного тим же файлом.
4. Завантажите слово (2-байтове число), розташоване з цим зсувом, у регістр
5. Якщо результуючі чотири цифри являють собою число від FFF8 до FFFF, це значить, що ви досягли кінця файлу. У противному випадку ці чотири цифри являють собою номер наступного кластера, зайнятого тим же файлом.
Перетворення кластерів у логічні сектори.