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

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

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

МИНОБРНАУКИ РОССИИ

Санкт-Петербургский государственный

электротехнический университет

«ЛЭТИ» им. В.И. Ульянова (Ленина)

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

отчет

По лабораторной работе № 7

по дисциплине «Операционные системы»

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

Студент гр. 0303

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

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

Губкин А. Ф.

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

2022

Цель работы.

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

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

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

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

2) Читает размер файла оверлея и запрашивает объем памяти, достаточный для его загрузки.

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

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

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

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

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

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

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

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

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

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

  • 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

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

  • 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)

  • 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

Сборка

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

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

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

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

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

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

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

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

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

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

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

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

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

Выводы:

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

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

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

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

8

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