
|
Калужский филиал государственного образовательного учреждения высшего профессионального образования «Московский государственный технический университет имени Н.Э. Баумана» |
Отчёт по операционным системам По лабораторной работе №3
Программный интерфейс (операционное окружение) ОС
Выполнил студент: Жарков А.В.
Группа УТС.Б-41
Принял: Макаренков А.М.
Калуга, 2013
Цель работы: Изучение понятия операционного окружения (программного интерфейса) на примере организации взаимодействия программ с простой однозадачной операционной системой (MS-DOS) на уровне системных функций.
Теоритическая часть:
Операционное окружение ос ms-dos
Вызов системных функций MS-DOS, а также обращение к модулям обслуживания стандартной периферии, располагающимся в ПЗУ BIOS, реализован в виде обработки программных прерываний. Опишем кратко реализацию механизма программных прерываний в машинах семейства IBM PC.
В начале ОЗУ (в пределах первого килобайта) находится так называемая векторная таблица прерываний. Она состоит из 256 ячеек, хранящих адреса программ-обработчиков прерываний. При выполнении машинной инструкции INT <n> содержимое ячейки векторной таблицы прерываний с номером n помещается в адресные регистры процессора, причем в стеке запоминается текущее содержимое адресных регистров. Управление передается по адресу, записанному в ячейке таблицы. Программа-обработчик прерывания должна заканчиваться командой IRET, по которой из стека извлекается старое значение адресных регистров и управление передается обратно в программу, вызвавшую прерывание командой INT <n>.
Здесь видно, что процедура вызова и обработки программного прерывания похожа на процедуру вызова обычной подпрограммы, отличие заключается в том, что вызывающая программа "не знает" абсолютного адреса модуля обработки прерывания в памяти. Поэтому работа программ не зависит от адресов расположения модулей обработчиков прерываний.
Для вызова требуемого модуля программа использует команду INT <n> с соответствующим номером n. Программа передает параметры модулям обработки прерываний через регистры процессора, результат работы модуля возвращается также в регистрах. Регистр - это ячейка в составе процессора, состоящая из совокупности бистабильных элементов и способная хранить одно двоичное слово информации в виде последовательности битов, которое может быть интерпретировано как команда, двоичное число, буквенно-цифровой знак и т.д. Регистры могут использоваться в процессоре для управления выполняющейся программой, для адресации памяти и для хранения операндов команд арифметических и логических вычислений. Поскольку элементарное представление о регистровой структуре ЦП необходимо для выполнения данной лабораторной работы, опишем кратко регистровую структуру первой, самой простой модели микропроцессора семейства x86.
Регистровая структура данного микропроцессора включает четыре группы 16-разрядных регистров: четыре регистра общего назначения (обозначаемых AX, BX, CX, DX), четыре регистра-указателя (SP, BP, SI, DI), четыре регистра сегментов (CS, DS, ES, SS), указатель команд (IP) и регистр флагов (PSW). Каждый регистр адресуется по имени. Биты регистра принято нумеровать слева направо от 0 до 15.
Регистры общего назначения AX, BX, CX, DX. Это 16-битовые регистры, каждый из которых можно использовать как пару самостоятельных 8-битовых регистров (AH и AL, BH и BL, CH и CL, DH и DL), для которых возможна отдельная адресация в байтовых операциях. Например, двухбайтовый регистр CX состоит из двух однобайтовых CH и CL, и ссылки на регистр возможны по любому из этих трех имен. Регистры общего назначения используют для хранения промежуточных данных, результатов и других видов данных и адресов.
Сегментные регистры CS, DS, ES, SS. Сегментом называется область памяти, которая начинается на границе параграфа, т.е. по любому адресу, кратному 16. Имеется четыре сегмента, которые могут перекрываться. Каждый сегментный регистр обеспечивает адресацию памяти объемом 64 Кбайт, которая называется текущим сегментом.
Регистр CS. Регистр сегмента кода содержит начальный адрес сегмента команд программы (исполняемых машинных инструкций). Обычно первая выполняемая команда находится в начале этого сегмента и ОС передает управление по адресу данного сегмента для выполнения программы. Содержимое регистра CS плюс значение смещения в командном указателе IP определяют адрес команды, которая должна быть выбрана для выполнения.
Регистр DS. Регистр сегмента данных содержит начальный адрес сегмента данных. Сегмент данных содержит определенные данные, константы и рабочие области, необходимые программе. Содержимое регистра DS плюс значение смещения, определенное в команде, указывают на конкретную ячейку в сегменте данных.
Регистр SS. Регистр сегмента стека содержит начальный адрес сегмента стека. Стек содержит адреса возврата как для программы при возврате в операционную систему, так и для вызовов подпрограмм (в т.ч. подпрограмм обработки прерываний) при возврате в главную программу.
Регистр ES. Регистр дополнительного сегмента содержит адрес дополнительного сегмента и предназначен для специального использования. Некоторые операции над строками используют дополнительный сегментный регистр для управления адресацией памяти.
Регистры-указатели SP, BP, SI, DI. Состоят из двух 16-разрядных регистров указателей (SP, BP) и двух 16-разрядных индексных регистров (SI, DI). Индексные регистры используются как указатели при выборке операндов из памяти. Регистры-указатели используются для работы со стеком.
Указатель команд IP. Это 16-разрядный регистр, выполняющий роль счетчика команд. Он содержит смещение адреса команды, подлежащей выполнению, относительно начала сегмента кода, адресуемого регистром CS. Во время выполнения программы содержимое регистра IP изменяется и всегда указывает адрес следующей выбираемой для выполнения команды.
Регистр флагов PSW. Это 16-разрядный регистр, содержащий информацию о текущем состоянии процессора. Отдельные биты этого регистра называются флагами. Флаги разделяют на условные (или флаги условий), отражающие результаты выполнения предыдущей операции в арифметико-логическом устройстве и определяющие действенность команд условного перехода, и управляющие (или флаги управления), от которых зависит выполнение специальных функций микропроцессора.
Команда INT использует регистры процессора не только для передачи параметров модулю обработки прерываний, она также автоматически выполняет следующие действия над некоторыми из регистров:
- уменьшает указатель стека SP на 2 и заносит в вершину стека содержимое флагового регистра PSW;
- очищает флаг трассировки TF и флаг разрешения обработки внешнего маскируемого прерывания IF;
- уменьшает указатель стека SP на 2 и заносит содержимое регистра сегмента кода CS в стек;
- уменьшает указатель стека SP на 2 и заносит в стек значение командного указателя IP;
- загружает регистры CS и IP из вектора прерывания, что приводит к выполнению первой инструкции подпрограммы обработки прерываний. Каждый вектор имеет длину 4 байта. В первом слове размещается новое значение IP, во втором - CS. Адрес вектора прерывания вычисляется умножением номера вектора n на 4;
- по завершении выполнения подпрограммы обработки прерывания (выполнению команды IRET) восстанавливает из стека значения регистров, сохраненные на предыдущих шагах и возвращает управление в прерванную программу на команду, следующую после INT.
Как мы отметили ранее, вызов системных функций MS-DOS, а также обращение к модулям обслуживания стандартной периферии, располагающимся в ПЗУ BIOS, реализован в виде обработки программных прерываний. Каждое прерывание, будучи активизированным, может открывать доступ к определенной функции. Так, например, прерывание с номером 16H (латинская буква "H" указывает, что число представлено в шестнадцатиричной форме) дает доступ к функциям опроса клавиатуры на уровне ОС, прерывание с номером 25H управляет чтением диска и т.д. Особую роль играет прерывание с номером 21H. Оно открывает доступ к нескольким десяткам функций ОС.
Для использования какой либо функции MS-DOS необходимо предварительно загрузить в определенные регистры процессора номер функции и ее аргументы и вызвать требуемое прерывание по его номеру с помощью команды INT <n>. Список всех прерываний, связанных с ними функций и их аргументов, весьма обширен и их изучение выходит за рамки данной лабораторной работы. По этой причине в дальнейшем ограничимся кратким обзором, который предназначен в основном для иллюстрации основных возможностей DOS и BIOS.