Дискові структури даних DOS. Визначення номерів кластерiв диску

Страницы работы

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.

Содержание работы

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ «ХПІ»

Кафедра “Обчислювальна техніка та програмування”

Лабораторна робота №11

з курсу “Системне програмне забезпечення”

 на тему: “Дискові структури даних DOS“.

Виконав:             

                                 студент  групи АП-30б   

                                               Попов О.С.

Перевірив:

       Межерицький С. Г.

Харків 2002

Тема: “Дискові структури даних DOS”.

Мета: Отримання практичних навичок роботи з FAT.

Постановка задачі №1: Визначити номери усiх кластерiв  диску,  якi  займає  заданий викладачем файл у поточному каталозi.

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

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

    void Read_Mbr(void) - функцiя читання MBR та пошуку потрiбного роздiлу.

    void Read_Boot(void) - функцiя читання  boot-сектору.

    void Get_First(void) - функцiя визначення  абсолютного номеру сектору початку логiчного диску.

    void Read_Fat(void) - функцiя читання FAT.

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

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

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

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

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

    int Find_Name() - функцiя пошуку iменi у каталозi.

    void End_of_Job(int n) - функцiя видачи повiдомлень  або аварiйного завершення.

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

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

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

struct DADDR { };

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

struct PART { };

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

struct MBR

       { };

Структура кореневого запису;

struct BootRec { };

Структура елемента змiсту;

struct Dir_Item { };

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

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

    buff1[512] - буфер MBR та boot;

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

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

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

    *dir - покажчик на частину каталогу;

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

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

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

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

    cname[12] - поточне iм`я для пошуку;

    Fdisk - фiзичний номер диску;

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

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

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

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

    fsize - розмiр файлу;

    dirnum - номер елемента у змiстi;

    FirstSect - абсолютний номер сектору початку;

    rootdir=1 - ознака кореневого каталогу або пiдкаталогу (1/0);

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

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

Опис алгоритму програми.

Функцiя main запитує iм`я файла,  потiм оброблює його i, якщо все нормально,  то запускає допомiжнi функції, які необхiднi для просмотру FAT заданого файла.

    Функцiя Read_Mbr виконує вибiрку  елемента з таблицi  роздiлiв для заданого диска.

    Функцiя Read_Boot зчитує boot-сектор логiчного диска, причому для гнучкого диска адреса цього сектора назначається - 0, 0, 1, а для жорсткого - вибирається з part.

    Функцiя Get_First  визначає абсолютний номер початкового сектора логiчного диска та зберiгається  у  змiннiй  First_Sect.  Це значення пiдраховується з фiзичної адреси початку,  яка береться з полiв Begin_Hd, Begin_SecTrk елемента таблицi роздiлiв.

    Функцiя Read_Fat зчитує у пам`ять FAT цiлком,  адреса початку FAT на диску  та  її  розмiр  визначаються  з  ранiше  прочитаного Boot-сектора.

    Функцiя Read_13 читає один  сектор  за  допомогою  преривання BIOS.

    Функцiя Sect_to_Daddr перетворює номер  логiчного  сектора  у фiзичну адресу.

    Функцiя Clust_to_Sect перетворює номер кластера у номер  сектора.

    Функцiя Next_Clust  визначає   номер   наступного   кластера, аналiзуючи FAT. Для останнього кластера (i для кореневого каталогу) ця функцiя повертає нульове значення.

    Функцiя Get_Name  призначена для лексичного розбору завдання, вона видiляє з завдання чергове слово  та  переназначає  jobptr. Пусте  (NULL) значення jobptr - свiдотство про вичерпання завдання.

Похожие материалы

Информация о работе

Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.

Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.

Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.

Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.

Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.

Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.