Sb96653
.pdfМИНОБРНАУКИ РОССИИ |
|
––––––––––––––––––––––––––––––––––––––––––––––––––– |
–––––––––– |
Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В. И. Ульянова (Ленина)
––––––––––––––––––––––––––––––––––––––––––
А. Ф. ГУБКИН
ОПЕРАЦИОННЫЕ СИСТЕМЫ
Учебно-методическое пособие
Санкт-Петербург Издательство СПбГЭТУ «ЛЭТИ»
2018
УДК 004.451(07) ББК З973.2-018.2я7
Г93
Губкин А. Ф.
Г93 Операционные системы: учеб.-метод. пособие. СПб.: Изд-во СПбГЭТУ
«ЛЭТИ», 2018. 32 с.
ISBN 987-5-7629-2199-2
Содержит описание лабораторных работ по дисциплине «Операционные системы», предназначенных для получения студентами практических навыков работы с управляющей программой операционной системы (ОС) на уровне программного интерфейса. В лабораторных работах исследуются структуры загрузочных модулей, интерфейс прикладных программ с управляющей программой, управление основной памятью, резидентные обработчики прерываний, загрузка приложений разных форматов для выполнения.
Предназначено для студентов направлений «Программная инженерия» 09.03.04 и «Прикладная математика и информатика» 01.03.02.
УДК 004.451(07) ББК З973.2-018.2я7
Рецензент – директор по разработке С. П. Поспелов (ООО «Центр разработок ЕМС»).
Утверждено редакционно-издательским советом университета
в качестве учебно-методического пособия
ISBN 978-5-7629-2199-2 |
© СПбГЭТУ «ЛЭТИ», 2018 |
2
ВВЕДЕНИЕ
Цикл лабораторных работ по дисциплине «Операционные системы» предназначен для получения студентами практических навыков работы с управляющей программой операционной системы (ОС) на уровне программного интерфейса. В лабораторных работах исследуются структуры загрузочных модулей, интерфейс прикладных программ с управляющей программой, управление основной памятью, резидентные обработчики прерываний, загрузка приложений разных форматов.
Лабораторные работы выполняются в широко доступной среде Windows, не требующей привилегированного доступа пользователей и специальных инструментов.
Работы предполагают знание студентами языка ассемблер Intel и умения работать с системой программирования Microsoft assembler (MASM) или Turbo assembler (TASM), использование компоновщика Link (TLINK) и отладчи-
ка TD.
Выполнение лабораторных работ состоит в исследовании механизмов управляющей программы ОС с помощью написанных на ассемблере утилит. В некоторых работах требуется создать несколько вариантов утилиты для исследования различных возможностей, предоставляемых функциями управляющей программы.
Информационные технологии (операционные системы, программное обеспечение общего и специализированного назначения, информационные справочные системы) и материально-техническая база, используемые в образовательном процессе по дисциплине, соответствуют требованиям федерального государственного образовательного стандарта высшего образования.
ОБЩЕЕ РУКОВОДСТВО К ВЫПОЛНЕНИЮ РАБОТ
Общее руководство содержит информацию, используемую во всех лабораторных работах, и общие требования, которые должны выполняться во всех работах.
Реализация программного интерфейса. Программный интерфейс реа-
лизуется посредством функций, доступ к которым осуществляется по программному (синхронному) прерыванию с вектором 21H. Программные прерывания выполняются синхронно в темпе выполнения программы. В результате прерывания управление передается ядру операционной системы и по ко-
3
ду функции, заданной в регистре как параметр. Обработчик прерываний выбирает соответствующую функцию и передает ей управление.
Обращение к функциям управляющей программы. Обращение к функциям реализуется следующим образом. В регистры в зависимости от функции заносятся различные параметры. Однако в регистр AH всегда заносится код вызываемой функции. Затем выполняется прерывание с вектором 21H. Пример текста на ассемблере:
mov |
DX,offset STRING ;занесение параметра функции |
|
mov |
AH,09h |
;занесение кода функции |
int 21h |
|
;прерывание - обращение к |
|
|
;функции |
Обработка завершения функции управляющей программы. После обращения к функции необходимо обработать завершение выполнения функции. Для этого следует проверить С-бит в регистре флагов. Если С-бит имеет значение 0, то функция выполнена успешно. Если С-бит имеет значение 1, то в регистре AX содержится код завершения, который определяет ошибку. В этом случае программа должна завершить работу и вывести содержимое регистра AX в шестнадцатеричном и десятичном виде, а также диагностическое сообщение.
Далее приведены некоторые коды завершения (RC) и диагностические сообщения. Если вызываемая функция не была выполнена, то устанавливается флаг переноса CF = 1 и в AX заносится код ошибки:
1 – если номер функции неверен;
2 – если файл не найден;
5 – при ошибке диска;
8 – при недостаточном объеме памяти;
10 – при неправильной строке среды;
11 – если не верен формат.
Использование функции 4AH. Использование функции 4AH позволяет освободить неиспользуемую программой память, поскольку при загрузке модуля вся память выделяется этому модулю в соответствии со стратегией однопрограммных ОС.
Для этого следует использовать функции 4AH прерывания 21H. Пример обращения к этой функции:
MOV |
AH,4AH |
MOV |
BX,mem-size ;размер памяти программы в параграфах |
INT |
21H |
4
В регистр BX заносится размер памяти в параграфах, который необходимо оставить программе.
Если занести заведомо больший размер памяти, чем может предоставить ОС, то в регистре BX возвращается размер доступной памяти в параграфах. В этом случае следует использовать следующее обращение:
MOV |
AH,4AH |
|
MOV |
BX,0FFFFH |
; заведомо большая память |
INT |
21H |
|
Если вызываемая функция не была выполнена, то устанавливается флаг переноса CF = 1 и в AX заносится код ошибки.
Требования к представлению результатов и защите лабораторных работ. По результатам выполнения лабораторной работы представляются исходные тексты утилит, загрузочные модули, отчет в электронном виде в формате MS Word, содержащий постановку задачи и материалы в виде выходной информации утилит и скриншотов, обосновывающие ответы на контрольные вопросы.
Не следует включать в отчет исходные тексты программ. Их надо представить в виде текстовых файлов. Также следует представить файлы загрузочных модулей.
Представленные материалы проверяются и оцениваются преподавателем. Если возникают вопросы или замечания, студент исправляет отмеченные недостатки и повторно присылает исправленные материалы. После разрешения всех проблем ставится зачет. После получения зачетов по всем работам студент допускается до экзамена.
Лабораторная работа 1. ИССЛЕДОВАНИЕ СТРУКТУР ЗАГРУЗОЧНЫХ МОДУЛЕЙ
Цель работы – исследование различий в структурах исходных текстов модулей типов .СОМ и .ЕХЕ, структур файлов загрузочных модулей и способов их загрузки в основную память.
Для достижения поставленной цели требуется решить следующие задачи:
1.Написать текст исходного модуля .СОМ.
2.Написать текст исходного модуля .ЕХЕ.
3.Сравнить исходные тексты для модулей .СОМ и .ЕХЕ.
4.Открыть отладчик TD.EXE и загрузите .СОМ.
5.Открыть отладчик TD.EXE и загрузите «хороший» .ЕХЕ.
6.Оформить отчет в соответствии с требованиями.
5
1.1. Основные теоретические сведения
«Истина познается в сравнении», как говорили древние. В работе есть возможность исследовать в одной системе два различных формата загрузочных модулей, сравнить их и лучше понять, как система программирования и управляющая программа обращаются с ними. Система программирования включает компилятор с языка ассемблер (часто называется просто ассемблер), который изготавливает объектные модули. Компоновщик (Linker) по совокупности объектных модулей изготавливает загрузочный модуль, а функция ядра – загрузчик, который помещает программу в основную память и запускает выполнение. Все эти компоненты согласованно работают для изготовления и выполнения загрузочных модулей разного типа. Для выполнения лабораторной работы сначала нужно изготовить загрузочные модули.
1.2. Необходимые сведения для составления программы
Тип IBM PC хранится в байте по адресу 0F000:0FFFEH, в предпоследнем байте ROM BIOS.
Соответствие кода и типа в таблице:
PC |
FF |
PC/XT |
FE,FB |
AT |
FC |
PS2 модель 30 |
FA |
PS2 модель 50 или 60 |
FC |
PS2 модель 80 |
F8 |
PCjr |
FD |
PC Convertible |
F9 |
Для определения версии MS DOS следует воспользоваться функцией 30H прерывания 21H. Входным параметром является номер функции в AH:
MOV AH,30h
INT 21h
Выходными параметрами являются:
AL – номер основной версии. Если 0, то < 2.0; AH – номер модификации;
BH – серийный номер OEM (Original Equipment Manufacturer); BL:CX – 24битовый серийный номер пользователя.
1.3. Описание последовательности выполнения работы
Шаг 1. Напишите текст исходного .СОМ модуля, который определяет тип РС и версию системы. Это довольно простая задача и для тех, кто уже имеет опыт программирования на ассемблере: это будет небольшой размин-
6
кой. Для тех, кто раньше не сталкивался с программированием на ассемблере, это неплохая задача для первого опыта.
За основу возьмите шаблон, приведенный далее в 1.4. Необходимые сведения о том, как извлечь требуемую информацию, представлены также в 1.4.
Ассемблерная программа должна читать содержимое предпоследнего байта ROM BIOS по таблице, сравнивая коды; определять тип РС и выводить строку с названием модели. Если код не совпадает ни с одним значением, то двоичный код переводится в символьную строку, содержащую запись шестнадцатеричного числа, и выводится на экран в виде соответствующего сообщения.
Затем определяется версия системы. Ассемблерная программа должна по значениям регистров AL и AH формировать текстовую строку в формате xx.yy, где xx – номер основной версии, а yy – номер модификации в десятичной системе счисления, формировать строки с серийным номером OEM и серийным номером пользователя. Полученные строки выводятся на экран.
Отладьте полученный исходный модуль.
Результатом выполнения этого шага будет «хороший» .СОМ-модуль, а также необходимо построить «плохой» .ЕХЕ, полученный из исходного текста для .СОМ-модуля.
Шаг 2. Напишите текст исходного .ЕХЕ-модуля, который выполняет те же функции, что и модуль в шаге 1, постройте и отладьте его. Таким образом будет получен «хороший» модуль .ЕХЕ.
Шаг 3. Сравните исходные тексты для модулей .СОМ и .ЕХЕ. Ответьте на контрольные вопросы «Отличия исходных текстов СОМ- и ЕХЕпро- грамм».
Шаг 4. Запустите FAR, откройте (F3/F4) файл загрузочного модуля
.СОМ и файл «плохого» .ЕХЕ в шестнадцатеричном виде. Затем откройте (F3/F4) файл загрузочного модуля «хорошего» .ЕХЕ и сравните его с предыдущими файлами. Ответьте на контрольные вопросы «Отличия форматов файлов СОМ- и ЕХЕ-модулей».
Шаг 5. Откройте отладчик TD.EXE и загрузите .СОМ. Ответьте на контрольные вопросы «Загрузка СОМ-модуля в основную память». Представьте в отчете план загрузки модуля .СОМ в основную память.
Шаг 6. Откройте отладчик TD.EXE и загрузите «хороший» .ЕХЕ. Ответьте на контрольные вопросы «Загрузка «хорошего» ЕХЕ-модуля в основную память».
7
Шаг 7. Оформление отчета в соответствии с требованиями. В отчете необходимо привести скриншоты. Для файлов – их вид в шестнадцатеричном виде, для загрузочных модулей – в отладчике.
1.4. Пример выполнения задания
Требуемая структура исходного текста модуля типа .СОМ. Шаблон
ассемблерного текста с функциями управляющей программы, и процедурами перевода двоичных кодов в символы шестнадцатеричных чисел и десятичное число приводится:
; Шаблон текста программы на ассемблере для модуля типа .COM
TESTPC |
SEGMENT |
|
|
|
|
ASSUME |
CS:TESTPC, DS:TESTPC, ES:NOTHING, SS:NOTHING |
||
|
ORG |
100H |
|
|
START: |
JMP |
BEGIN |
|
|
; ДАННЫЕ |
|
|
|
|
STRING |
db |
'Значение регистра AX= |
',0DH,0AH,'$' |
|
;ПРОЦЕДУРЫ |
|
|
|
|
;----------------------------------------------------- |
|
|
|
|
TETR_TO_HEX PROC |
near |
|
|
|
|
and |
AL,0Fh |
|
|
|
cmp |
AL,09 |
|
|
|
jbe |
NEXT |
|
|
|
add |
AL,07 |
|
|
NEXT: |
add |
AL,30h |
|
|
|
ret |
|
|
|
TETR_TO_HEX |
ENDP |
|
|
|
;------------------------------- |
|
|
|
|
BYTE_TO_HEX |
PROC |
near |
|
|
; байт в AL переводится в два символа шестн. числа в AX |
||||
|
push |
CX |
|
|
|
mov |
AH,AL |
|
|
|
call |
TETR_TO_HEX |
|
|
|
xchg |
AL,AH |
|
|
|
mov |
CL,4 |
|
|
|
shr |
AL,CL |
|
|
|
call |
TETR_TO_HEX ;в AL старшая цифра |
||
|
pop |
CX |
;в AH младшая |
|
|
ret |
|
|
|
BYTE_TO_HEX ENDP |
|
|
|
|
;------------------------------- |
|
|
|
|
WRD_TO_HEX |
PROC |
near |
|
|
;перевод в 16 с/с 16-ти разрядного числа |
|
|||
; в AX - число, DI - адрес последнего символа |
|
|||
|
push |
BX |
|
|
|
mov |
BH,AH |
|
|
|
call |
BYTE_TO_HEX |
|
|
|
mov |
[DI],AH |
|
|
|
dec |
DI |
|
|
8
|
mov |
[DI],AL |
|
|
|
dec |
DI |
|
|
|
mov |
AL,BH |
|
|
|
call |
BYTE_TO_HEX |
|
|
|
mov |
[DI],AH |
|
|
|
dec |
DI |
|
|
|
mov |
[DI],AL |
|
|
|
pop |
BX |
|
|
|
ret |
|
|
|
WRD_TO_HEX |
ENDP |
|
|
|
;-------------------------------------------------- |
||||
BYTE_TO_DEC |
PROC near |
|
|
|
; перевод в 10с/с, SI - адрес поля младшей цифры |
||||
|
push |
CX |
|
|
|
push |
DX |
|
|
|
xor |
AH,AH |
|
|
|
xor |
DX,DX |
|
|
|
mov |
CX,10 |
|
|
loop_bd: |
div |
CX |
|
|
|
or |
DL,30h |
|
|
|
mov |
[SI],DL |
|
|
|
dec |
SI |
|
|
|
xor |
DX,DX |
|
|
|
cmp |
AX,10 |
|
|
|
jae |
loop_bd |
|
|
|
cmp |
AL,00h |
|
|
|
je |
end_l |
|
|
|
or |
AL,30h |
|
|
|
mov |
[SI],AL |
|
|
end_l: |
pop |
DX |
|
|
|
pop |
CX |
|
|
|
ret |
|
|
|
BYTE_TO_DEC |
|
ENDP |
|
|
;------------------------------- |
|
|||
; КОД |
|
|
|
|
BEGIN: |
|
|
|
|
. . . . . . . . . . . . |
|
|||
; Вывод строки текста из поля STRING |
|
|||
|
mov |
DX,offset STRING |
|
|
|
mov |
AH,09h |
|
|
|
int |
21h |
|
|
. . . . . . . . . . . . |
|
|||
; Выход в DOS |
|
|
|
|
|
xor |
AL,AL |
|
|
|
mov |
AH,4Ch |
|
|
|
int |
21H |
|
|
TESTPC |
ENDS |
|
|
|
|
|
END |
START |
;конец модуля, START - |
точка входа
9
Вопросы для контроля
Отличия исходных текстов СОМ- и ЕХЕпрограмм
1.Сколько сегментов должна содержать COM-программа?
2.EXE-программа?
3.Какие директивы должны обязательно быть в тексте COMпрограммы?
4.Все ли форматы команд можно использовать в COM-программе?
Отличия форматов файлов СОМ- и ЕХЕ-модулей
1.Какова структура файла COM? С какого адреса располагается код?
2.Какова структура файла «плохого» EXE? С какого адреса располагается код? Что располагается с адреса 0?
3.Какова структура файла «хорошего» EXE? Чем он отличается от файла «плохого» EXE?
Загрузка СОМ-модуля в основную память
1. Какой формат загрузки модуля COM? С какого адреса располагается
код?
2.Что располагается с адреса 0?
3.Какие значения имеют сегментные регистры? На какие области памяти они указывают?
4.Как определяется стек? Какую область памяти он занимает? Какие ад-
реса?
Загрузка «хорошего» ЕХЕ-модуля в основную память
1.Как загружается «хороший» EXE? Какие значения имеют сегментные регистры?
2.На что указывают регистры DS и ES?
3.Как определяется стек?
4.Как определяется точка входа?
Лабораторная работа 2. ИССЛЕДОВАНИЕ ИНТЕРФЕЙСОВ ПРОГРАММНЫХ МОДУЛЕЙ
Цель работы – исследование интерфейса управляющей программы и загрузочных модулей. Этот интерфейс состоит в передаче запускаемой программе управляющего блока, содержащего адреса и системные данные. Так загрузчик строит префикс сегмента программы (PSP) и помещает его адрес в сегментный регистр. Исследование префикса сегмента программы (PSP) и среды, передаваемой программе.
10