Реферат по предмету "Информатика, программирование"


Програма для роботи з файловою системою

Міністерство освіти інауки УкраїниФАКУЛЬТЕТ ІНФОРМАТИКИ
КАФЕДРАРеєстраційний №________
Дата ___________________КУРСОВА РОБОТА
Тема:
Програмадля роботи з файловою системою.Рекомендована до захисту
“____” __________ 2008р.
Робота захищена
“____” __________ 2008р.
з оцінкою
_____________________
Підписи членів комісії

ЗмістВступТеоріяПрактична частинаВисновкиЛітература

Вступ
Поставимо перед собою задачу створення програми для роботи зфайловою системою (створення закритих ділянок файловою системи). Для створенняпрограми скористуємося мовою програмування С++. В теоретичній частині роботикоротко охарактеризуємо головні особливості роботи з файловими системами FAT 16(MS-DOS).
Ієрархічна (багаторівнева) файлова система MS-DOS схожа з файловоюсистемою ОС XENIX. Опис багаторівневої каталогової системи й роботи з нею данов MS-DOS в теоретичній частині.

ТЕОРІЯ
Файловасистема є однієї з найбільших частин операційної системи. Файлова система єнадбудовою над носієм даних блокового пристрою (звичайно це дисковід гнучкихмагнітних дисків або вінчестер), що перетворює структуру каталогу й файли у одиницюпам'яті. Файлова система на диску містить, як мінімум, інформацію пророзміщення файлів, каталог й обсяг файлів. Інформація про розміщення файлівможе приймати різні форми в залежності від операційної системи, але всі форми,в основному, стежать простір, використовуваний файлами й простір доступне длянових даних. Каталог містить список файлів, збережених на пристрої, їхнірозміри й інформацію про розміщення цих файлів.
Існуєкілька різних підходів при розміщенні файлів й елементів каталогу. MS-DOSвикористає специфічний метод розміщення, називаний таблицею розміщення файлів(FAT), і ієрархічну структуру каталогу.
Ступіньдеталізації файлу, наявна в розпорядженні операційної системи, також сильноколивається залежно від реалізації. Деякі системи, такі як MS-DOS, мають файли,які доступні на уровні байта; інші системи обмежують цей доступ фіксованим розміромзапису.
Файловісистеми іноді розширюються до таблиці символьних пристроїв, тому що б вони булифайлами. Ці «файли» пристроїв можуть відкриватися, закриватися,читатися, у них можна записувати інформацію як в звичайні дискові файли, алевсі транзакції відбуваються безпосередньо з пристроєм, специфікованим символом.Файли пристрою забезпечують корисну погодженість середовища для прикладнихпрограм. MS-DOS підтримує такі файли шляхом призначення резервного логічногоімені (такі як CON або PRN) кожному символьному пристрою.

Структура файлової системи
Доступдо блокових пристроїв здійснюється по секторах. Ядро MS DOS за допомогоюдрайвера прибудую розглядає блоковий пристрій як логічний кінцевий масивсекторів і припускає, що цей масив містить припустиму в MS-DOS файловуорганізацію. Драйвер прибудую, у свою чергу, перетворити запитий MS DOS налогічнийсектор у фізичну адресі блокового прибудую.
Первіснафайлова система MS DOS записана на згадку з програми MS DOS FORMAT (див. главуUSER COMMANDS: FORMAT).
Секторпочаткового завантаження завжди розташований на качану роздягнула. Він міститьідентифікацію ОЕМ, програма-завантажник і блок параметрів BIOS (BPB) зінформацією про пристрій; потім треба необов'язкова область зарезервованихсекторів (див. нижче розділ СЕКТОР ПОЧАТКОВОЇ ЗАВАНТАЖЕННЯ). Зарезервованаобласть не має спеціального призначення, однак ОЕМ може зажадати більшескладної програми-завантажника й поміститиїї в цю область. Таблиці розміщення файлів (FAT) указують на розташуванняобласті файлів даних; кореневий каталог містить фіксовані число входів, аобласть файлів даних включає файли даних, файли підкаталогів і вільні секториданих.
Всіописані вище області — сектор початкового завантаження, FAT, корневого каталогй область файлів даних — мають фіксований розмір; це означає, що смороду незмінюються після того, як програма FORMAT визначила середовище даних. Розміркожної із цих областей залежить від різних факторів. Наприклад, розмір FATпропорційний області файлів даних. Розмір кореневого каталогу звичайно залежитьвід типу пристроїв; однобічний гнучкий диск може мати 64 входу, двосторонній гнучкийдиск — 1126, а фіксований диск — 256.(Драйвери віртуальних дисків такі, якRAMDRIVE.SYS і деякі реалізації програми FORMAT дозволяють специфицироватьчисло входів каталогу). Область файлів даних описується в термінах кластерів. Кластервизначається як фіксоване число суміжних секторів. Розмір сектора і розміркластера повинні бути рівні ступені 2. Розмір сектора звичайно становить 512байт, а розмір кластера — 1, 2 або 4 Кбайт, однак можливі сектори й кластерибільшого розміру. Нижче наведені типові розміри кластерів, використовуваних вMS DOS :
Загаломкажучи, кластери більшого розміру використаються для фіксованих дисків більшогорозміру. Хоча кластери меншого розміру дають їхнє розташування просторовобільше ефективним, кластери більшого розміру є звичайно більше ефективними для довільногой послідовного доступу, особливо якщо кластери одному файлу расположєнінепослідовно.
Таблицярозміщення файлів містить по одному вході для шкірного кластера в областіфайлів даних. Дублювання секторів у кластері також зменшить удвічі число входівFAT для даного розділу
Секторпочаткового завантаження (мал.3-6) містить блок параметрів BIOS (BPB),програма-завантажник і деякі інші дані корисні для драйверів пристроїв. BPBописує деяке число фізичних параметрів пристрою, а також розташування й розмірінших областей на пристрої. Драйвер пристрою, при відповідному запиті, передаєMS DOS інформацію про BPB, так що MS DOS може визначити конфігурацію диска.
ІнформаціяВРВ, що втримується в байтах з ОВН по 17Н, указує, що:
секторвключає 512 байт,
укластері два сектори;
єодин зарезервований сектор (для сектора початкової
завантаження),2 FAT'а, 112 входів у кореневий каталог;
дискмістить 1440 секторів, F9H дескрипторів пристроїв;
FATвключає 3 сектора.
Наступназа BPB додаткова інформація вказує, що в доріжку втримується 9 секторів, є 2головки читання/запису й 0 невидимих секторів.
Дескрипторносія даних, що вказує у ВРВ й у першому байті кожної FAT, використається дляопису типу носія, що перебуває в даний момент на пристрої. Сумісні з IBM носії данихмають наступні дескриптори:
 ______________________________________________________
 00H| E9 XX XX або EB XX 90 |
 |------------------------------------------------------|
 03H| Ім'я й версія ОЕМ (8 байт) |
 ||
 |______________________________________________________|_____
 0BH| Число байтів у секторі (2 байти) | |
 |______________________________________________________||
 || |
 0DH| Число секторів на пристрої (1 байт) | |
 |______________________________________________________||
 || |
 0EH| Число резервних секторів — нумерація з 0 (2 байти) | |
 |______________________________________________________||
 || |
 10H| Число FAT (1 байт) | |
 |______________________________________________________||
 || |
 11H| Число входів у кореневому каталозі (2 байти) | |
 |______________________________________________________||
 || BPB
 13H| Загальне число секторів на логічному томі (2 байти) | |
 |______________________________________________________||
 || |
 15H| Дескриптор носія даних (1 байт) | |
 |______________________________________________________||
 || |
 16H| Число секторів в FAT (2 байти) | |
 |______________________________________________________|____|
 ||
 18H| Число секторів на доріжці (2 байти) |
 |______________________________________________________|
 ||
 1AH| Число головок (2 байти) |
 |______________________________________________________|
 ||
 1CH| Число невидимих секторів (2 байти) |
 |______________________________________________________|
 ||
 1EH| |
 |ПРОГРАМА-ЗАВАНТАЖНИК |
 ||
 |______________________________________________________|
 Структурасектора початкового завантаження MS DOS
 Байтиз ОВН по 17Н містять блок параметрів BIOS (BPB)
 01 2 3 4 5 6 7 8 9 A B C D E F
0000EB 2D 90 20 20 20 20 20-20 20 20 00 02 02 01 00 .................
001002 70 00 A0 05 F9 03 00-09 20 22 00 00 00 00 00 .................
002000 0A 00 00 DF 02 25 02-09 2A B8 50 F6 02 FA 00 .................
0030BB C0 07 8E D8 BC 80 7C-33 C0 8E C0 F8 02 01 00 .................
.. .
.. .
.. .
0180OA 44 69 73 5B 20 42 48-65 20 48 61 69 65 27 00 .Disk Boot.Failu.
019072 65 0D 0A 0D 0A 0A 4E-6F 20 53 79 73 74 65 60 re....Non-System.
01A020 64 69 73 6B 20 6F 72-20 64 69 73 6B 20 01 72 .disk or disk er
01B072 6F 72 0D 0A 52 65 70-60 61 63 65 20 61 62 64 .ror..Replace..and
01C020 70 72 65 73 73 20 61-6E 79 20 6B 65 79 20 77 .press.any key.w.
01D068 65 6E 20 72 65 61 64-79 79 0D 0A 00 00 00 00 .hen .ready......
01E000 00 00 00 00 00 00 00-00 00 00 00 00 00 00 00 .................
01F000 00 00 00 00 00 00 00-00 00 00 00 00 00 55 AA .................
 Шестнадцатеричныйдамп сектора початкового завантаження MS DOS
_____________________________________________________________________
 ДескрипторТип носія Версії MS DOS |
-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і|
 OF8HФіксований диск 2.3 |
 OF0H3,5-дюймовий, 2-сторонній, 18-секторний 3.2 |
 OF9H3,5-дюймовий, 2-сторонній, 9-секторний 3.2 |
 OF9H5,25-дюймовий, 2-сторонній, 15-секторний 3.x |
 OFCH5,25-дюймовий, 1-сторонній, 9-секторний 2.x,3.x |
 OFDH5,25-дюймовий, 2-сторонній, 9-секторний 2.x,3.x |
 OFEH5,25-дюймовий, 1-сторонній, 8-секторний 1.x,2.x,3.x |
 OFFH5,25-дюймовий, 2-сторонній, 8-секторний 1.x(крім 1.0)|
 OFEH8-дюймової, 1-сторонній, одинарної щільності 2.3 |
 OFDH8-дюймової, 2-сторонній, одинарної щільності |
 OFEH8-дюймової, 1-сторонній, подвійної щільності |
 OFDH8-дюймової, 2-сторонній, подвійної щільності |
____________________________________________________________________|
Таблиця розміщення файлів
Таблицярозміщення файлів представляє схему розміщення файлів в дискової пам'яті задопомогою вказівки того, які кластери й у якому порядку включаються в коженфайл. Для того, щоб MS DOS могла опредилити місце розташування файлу, описданого файлу в каталозі містить номер його початкового входу в FAT. Цей вхідFAT у свою чергу, включає номер входу наступного кластера, якщо файлскладається більш ніж з одного кластера, або номер останнього кластера, якщо файлмістить єдиний кластер. Файл, що складається з 10 кластерів, повинен мати 10входів в FAT й 9 зв'язків між входами FAT(безліч зв'язків для одного файлуназивається ланцюжком — (chain)).
Додатковікопії FAT є резервними й використаються в випадку ушкодження первинної FAT;типові гнучкі й жорсткі диски тримають звичайно 2 FAT. Ці таблицірозташовуються послідовно за сектором початкового завантаження, а між нимиіноді є резервна копія. Як правило, MS DOS використає первинну FAT, однак, припоявлені в ній змін коректуються всі таблиці. Крім того, MS DOS порівнює всітаблиці при першому звертанні до диска, щоб переконатися, що вони відповідаютьодин одному.
MSDOS підтримує два типи FAT: один використає 12-бітові посилання; іншоїзастосовується у версії 3.0 для включення в більші фіксовані диски більше 4087кластерів і використає 16-бітові посилання.
Дваперших входи FAT завжди резервуються й містять копію дескриптора носія даних (1байт) і два (для 12-бітової FAT) або три (для 16-бітової FAТ) байти OFFH, як показанона прикладі наступних дампів перших 16 байтів FAT:
 12-бітоваFAT:
 F9FF FF 03 40 00 FF 6F-00 07 F0 FF 00 00 00 00
 16-бітоваFAT:
 F8FF FF FF 03 00 40 00-FF FF 06 00 07 00 FF FF
Іншівходи FAT перебувають у взаємо-однозначній відповідності с кластерами в областіфайлів даних. Стан кожного кластера відмічається відповідним значенням в FAT(програма FORMAT спочатку позначає вхід FAT для кожного кластера, як вільний). Станкластера може приймати одне з наступних значень:
Якщовхід FAT містить ненульове значення, що відповідає кластер вже зайнятий.Вільний кластер можна знайти, скануючи FAT з початку до виявлення першогонульового значення. Дефектні кластери звичайно идентифицируются в процесіформатування. На мал.3-8 зображена типова ланцюжок FAT.
Вільнівходи FAT містять нульове значення посилання; одиниця, як значення посилання,ніколи не використається. Таким чином, першим номером посилання, пов'язаним зпершим доступним кластером в області файлів даних, є 2; цей номер ставиться до першогофізичного кластеру в області файлів даних. На мал.3-9 показаний зв'язок міжфайлами, входи FAT і кластери в області файлів даних.
Неіснує логічного розходження між обробкою 12-бітових й 16-бітових входів FAT;розходження ставляться тільки до пам'яті й методів доступу. Оскільки процесор8086 особливо призначений для эфективний обробки 8- або 16-бітових величин, то процедурадоступу для 12-бітової FAT є більше складної, чим для 16-бітової.
_____________________________________________________________________
 12-бітовий16-бітовий Значення |
-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і-і|
 000H0000H Вільний кластер |
 001H0001H Код не використається |
 FF0-FF6HFFF0-FFF6H Резерв |
 FF7HFFF7H Дефектний кластер |
 (невикористається) |
 FF8-FFFHFFF8-FFFFH Останній кластер в |
 файлі|
 Всіінші значення Посилання на наступний |
 кластеру файлі |
____________________________________________________________________|
 ВхідFAT
 01 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
 F9FF FF 03 40 |___| | | | |__|
 || | | | |
 || | | | |
 |______||_____| |___|
 004H
 16-бітовийFAT
 Резерв
 |0003H
 _________________ ____ ____ _____ ____ _____ _____
 || | | | | | | | | | | | | | |
 F8FF 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
 next12 proc near
 addbx,ax /ds:bx — частковий індекс
 shrax,1/ax = зсув /2
 /зрушення не потрібний
 pushf/ зберегти зрушення
 addbx,ax /ds:bx — індекс номера наступного кластера
 movax,|bx| /ax = індекс номера наступного кластера
 popf/ зрушення не потрібний
 jcshift / пропустити при використанні більше 12 біт
 andax,0fffh / менш 12 біт
 ret
 shift:mov cx,4/ cx = лічильник зрушень
 shrax,c1 /cx =
 ret
 next12endp
Ассемблерная програма для доступу до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
 next16 proc near
 addax,ax /ax = зсув ліворуч
 addbx,ax /ds:bx — індекс номера наступного посилання
 movax,|bx| /ax = номер наступного посилання
 ret
 next16endp
Ассемблерная програма для доступу до16-бітового FAT
160Н,що містить 0Е5Н, означає, що файл вилучений. Байт зі зсувом
8ВНі значенням 08Н указує, що вхід каталогу, починаючи зі зсуву
80Н,є міткою тому. В остаточному підсумку, байт зі зсувом 1Е0Н
означаєкінець каталогу, з огляду на, що наступні входи каталогу ніколи невикористалися й, отже, їхній пошук не потрібно
 Корнєвійкаталог може мати спеціальний тип входу, що називається міткою тому,ідентифікується типом атрибута 08Н и використається для позначення імені диска.Корнєвій каталог може містити тільки одну мітку тому. Корнєвій каталог можетакож включати входи, указиває на підкаталоги; такі входи ідентифікуються типоматрибута 10Н і нульовим розміром файлу. Програми обробки підкаталогів повинні здійснюєтрасування ланцюжків кластерів в FAT.
Дваінших особливих типи входів каталогу зустрічаються тільки в підкаталогах. Цівходи містять . и.., що означає відповідно поточний каталогі батьківський каталог для поточні. Ці спеціальні входи, називані інодіальтернативними іменами каталогу (directory aliases), використаються дляшвидкого переміщення в структурі каталогу.
 01 2 3 4 5 6 7 8 9 A B C D E F
000049 4F 20 20 20 20 20 20-53 59 53 27 00 00 00 00 10......SYS'.....
001000 00 00 00 00 00 59 53-89 0B 02 00 D1 12 00 00 ......YS....O....
00204F 53 44 4F 53 20 20 20-53 59 53 27 00 00 00 00 MSDOS...SYS'....
003000 00 00 00 00 00 41 49-52 0A 07 00 C9 43 00 00 ......AIR...IC..
004041 4E 53 49 20 20 20 20-53 59 53 20 00 00 00 00 ANSI.....SYS....
005000 00 00 00 00 00 41 49-52 0A 18 00 76 07 00 00 ......AIR...V...
006058 54 41 4C 4B 20 20 20-45 58 45 20 00 00 00 00 XTALK....EXE....
007000 00 00 00 00 00 F7 7D-38 09 23 02 84 0B 01 00 ......W18.......
00804C 41 42 45 4C 20 20 20-20 20 20 08 00 00 00 00 LABEL...........
009000 00 00 00 00 00 8C 20-2A 09 00 00 00 00 00 00 .........*.D..R.
00A04C 4F 54 55 53 20 20 20-20 20 20 10 00 00 00 00 LOTUS...........
00B000 00 00 00 00 00 E0 OA-E1 C6 A6 01 00 00 00 00 ......'.a.&.a...
00C04C 54 53 4C 4F 41 44 20-43 4F 4D 20 00 00 00 00 LTSLOAD.COM.....
00D000 00 00 00 00 00 E0 0A-E1 06 A7 01 A0 27 00 00 ......'.a.......
00E04D 43 49 2D 53 46 20 20-58 54 4B 20 00 00 00 00 MCI-SE...XTK....
00F000 00 00 00 00 00 46 19-32 0D B1 01 79 04 00 00 .......F.2.1.y..
010058 54 41 4C 4B 20 20 20-48 4C 50 20 00 00 00 00 XTALK...HLP.....
011000 00 00 00 00 00 C5 6D-73 07 A3 02 AF 88 00 00 ......Ems.#.....
012054 58 20 20 20 20 20 20-43 4F 4D 20 00 00 00 00 TX COM....
013000 00 00 00 00 00 05 61-65 0C 39 01 E8 20 00 00 .................
014043 4F 4D 4D 41 4E 44 20-43 4F 4D 20 00 00 00 00 COMMAND COM .....
015000 00 00 00 00 00 41 49-52 0A 27 00 55 3F 00 00 ......AIR.'.UP...
0160E5 32 33 20 20 20 20 20-45 58 45 20 00 00 00 00 e23 EXE.....
017000 00 00 00 00 00 9C B2-85 0B 42 01 80 5F 01 00 ........2..B.....
018047 44 20 20 20 20 20 20-44 52 56 20 00 00 00 00 GD.......DRV.....
019000 00 00 00 00 00 E0 0A-E1 06 9A 01 5B 08 00 00 .......'a...'....
01A04B 42 20 20 20 20 20 20-44 52 56 20 00 00 00 00 KB.......DRV.....
01B000 00 00 00 00 00 E0 0A-E1 06 9D 01 60 01 00 00 .......'a...'....
01C050 52 20 20 20 20 20 20-44 52 56 20 00 00 00 00 PR.......DRV.....
01D000 00 00 00 00 00 E0 0A-E1 06 9E 01 49 01 00 00 .......'a..'.....
01E000 F6 F6 F6 F6 F6 F6 F6-F6 F6 F6 F6 F6 F6 F6 F6 .................
01F0F6 F6 F6 F6 F6 F6 F6 F6-F6 F6 F6 F6 F6 F6 F6 F6 .................
Шестнадцатеричныйдамп сектора каталогу обсягом 512 байт
Область файлу
Областьфайлу містить підкаталоги, даних файлу й нерозподілені кластери. Областьрозділяється на кластери фіксованого розміру й використання кожного кластера регламентуєтьсявідповідним входом FAT.

Практична частина
 
Лістинг модулів програми
Модуль, який блокує запуск COM та EXE файлів
#include
#include
#include
#include
#include
#include
unsigned char buffer[3];
FILE *fd;
int handle;
fail(char *);
void pass(char *);
main(int argc,char *argv[])
 {
 int n;
 if(argc!=3)
 {
 printf("\nFailpass Utility v1.0 Email:chingpongin@yahoo.co.in");
 printf("\nEnable/Disable .EXE or .COM execution");
 printf("\nsyntex failpass fail");
 printf("\n                        or");
 printf("\n           failpass pass");
 exit(2);
 }
 strupr(argv[1]);
 n=strcmp(argv[1],«FAIL»);
 if(n==0)
 {
 fail(argv[2]);
 exit(2);
 }
 n=strcmp(argv[1],«PASS»);
 if(n==0)
 {
 pass(argv[2]);
 exit(2);
 }
 return 0;
}
fail(char *fname)
 {
 _chmod(fname,1,FA_ARCH);
 fd=fopen(fname,«rb+»);
 if(fd==NULL)
 {
 printf("\nCann't open %s\n\n",fname);
 exit(2);
 }
 fseek(fd,0,SEEK_SET);
 fread(buffer,2,1,fd);
 if(buffer[0]==0xcd)
 if(buffer[1]==0x20)
 {
 fclose(fd);
 printf("\n%s already protected...\n\n",fname);
 exit(2);
 }
 fseek(fd,0,SEEK_END);
 fwrite(buffer,2,1,fd);
 fseek(fd,0,SEEK_SET);
 buffer[0]=0xcd; /* don't take any PANGA with this line */
 buffer[1]=0x20; /* don't take any PANGA with this line */
 fwrite(buffer,2,1,fd);
 fclose(fd);
 return 0;
}
void pass(char *fname)
 {
 int xyz;
 fd=fopen(fname,«rb+»);
 if(fd==NULL)
 {
 fclose(fd);
 printf("\nCannot open file %s\n\n",fname);
 exit(2);
 }
 fseek(fd,0,SEEK_SET);
 fread(buffer,2,1,fd);
 if(buffer[0]!=0xcd)
 if(buffer[1]!=0x20)
 {
 fclose(fd);
 printf("\n%s is NOT protected....\n\n",fname);
 exit(2);
 }
 fseek(fd,-2,SEEK_END);
 fread(buffer,2,1,fd);
 fseek(fd,0,SEEK_SET);
 fwrite(buffer,2,1,fd);
 fclose(fd);
 handle=open(fname,O_RDWR);
 chsize(handle,(filelength(handle))-2);
 close(handle);
}
Модуль, який пише та читає інформацію напряму в ділянку дискубез звертання до FAT системи
include common.mac
text         segment use16
assume   CS:text, DS:text
   org       256
myproc   proc
   mov     AH,09h                        ;printing function
  
   printf   g          ;print g
   printf   g1        ;print g1
  
   ;parse the command line...
   getf      guff      ;guff will have the command line
   ;is the command line empty?
   cmp     guff[0], 0
   je          expl
  
   ;is the command line starting with ?
   cmp     guff[0], '?'
   je          expl
  
   ;we are reading the disk
   cmp     guff[0], '^'
   je          readdisk
              
   ;nothing else but to write...
   jmp      writedisk
writedisk:
   printf   g2
   waitenter
   mov     AH, 09h           ;writing out
   printf   g3        ;what are we doing
   printf   guff      ;file name
   call       disk_write ;write to disk
   jmp      rc
readdisk:
   printf   g2
   waitenter
   call       disk_read ;write from disk
   jmp      rc
expl:
   printf   gline
   jmp      rc
rc:           ;return
   mov     AX, 4C00h
   int        21h
myproc   endp   
;====================================================================
;====================================================================
;==================== Procedure: disk_read=======================
;====================================================================
;====================================================================
disk_read proc
   mov     AH, 02h ;read raw input
   mov     AL, 1   ;number of sectors
   mov     CH, 0   ;cylinder
   mov     CL, 1   ;sector
   mov     DH, 1   ;head
   mov     DL, 0   ;disk drive — floppy
   lea        BX, guff
   int        13h      ;call BIOS
   jnae      ocr
   ;now guff stores file name
   mov     AH, 02h
   mov     AL, 1
   mov     CH, 1
   mov     CL, 1
   mov     DH, 0
   mov     DL, 0
   lea        BX, file
   int        13h      ;call BIOS
   jnae      ocr
  
   ;decrypt data
   call       chiper
   ;write output to the file saved
   mov     AH, 3Ch                      ;create file
   mov     CX, 0               ;no attributes
   lea        DX, guff           ;name
   int        21h                  ;call DOS
   mov     handle, AX      ;get file handle
   mov     AH, 40h                       ;write to file
   mov     BX, handle       ;handle
;get len
   mov     CX, 0   ;dump CX and SI
   mov     SI, 0
clen:
   cmp     file[SI], 0 ;is it zero yet?
   je          clenf     ;this is the len
   inc        SI         ;increase counting
   inc        CX       ;increase counting
   jmp      clen      ;jump   back
clenf:
   lea        DX, file            ;file data
   int        21h                  ;call DOS
  
   mov     AH, 3Eh                       ;close file
   mov     BX, handle       ;handle
   int        21h                  ;call DOS
   ;open file for writing....
   mov     AH, 09h
   printf   success
   jmp      finr
ocr:
   mov     AH, 09h
   printf error
finr:        ret
disk_read endp
;====================================================================
;====================================================================
;====================================================================
;====================================================================
;==================== Procedure: disk_write ======================
;====================================================================
;====================================================================
disk_write proc
   ;write file name
   mov     AH, 03h                       ;write raw output
   mov     AL, 1               ;write 1 sector
   mov     CH, 0               ;cylinder zero
   mov     CL, 1                ;sector no 1
   mov     DH, 1               ;head 1
   mov     DL, 0               ;disk drive A:
   lea        BX, guff           ;set buffer
   int        13h                 ;call BIOS
   ;read file...       
   mov     AH, 3Dh                      ;open file
   mov     AL, 2               ;read-write
   lea        DX, guff           ;file name
   int        21h                  ;call DOS
   mov     handle, AX      ;get handle
  
   mov     AH, 3Fh                       ;reading file
   mov     BX, handle       ;set handle
   mov     CX, 1024                     ;reading
   lea        DX, file            ;buffer
   int        21h                  ;call DOS
  
   ;encrypt data
   call       chiper 
  
   ;looping through each
   mov     AH, 03h
   mov     AL, 1
   mov     CH, 1
   mov     CL, 1
   mov     DH, 0
   mov     DL, 0
   lea        BX, file
   int        13h
  
   ;show message
   jnb       okw
occ:
   mov     AH, 09h
   printf   error
   jmp      fin
okw:
   mov     AH, 09h
   printf   success
fin:          ret        ;return backwards
disk_write endp
;====================================================================
;====================================================================
;====================================================================
;====================================================================
;==================== Procedure: chiper==========================
;====================================================================
;====================================================================
chiper     proc
   mov     SI, 0
   ;xor values
chipe:
   cmp     file[SI], 0
   je          chipf    ;jump if zero...
   xor       file[SI], 3
   inc        SI         ;increase counter
   jmp      chipe
chipf:                 
   ret ;return
chiper     endp
;====================================================================
;====================================================================
   g          db        'Welcome to Disk Encryptor 1.1...',10, 13, 'This program allows you to save encrypted data onto the disk....', 10,13, 'Features: Data Chipering, Maximum of 1024 bytes of raw data', 10,13,'Software Written in Assembler', 10, 13, '$'
   gline     db        10, 13, '? — help', 10, 13, '^ — readsa file from the floppy', 10, 13, '[Filename] — Saves the file onto a floppy',10, 13, '$'
   g1        db        'Copyright (C) Daniel Moisyeyev 2002.All Rights Reserved.', 10, 13, 10, 13, '$'
   g2        db        10, 13, 'Please insert a floppy andpress any key...', 10, 13, '$'
   g3        db        10, 13, 'About to write $'
   error    db        10, 13, 'Error occured$'
   success db        10, 13, 'Operation Completed$'
   num     db        4 dup(0), '$'
   guff      db        15        dup(0) 
  
   ;file storage
   handle  dw       0
   file       db        1024    dup(0)
text         ends
end    myproc

Робота з програмою
Розроблена програма являє собою дві утіліти командного рядку.Перша дозволяє блокувати запуск виконавчіх файлів COM та EXE:
failpass fail
failpass pass
 друга – тестує роботу з ділянкою диску в обхід FAT системи
Please insert a floppy and press any key...
About to write
Operation Completed

Висновки
Наприкінціроботи відмітимо лише, що доступ до блокових пристроїв здійснюється посекторах. Ядро MS-DOS за допомогою драйвера пристрою розглядає блоковий пристрійяк логічний кінцевий масив секторів і припускає, що цей масив міститьприпустиму в MS-DOS файлову організацію.
Драйверпристрою, у свою чергу, перетворить запит MS-DOS на логічний сектор у фізичнуадресу блокового пристрою. Первісна файлова система MS DOS записана за допомогоюпрограми MS-DOS FORMAT (див. теоретичну частину роботи).

Література
1.Нейбауэр А. Моя первая программа на С/С++. П., 1995. 368 С.
2.Бруно Бабэ. Просто и ясно о Borland C++. М., 1996. 400 С.
3.ObjectWindows для C++. К., 1993., 208 С.
4. Н.Барканати. Программирование игр для Windows на Borland C++. М., 1994.


Не сдавайте скачаную работу преподавателю!
Данный реферат Вы можете использовать для подготовки курсовых проектов.

Поделись с друзьями, за репост + 100 мильонов к студенческой карме :

Пишем реферат самостоятельно:
! Как писать рефераты
Практические рекомендации по написанию студенческих рефератов.
! План реферата Краткий список разделов, отражающий структура и порядок работы над будующим рефератом.
! Введение реферата Вводная часть работы, в которой отражается цель и обозначается список задач.
! Заключение реферата В заключении подводятся итоги, описывается была ли достигнута поставленная цель, каковы результаты.
! Оформление рефератов Методические рекомендации по грамотному оформлению работы по ГОСТ.

Читайте также:
Виды рефератов Какими бывают рефераты по своему назначению и структуре.