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

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

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

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

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

ОТЧЕТ По лабораторной работе № 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