Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
НАЦІОНАЛЬНИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ «ХПІ»
Лабораторна робота №7
з курсу “Системне програмне забезпечення”
на тему: “Керування пам’яттю “.
Виконав:
студент групи АП-30б
Попов О.С.
Перевірив:
Межерицький С. Г.
Тема: “Керування пам’ятю.”
Мета: Перегляд таблиці векторів перериваннь, що на даний час знаходяться в ЕОМ на робочому місці.
Постановка задачі: Визначити на данній ЕОМ, ким зайняті вектори перериваннь (DOS, BIOS, ім’я програми)
Програма складається з основної програми main () та 5 допоміжних функцій.
void *readvect (int in) - функція читає вектор переривання з номером in і вертає його значення.
void get_memtop (void) - функція вертає адресу початку ланцюжка MСB csegm.
void DOS _version_h (void) - функція вертає номер версії DOS .
void name_handler (void) - функція знаходить, якою програмою було перехоплено поточне переривання.
void Printvec (int num) - функція виводить на екран номер преривання й програми що їх перехопили починаючи з номеру num.
Змінні глобальні для всієї програми :
memtop - сегментна адреса початку пам'яті;
csegm - сегментна адpеса поточного MСB;
othersegm - сегментна адреса іншого MСB;
fathersegm - сегментна адреса батька;
*envstr - адpеса рядка оточення;
envlen - довжина чергового рядка оточення;
envsize - розмір блоку оточення;
DOS - номер версії DOS ;
vect - вектор;
intnum - номер переривання.
Головна програма main ( ) виконує нескінченний цикл для обробки кодів нажатих клавіш й в залежності від них викликається функція Printvec (int num) для виводу на екран інформації про вектори переривання. Вихід з даного циклу здійснюється по натиску клавіши Esc.
Функцўя readvect () читає вектор заданого переривання. Для читання вектору використовуємо функцію 35h DOS (переривання 21h) :
Вхід : Ah = 35h;
Al = номер вектору переривання.
Вихід : ES:BX = адреса програми обробки переривання.
Функція get_memtop () вертає адресу початку ланцюжка MСB csegm.
Функція DOS_version_h () повертає номер версії DOS за допомогою функції 0x30.
Функція name_handler () знаходить, якою програмою було перехоплено поточне переривання. Для визначення власника вектору переривання нам необхідно визначити клас блоку. Клас блоку визначаїться по наступним правилам :
якщо Pid власника блоку нульовий - блок є вільним (клас Free). Для зайнятих блоків клас уточнюється; якщо Pid ( сегментна адреса Psp ) власника містить адресу, що лежить до кінця пам'яті, що розподіляється memtop ( звичайно це число 8 ), то блок одержує клас DOS .Для блоків, що не належать DOS, перш за все перевіряється сегментна адреса власника. Якщо ця адреса є адресою сегменту, наступного за поточним MСB, це означає, що блок пам'яті містить програмний сегмент і одержує клас Pgm.
В іншому випадку програма " зазираї " в Psp власника. Зі зміщенням 0x2c в Psp міститься адреса сегменту оточення; якщо ця адреса є адресою сегменту, наступного за поточним MCB, то блок одержує клас Env. Якщо клас блоку не вдається визначити ніяким з описаних вище засобів, вважаймо, що блок містить дані й одержує клас Data.
Для програм, запущених з командного рядка DOS ,батьком є Command.Com. Батьком Command.Com є він сам. По цій ознаці ( сам собі батько ) він і може бути ідентифікований.
Якщо ж програма не є програмою DOS , командним процесором чи резидентною, завантаженою по Install, для неї повинен зберігатися рядок виклику. Рядок виклика знаходиться у сегменті оточення.
Функцўя Printvec (int num) виводить на екран номера переривання і програми, що їх перехопили, починаючи з номеру num, при цьому вона в циклі викликає функцію name_handler () для отримання інформацўії про програму, що перехопила поточний вектор переривання.
Уважаемые коллеги! Предлагаем вам разработку программного обеспечения под ключ.
Опытные программисты сделают для вас мобильное приложение, нейронную сеть, систему искусственного интеллекта, SaaS-сервис, производственную систему, внедрят или разработают ERP/CRM, запустят стартап.
Сферы - промышленность, ритейл, производственные компании, стартапы, финансы и другие направления.
Языки программирования: Java, PHP, Ruby, C++, .NET, Python, Go, Kotlin, Swift, React Native, Flutter и многие другие.
Всегда на связи. Соблюдаем сроки. Предложим адекватную конкурентную цену.
Заходите к нам на сайт и пишите, с удовольствием вам во всем поможем.
Уважаемый посетитель!
Чтобы распечатать файл, скачайте его (в формате Word).
Ссылка на скачивание - внизу страницы.