49908 (Програма для роботи з файловою системою), страница 2
Описание файла
Документ из архива "Програма для роботи з файловою системою", который расположен в категории "". Всё это находится в предмете "информатика" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. .
Онлайн просмотр документа "49908"
Текст 2 страницы из документа "49908"
Не існує логічного розходження між обробкою 12-бітових й 16-бітових входів FAT; розходження ставляться тільки до пам'яті й методів доступу. Оскільки процесор 8086 особливо призначений для эфективний обробки 8- або 16-бітових величин, то процедура доступу для 12-бітової FAT є більше складної, чим для 16-бітової.
_____________________________________________________________________
12-бітовий 16-бітовий Значення |
-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і|
000H 0000H Вільний кластер |
001H 0001H Код не використається |
FF0-FF6H FFF0-FFF6H Резерв |
FF7H FFF7H Дефектний кластер |
(не використається) |
FF8-FFFH FFF8-FFFFH Останній кластер в |
файлі |
Всі інші значення Посилання на наступний |
кластер у файлі |
____________________________________________________________________|
Вхід FAT
0 1 2 3 4 5 6 7 8 9
___________________________________________________________________
| FFDH| FFFH| 003H| 005H| FF7H| 006H| FFFH| 000H| 000H| 000H|
| 4093| 4095| 3 | 5 | 4087| 6 | 4095| 0 | 0 | 0 |
|___________________________________________________________|______
| | | |
| | | |
| | | |
| | | |__ не використаний:
| | | доступний кластер
| | |
| | |_____ використати не можна
| |
| |______ не використається: не доступний
|
|
|______ диск двосторонній з подвійною щільністю
Розподіл пам'яті в FAT для типового диска MS DOS
FAT є високоефективною "бухгалтерською" системою, однак тут можуть виникнути різні проблеми й необхідність компромісних рішень. Одна із проблем пов'язана з наявністю частково заповненого кластера наприкінці файлу. При цьому виникає проблема ефективності, пов'язана з використанням кластера більшого розміру, коли відбувається виділення цілого кластера, незалежно від числа содержащихся в ньому байтів. Наприклад, десять 100-байтовых файлів на диску із кластерами розміром по 16 Кбайт, займає 160 Кбайт дискової пам'яті; ті ж файли на диску із кластерами розміром 1 Кбайт займають тільки 10 Кбайт – різниця становить 150 Кбайт, що означає зменшення обсягу пам'яті в 15 разів при використанні кластерів меншого розміру. З іншого боку, програма для 12-бітової FAT, показана на мал.3-10, демонструє складність (а отже, низьку швидкість) переміщення у великому файлі, які мають довгий список посилань між невеликими кластерами. Таким образом, необхідно враховувати характер даних: додатка більших баз даних працюють ефективніше всього із кластерами більшого розміру; використовують кластери меншого розміру, можна розмістити на диску безліч невеликих текстових файлів драйвер, що розробляє, для дискового програміст звичайно встановлює розмір кластера).
Внаслідок відключення електроенергії або безладного виконання програм виникають проблеми руйнування каталогів або таблиць розміщення файлів, які , не будучи виправлені, можуть привести до більше серйозним проблемам. Програма MS DOS CHKDSK може виявляти й фіксують деякі дефекти. (см. КОМАНДИ КОРИСТУВАЧА CHKDSK). Наприклад, однієї з типових проблем є наявність списків "повислих" посилань (dangling allocation lists), викликане тим, що в каталозі відсутній покажчик на початок списку. Подібна ситуація часто буває, коли не був обновлений вхід у каталог, тому що не відбулося закриття файлу перед вимиканням або перезавантаженням комп'ютера. Наслідки цього досить необразливі: дані недоступні, однак це обмеження не впливає на інші операції по розміщенню файлів. Команда CHKDSK може вирішити цю проблему, створивши новий вхід каталогу й зв'язавши його зі списком.
Інші труднощі виникають, якщо розмір файлу у вході каталогу не збігається з його довжиною, що обчислює за допомогою перегляду списку посилань в FAT. Це може викликати невірне виконання програми і повідомлення про помилки MS DOS.
Більше складна й рідше виникаюча проблема зустрічається, коли вхід каталогу заданий правильно, однак список посилань (весь або деяка його частина) використаний також іншим входом каталогу. Виникає важка ситуація, тому що запис або додавання в один файл змінює вміст іншого. Ця помилка звичайно викликає серйозне руйнування даних й/або каталогу й приводить до краху системи.
Подібна проблема зустрічається, коли список зв'язків завершується вільним кластером замість номера останнього кластера. Якщо вільний кластер розподілений до виправлення цієї помилки, ситуація наприкінці кінців перетворюється в описаний вище випадок. Пов'язана із цим труднощі виникає, коли зустрічається значення посилання 1 або значення, перевищує розмір FAT.
Крім CHKDSK, для обслуговування FAT можна використати безліч комерційно доступних сервісних програм. Наприклад, програми реорганізації диска (disk reorganizers) можна застосовувати для зміни структури FAT й упорядкування каталогу так, щоб всі файли на диску були розміщені послідовно в області файлів даних й, зрозуміло, в FAT.
12-бітовий FAT FFFH 007H 000H
003H _____ ____ ____
Резерв _____ | | _|_ | _|__ |
____|____ _|__ | __|_ | 00 |07| | |00| |
| | | | | 00 | FF | 6F |____| F0 FF 0
F9 FF FF 03 40 |___| | | | |__|
| | | | | |
| | | | | |
|______| |_____| |___|
004H
16-бітовий FAT
Резерв
| 0003H
____________ _____ ____ ____ _____ ____ _____ _____
| | | | | | | | | | | | | | | |
F8 FF FF FF 03 00 04 00 FF FF 06 00 07 00 FF FF 00 00
Вхід FAT
__________________________________________________
12-бітовий FAT |резерв| 003H| 004H| FFFH| 006H| 007H| FFFH| 000H|
16-бітовий FAT | |0003H|0004H|FFFFH|0006H|0007H|FFFFH|0000H|
|______|_____|_____|_____|_____|_____|_____|_____|
Вхід каталогу ____________
(указує на |FILE1.TXT |
2 вхід FAT) |___________|
(указує на ____________
5 вхід FAT) |FILE2.TXT |
|___________|
Область файлів даних Відповідний вхід FAT
__________________________________
| FILE1.TXT | 2
|________________________________|
| FILE1.TXT | 3
|________________________________|
| FILE1.TXT | 4
|________________________________|
| FILE2.TXT | 5
|________________________________|
| FILE2.TXT | 6
|________________________________|
| FILE2.TXT | 7
|________________________________|
| не використається (доступний) | 8
|________________________________|
Відповідність між FAT й областю файлів даних
;-і-і-і Одержати номер наступного посилання з 12-бітової FAT
;Параметри:
; ax = поточний номер ліворуч
; ds:bx = адреса FAT (повинна бути безперервної)
;
; Повертає:
; ax = номер наступного посилання
;
; Використає ax, bx, cx
next 12 proc near
add bx,ax /ds:bx - частковий індекс
shr ax,1/ax = зсув /2
/ зрушення не потрібний
pushf / зберегти зрушення
add bx,ax /ds:bx - індекс номера наступного кластера
mov ax,|bx| /ax = індекс номера наступного кластера
popf / зрушення не потрібний
jc shift / пропустити при використанні більше 12 біт
and ax,0fffh / менш 12 біт
ret
shift: mov cx,4/ cx = лічильник зрушень
shr ax,c1 /cx =
ret
next12 endp
Ассемблерная програма для доступу до 12-бітового FAT
Корневий каталог
Входи каталогу, як у кореневому, так й у підкаталогах, мають довжину 32 байта. Кожен вхід включає ім'я файлу й розширення, розмір файлу, початковий вхід в FAT , час і дату створення або останньої модифікації файлу і його атрибути. Ця структура нагадує формат блоків управління файлом (file control blocks - FCBs) для СР/М, використовуваний у файловій системі MS DOS, версії 1.х.
Угода про найменування файлів в MS DOS відбувається також з СР/М: восьмисимвольне ім'я файлу й наступний за ним трьохсимвольний тип файлу, вирівняні ліворуч і при необхідності доповнені пробілами. В межах обмежень символьного ряду ім'я й тип є абсолютно довільними. Час і дата задаються у форматі, використовуваному іншими функціями MS DOS і відбивають час останнього запису файлу.
Показаний дамп сектора каталогу обсягом 512 байт, що тримає 16 входів (кожен вхід у цьому прикладі займає два рядки). Байт зі зсувом ОАВН, що містить значення 10Н позначає, що вхід починаючи з адреси 0А0Н, ставиться до підкаталогу. Байт зі зсувом
;-і-і-і Одержати номер наступного посилання з 16-бітової FAT
;Параметри:
; ax = поточний номер ліворуч
; ds:bx = адреса FAT (повинна бути безперервної)
;
; Повертає:
; ax = номер наступного посилання
;
; Використає ax, bx, cx
next 16 proc near
add ax,ax /ax = зсув ліворуч
add bx,ax /ds:bx - індекс номера наступного посилання
mov ax,|bx| /ax = номер наступного посилання
ret
next16 endp
Ассемблерная програма для доступу до 16-бітового FAT
160Н, що містить 0Е5Н, означає, що файл вилучений. Байт зі зсувом
8ВН і значенням 08Н указує, що вхід каталогу, починаючи зі зсуву
80Н, є міткою тому. В остаточному підсумку, байт зі зсувом 1Е0Н
означає кінець каталогу, з огляду на, що наступні входи каталогу ніколи не використалися й, отже, їхній пошук не потрібно
Корнєвій каталог може мати спеціальний тип входу, що називається міткою тому, ідентифікується типом атрибута 08Н и використається для позначення імені диска. Корнєвій каталог може містити тільки одну мітку тому. Корнєвій каталог може також включати входи, указиває на підкаталоги; такі входи ідентифікуються типом атрибута 10Н і нульовим розміром файлу. Програми обробки підкаталогів повинні здійснює трасування ланцюжків кластерів в FAT.
Два інших особливих типи входів каталогу зустрічаються тільки в підкаталогах. Ці входи містять . и.., що означає відповідно поточний каталог і батьківський каталог для поточні. Ці спеціальні входи, називані іноді альтернативними іменами каталогу (directory aliases), використаються для швидкого переміщення в структурі каталогу.
0 1 2 3 4 5 6 7 8 9 A B C D E F
0000 49 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 10......SYS'.....
0010 00 00 00 00 00 00 59 53-89 0B 02 00 D1 12 00 00 ......YS....O....
0020 4F 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS...SYS'....
0030 00 00 00 00 00 00 41 49-52 0A 07 00 C9 43 00 00 ......AIR...IC..
0040 41 4E 53 49 20 20 20 20-53 59 53 20 00 00 00 00 ANSI.....SYS....
0050 00 00 00 00 00 00 41 49-52 0A 18 00 76 07 00 00 ......AIR...V...
0060 58 54 41 4C 4B 20 20 20-45 58 45 20 00 00 00 00 XTALK....EXE....
0070 00 00 00 00 00 00 F7 7D-38 09 23 02 84 0B 01 00 ......W18.......
0080 4C 41 42 45 4C 20 20 20-20 20 20 08 00 00 00 00 LABEL...........
0090 00 00 00 00 00 00 8C 20-2A 09 00 00 00 00 00 00 .........*.D..R.
00A0 4C 4F 54 55 53 20 20 20-20 20 20 10 00 00 00 00 LOTUS...........
00B0 00 00 00 00 00 00 E0 OA-E1 C6 A6 01 00 00 00 00 ......'.a.&.a...
00C0 4C 54 53 4C 4F 41 44 20-43 4F 4D 20 00 00 00 00 LTSLOAD.COM.....
00D0 00 00 00 00 00 00 E0 0A-E1 06 A7 01 A0 27 00 00 ......'.a.......
00E0 4D 43 49 2D 53 46 20 20-58 54 4B 20 00 00 00 00 MCI-SE...XTK....
00F0 00 00 00 00 00 00 46 19-32 0D B1 01 79 04 00 00 .......F.2.1.y..
0100 58 54 41 4C 4B 20 20 20-48 4C 50 20 00 00 00 00 XTALK...HLP.....
0110 00 00 00 00 00 00 C5 6D-73 07 A3 02 AF 88 00 00 ......Ems.#.....
0120 54 58 20 20 20 20 20 20-43 4F 4D 20 00 00 00 00 TX COM....
0130 00 00 00 00 00 00 05 61-65 0C 39 01 E8 20 00 00 .................
0140 43 4F 4D 4D 41 4E 44 20-43 4F 4D 20 00 00 00 00 COMMAND COM .....
0150 00 00 00 00 00 00 41 49-52 0A 27 00 55 3F 00 00 ......AIR.'.UP...
0160 E5 32 33 20 20 20 20 20-45 58 45 20 00 00 00 00 e23 EXE.....
0170 00 00 00 00 00 00 9C B2-85 0B 42 01 80 5F 01 00 ........2..B.....
0180 47 44 20 20 20 20 20 20-44 52 56 20 00 00 00 00 GD.......DRV.....
0190 00 00 00 00 00 00 E0 0A-E1 06 9A 01 5B 08 00 00 .......'a...'....
01A0 4B 42 20 20 20 20 20 20-44 52 56 20 00 00 00 00 KB.......DRV.....
01B0 00 00 00 00 00 00 E0 0A-E1 06 9D 01 60 01 00 00 .......'a...'....
01C0 50 52 20 20 20 20 20 20-44 52 56 20 00 00 00 00 PR.......DRV.....
01D0 00 00 00 00 00 00 E0 0A-E1 06 9E 01 49 01 00 00 .......'a..'.....
01E0 00 F6 F6 F6 F6 F6 F6 F6-F6 F6 F6 F6 F6 F6 F6 F6 .................
01F0 F6 F6 F6 F6 F6 F6 F6 F6-F6 F6 F6 F6 F6 F6 F6 F6 .................
Шестнадцатеричный дамп сектора каталогу обсягом 512 байт
Область файлу
Область файлу містить підкаталоги, даних файлу й нерозподілені кластери. Область розділяється на кластери фіксованого розміру й використання кожного кластера регламентується відповідним входом FAT.
Практична частина
Лістинг модулів програми
Модуль, який блокує запуск COM та EXE файлів