Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

lab7 / 0303_Болкунов_ВО_ЛР7

.pdf
Скачиваний:
3
Добавлен:
12.08.2022
Размер:
233 Кб
Скачать
☆

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)

Кафедра математического обеспечения и применения ЭВМ

ОТЧЕТ По лабораторной работе № 7

по дисциплине «Операционные системы» Тема: Построение модуля оверлейной структуры

Студент гр. 0303

 

Болкунов В.О.

Преподаватель

 

 

Губкин А. Ф.

Санкт-Петербург

2022

Цель работы.

Исследование возможности построения загрузочного модуля оверлейной структуры. Исследуется структура оверлейного сегмента и способ загрузки и выполнения оверлейных сегментов. Для запуска вызываемого оверлейного модуля используется функция 4B03h прерывания int 21h. Все загрузочные и оверлейные модули находятся в одном каталоге. В этой работе также рассматривается приложение, состоящее из нескольких модулей, поэтому все модули помещаются в один каталог и вызываются с использованием полного пути.

Порядок выполнения работы.

Шаг 1. Для выполнения лабораторной работы необходимо написать и отладить программный модуль типа .ЕХЕ, который выполняет функции:

1)Освобождает память для загрузки оверлеев.

2)Читает размер файла оверлея и запрашивает объем памяти,

достаточный для его загрузки.

3)Файл оверлейного сегмента загружается и выполняется.

4)Освобождается память, отведенная для оверлейного сегмента.

5)Затем действия 1)-4) выполняются для следующего оверлейного

сегмента.

Шаг 2. Также необходимо написать и отладить оверлейные сегменты.

Оверлейный сегмент выводит адрес сегмента, в который он загружен.

Шаг 3. Запустите отлаженное приложение. Оверлейные сегменты должны загружаться с одного и того же адреса, перекрывая друг друга.

Шаг 4. Запустите приложение из другого каталога. Приложение должно быть выполнено успешно.

Шаг 5. Запустите приложение в случае, когда одного оверлея нет в каталоге. Приложение должно закончиться аварийно.

Шаг 6. Занесите полученные результаты в виде скриншотов в отчет.

Оформите отчет в соответствии с требованиями.

2

Выполнение работы.

 

Макроопределения:

 

•

print _str_

- вывод строки на экран

•

printl _str_

- вывод строки на экран с переводом строки

•

printChar _chr_

- вывод одного символа на экран

Использованная память:

Символы перевода строки

• endl db 13, 10, '$'

Названия оверлейных модулей

•overlay1 db "overlay1.bin$"

•overlay2 db "overlay2.bin$"

Блок параметров

• params ParamBlock<?>

Буфер DTA

• DTA db 43 dup(0)

Строка с полным путём к файлу

• fullName db 128 dup(0)

Размер оверлейного модуля

• fileSize dw 0

Адрес сегмента выделенной оверлею памяти

• overlayAddr dd 0

3

Флаг того что файл оверлея был найден

• fileFlag db 0

Строки с информацией о работе программы и ошибках

•memCompSuccess db "Memory compressed successfully.$"

•launchInfo db "Launching module: $"

•sizeInfo db " with size: $"

•memAllocSuccess db "Memory for overlay allocated successfully in segment: $"

•exitInfo db "Overlay finished & memory freed$"

•mcbDestroyed db "error code 7: MCB destroyed$"

•notEnoughMem db "error code 8: Not enough memory$"

•mcbIncorrect db "error code 9: Incorrect MCB address$"

•funErr db "error code 1: Unexisting function$"

•fileErr db "error code 2: File is not found$"

•pathErr db "error code 3: Path is not found$"

•manyFiles db "error code 4: Too many opened files$"

•notAvailable db "error code 5: file is not available$"

•memErr db "error code 8: Not enough memory$"

•envErr db "error code 10: incorrect environment$"

•fileNotFound db "error code 2: File not found$"

•pathNotFound db "error code 3: Path not found$"

•memAllocErr db "Memory allocation error, code: "

•defalt db "exit cause: Default termination$"

•ctrlBr db "exit cause: Ctrl + Break was pressed$"

•devErr db "exit cause: Device error$"

•resident db "exit cause: Program stayed as resident$"

•exitCode db "Exit code: $"

•numStr db 64 dup(0)

4

•someErr db "Error with code: $"

•fileErrInfo db "Overlay file was not found, returning...$"

Функции, процедуры и структуры:

Стурктура блока параметров

• ParamBlock struct par1 dw ?

par2 dw ? ParamBlock ends

Перевод половины байта в строку

• tetrToHexStr proc

Перевод байта в строку

• byteToHexStr proc near uses di _num: byte, _buff: word

Перевод 2ух байтового числа в строку

• wordToHexStr PROC near _num: word, _buff: word

Обрезка числа в строке по его размеру

• cutNum proc near uses di _buff: word, _len: word, _base: byte

Сборка полного имени запускаемого оверлея

• buildModuleName proc near uses es di bx

Расчёт размера оверлейного модуля

• getModuleSize proc uses ax cx dx

Запуск оверлейного модуля

• launchModule proc near uses bx es si di bp

5

Сборка

Загрузочный модуль собирается из файла lab7.asm overlay1.asm overlay2.asm с помощью утилит “masm”, “link” и “exe2bin”, для автоматизации

сборки написан скрипт build_all.bat.

1. Запуск в каталоге с разработанными модулями

Пример запуска показан на рисунке 1.

Рисунок 1: запуск в каталоге с модулями

Как можно видеть, для обоих оверлейных модулей выделилась память с одного и того же сегмента, и сами модули корректно вывели адрес своего сегмента.

2. Запуск в другом каталоге

Результаты запуска представлены на рисунке 2.

6

Рисунок 2: запуск в другом каталоге

Результаты работы идентичны первому пункту.

3. Запуск в каталоге без файлов оверлейных модулей

Результаты запуска представлены на рисунке 3.

Рисунок 3: запуск в каталоге без оверлейных модулей

Файлы не были найдены и программа завершила свою работу.

7

Выводы:

В ходе работы были исследованы возможности построения загрузочного модуля оверлейной структуры. Были написаны и отлажены соответствующие программы для загрузочного модуля и двух оверлейных модулей.

Контрольные вопросы

1)Как должна быть устроена программа, если в качестве оверлейного сегмента использовать .СОМ модули?

- Оверлейный модуль не содержит PSP сегмент, поэтому модуль должен располагаться в памяти без смещения (в отличие от .com файла со смещением в 100h). Также выход из модуля осуществляется не как из загрузочного модуля (функция 4ch прерывания 21h), а с помощью инструкции retf.

8

Соседние файлы в папке lab7