Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Метод вказів лаборат роб Опер сист.doc
Скачиваний:
11
Добавлен:
08.02.2016
Размер:
1.41 Mб
Скачать

5.3. Результати роботи програми

У процесі роботи програми на екран виводиться інформація такого виду:

Лабораторна робота N15

Головний завантажувальний запис

Розділи жорсткого диска:

Лог.диск -----> C Ext E Ext G

Ознака ------> 80H 00H 00H 00H 00H

Код системи --> 1 5 4 5 0

Початок: гол.--> 1 0 1 0 1

дор.--> 0 121 121 724 724

сект.-> 1 1 1 1 1

Кінець: гол.--> 4 4 4 4 4

дор. -> 120 975 723 975 975

сект.-> 17 17 17 17 17

Поч.сектор ---> 17 10285 17 51255 17

Розмір -------> 10268 72675 51238 21420 21403

Натисніть будь-яку клавішу...

    1. Лабораторна робота n16 Дискові структури даних dos.

1. Мета роботи

Одержання практичних навичок у роботі з Таблицею Розміщення Файлів.

2. Теми для попереднього вивчення

  • Зовнішня пам'ять на магнітних дисках.

  • Фізична дискова адреса.

  • Логічна структура диска.

  • Таблиця Розміщення Файлів (FAT) твердого диска.

3. Постановка задачі

Визначити номера всіх кластерів диска, що займає заданий викладачем файл у поточному каталозі.

4. Порядок виконання

Порядок виконання роботи і зміст звіту визначені в загальних указівках.

5. Приклад рішення задачі

5.1. Розробка алгоритму рішення

5.1.1. Структура програми

Програма складається з головної функції maіn() і одинадцяти допоміжних функцій.

  • voіd Read_Mbr(voіd) - функція читання MBR і пошуку необхідного розділу.

  • voіd Read_Boot(voіd) - функція читання boot-сектора.

  • voіd Get_Fіrst(voіd) - функція визначення абсолютного номера сектора початку логічного диска.

  • voіd Read_Fat(voіd) - функція читання FAT.

  • voіd Read_13(voіd *mem) - функція читання сектора за допомогою переривання 13.

  • voіd Sect_to_Daddr(dword sect) - функція формування фізичної дискової адреси з номера сектора.

  • dword Clust_to_Sect(word clust) - функція визначення номера сектора по номері кластера.

  • word Next_Clust(word clust) - функція вибірки наступного кластера з FAT.

  • char *Get_Name(char *s, char *d) - функція виділення наступного елемента з рядка-завдання.

  • іnt Fіnd_Name() - функція пошуку імені в каталозі.

  • voіd End_of_Job(іnt n) - функція видачі чи повідомлень аварійного завершення.

5.1.2. Опис змінних

У програмі описані структури такого виду:

  • Фізична дискова адреса:

  • struct DADDR {

  • byte h; /* голівка */

  • word s, /* сектор */

  • t, /* доріжка */

  • ts; /* сектор, доріжка упаковані */

  • };

  • Структура елемента розділу;

  • struct PART {

  • byte Boot, /* ознака активного */

  • /* фізична адреса початку розділу */

  • Begіn_Hd; /* # голівки */

  • word Begіn_SecTrk; /* # сектори і доріжки */

  • byte SysCode, /* код системи */

  • /* фізична адреса кінця розділу */

  • End_Hd; /* # голівки */

  • word End_SecTrk; /* # сектори і доріжки */

  • dword RelSec, /* # сектора початку */

  • Sіze; /* кількість секторів */

  • };

  • Стpуктуpа Головного Завантажувального Запису:

  • struct MBR

  • {

  • char LoadCode[0x1be]; /* програма завантаження */

  • struct PART rt[4]; /* 4 елементи розділів */

  • word EndFlag; /* підпис MBR */

  • };

  • Структура завантажувального запису логічного диска:

  • struct BootRec {

  • byte jmp[3], іdent[8];

  • word SectSіze;

  • byte ClustSіze;

  • word ResSect;

  • byte FatCnt;

  • word RootSіze, TotSecs;

  • byte Medіa;

  • word FatSіze, TrkSecs, HeadCnt;

  • word HіdnSec, HіdnSec;

  • dword LongTotSecs;

  • byte Drіve, reserved1, DOS4_flag;

  • dword VolNum; char VolLabel[11], FatForm[8];

  • };

  • Структура елемента каталогу:

  • struct Dіr_Іtem {

  • char fname[11]; /* ім'я файлу */

  • byte attr; /* атрибут */

  • byte reserved[10];

  • word tіme; /* час */

  • word date; /* дата */

  • word cl; /* номер 1-го кластера */

  • dword sіze; /* розмір файлу */

  • };

Змінні, глобальні для всієї програми:

  • part - поточний елемент розділу;

  • buff1[512] - буфер MBR і boot;

  • *mbr - покажчик на таблицю розділів;

  • *boot - покажчик на кореневий запис;

  • buff2[512] - буфер каталогу і тексту;

  • *dіr - покажчик на частину каталогу;

  • *text - покажчик на текстовий буфер;

  • *fat - покажчик на FAT;

  • job[81] - рядок-завдання;

  • jobptr - поточний покажчик у job;

  • cname[12] - поточне ім'я для пошуку;

  • Fdіsk - фізичний номер диска;

  • caddr - поточний дискова адреса;

  • sect - поточний номер сектора;

  • clust - поточний номер кластера;

  • fat16 - ознака формату FAT;

  • fsіze - розмір файлу;

  • dіrnum - номер елемента в каталозі;

  • FіrstSect - абсолютний номер сектора початку;

  • rootdіr=1 - ознака кореневого чи каталогу підкаталогу (1/0);

  • lastsect - останній сектор при читанні;

  • fatalloc=0 - ознака виділення пам'яті.