lab7 / 0303_Болкунов_ВО_ЛР7
.pdfМИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА)
Кафедра математического обеспечения и применения ЭВМ
ОТЧЕТ По лабораторной работе № 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