Списки в оперативній пам'яті, операції над списками. Керування програмами. Керування таймером. Системні керуючі блоки. Управління пам’яттю: таблиця векторів переривань, страница 11

Addr=0DFE:0000  PID=0DFF  Size=5520    Pgm   COMMAND.COM

Addr=0F58:0000  PID=0DFF  Size=1424    Env   COMMAND.COM

Addr=0FB2:0000  PID=0FC6  Size=288     Env   SPO13    C:\SPO13.EXE

Addr=0FC5:0000  PID=0FC6  Size=32768   Pgm   SPO13    C:\SPO13.EXE

Addr=17C6:0000  PID=0000  Size=33376   Free

Addr=9FED:0000  PID=0BDB  Size=288     Data  COMMAND.COM

Після заміни стратегії розміщення

Addr=0215:0000  PID=0008  Size=36032   DOS 

Addr=0AE2:0000  PID=0008  Size=64      DOS 

Addr=0AE7:0000  PID=0AFD  Size=16      Data  COMMAND.COM

Addr=0AE9:0000  PID=0AFD  Size=288     Env   COMMAND.COM

Addr=0AFC:0000  PID=0AFD  Size=3536    Pgm   COMMAND.COM

Addr=0BDA:0000  PID=0BDB  Size=5712    Pgm   COMMAND  dir=C:\WINDOWS

Addr=0D40:0000  PID=0BDB  Size=1424    Env   COMMAND.COM

Addr=0D9A:0000  PID=0DAE  Size=288     Env   DN       c:\dn\DN.COM

Addr=0DAD:0000  PID=0DAE  Size=976     Pgm   DN       c:\dFIRST_FIT_LOW

Addr=0DEB:0000  PID=0DEC  Size=5520    Pgm   COMMAND  c:\dn\DN.COM

Addr=0F45:0000  PID=0DEC  Size=1424    Env   COMMAND.COM

Addr=0F9F:0000  PID=0FB3  Size=288     Env   SPO13    C:\SPO13.EXE

Addr=0FB2:0000  PID=0FB3  Size=32768   Pgm   SPO13    C:\SPO13.EXE

Addr=17B3:0000  PID=0000  Size=33376   Free

Addr=9FDA:0000  PID=0DEC  Size=288     Data  COMMAND.COM

Addr=9FED:0000  PID=0BDB  Size=288     Data  COMMAND.COM

Висновки: в ходi виконання даної роботи вивчили засоби  розподiлу пам'ятi в операцiйнiй системi Ms-DOS  i одержали практичнi навики роботи з блоками управлiння пам'яттю (зокрема була виведена карта пам'ятi ,що розподiляїться ).     


Звіт з лабораторної роботи № 5.

“Системні керуючі блоки”

Мета: Вивчення системних керуючих блоків DOS і отримання практичних навичок роботи ними.

Постановка задачі: Розробити програму, що створює для себе можливість працювати з 50 відкритими файлами одночасно.

Опис програми:

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

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

int inc_jft (int num)      – збільшує розмір таблиці файлів, повертає 0 при успішному завершенні

void get_sft (void)       – функція, що записує у глобальну змінну sft адресу першої системної таблиці файлів

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

Глобальні змінні:

sft                                  – адреса поточної системної таблиці файлів

sftx                                – адреса останньої у списку таблиці файлів

dfcb                               – покажчик на структуру елементу таблиці файлів

dfcb_size                       – розмір DFCB

sft_seg, sft_ofs             – сегмент та зміщення, що складають адресу системної таблиці файлів

files                               – число файлів

Змінні головної функції:

i, j                               – допоміжні змінні

fname                         – ім'я файлу

std_name                    – стандартна частина імен файлів

in                                – масив з ідентифікаторами файлів

axx                              – сегментна частина адреси розширення SFT

msgf                           – рядок, що записується у кожен файл

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

Основна програма складається з трьох етапів. На першому етапі ми визначаємо версію DOS та розширюємо за допомогою функції get_sft ( ) таблицю файлів програми до 60 (50 задано + 5 системних  + 5 резервних ). У разі успішного завершення переходимо до виконання наступного етапу. На другому етапі ми будемо розширяти системну таблицю файлів. Для цього спочатку визначаємо розмір DFCB ( DOS File Control Block - блок контролю файлами DOS ). Для версії DOS 3.x DFCB має розмір 53 байта, а для версії 4.x – 59 байт.

Після цього отримаµмо адресу першої системної таблиці файлів, викликавши функцію get_sft(). Після цього пройдемо весь список таблиць SFT, отримуючи в змінній files кількість елементів в SFT (додаючи поля n_files ). Після цього визначимо необхідний обсяг пам'яті для розширення і використовуємо для виділення пам'яті функцію  DOS 48h.

Після цього поширюємо системну таблицю файлів, дописавши в останній елемент списку SFT покажчик на наше розширення. Заповнюємо створену SFT ( встановимо ознаку кінця списку, число елементів в цій таблиці ) та масив елементів таблиці (обнуливши поля n_handles).