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

Sb96653

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

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

 

–––––––––––––––––––––––––––––––––––––––––––––––––––

––––––––––

Санкт-Петербургский государственный электротехнический университет «ЛЭТИ» им. В. И. Ульянова (Ленина)

––––––––––––––––––––––––––––––––––––––––––

А. Ф. ГУБКИН

ОПЕРАЦИОННЫЕ СИСТЕМЫ

Учебно-методическое пособие

Санкт-Петербург Издательство СПбГЭТУ «ЛЭТИ»

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]