Обработка прерываний


Практическая работа №2 Тема: Обработка и генерация прерываний.
Цель: студент должен уметь:
пользоваться инструментальными средствами операционной системы;
знать:
принципы построения, типы и функции операционных систем;
операционное окружение;
машинно-независимые свойства операционных систем.

Теоретическая часть
Операционная система управляет программами, периферийными устройствами, словом, всем. Важную роль здесь играют прерывания. Прерывание представляет собой сигнал процессору, вырабатываемый программой, каким-либо устройством или самим процессором. Этот сигнал приостанавливает выполнение программы и запускает соответствующую функцию операционной системы для выполнения необходимых системных действий. Необходимость прерываний вызвана двумя причинами – специальными запросами на выполнение системных действий, например по вводу и выводу данных, а также возникновением ошибок при выполнении программ. Прерываниям присваиваются номера, например $10. Прерывания от $1F включительно зарезервированы для BIOS, а начиная с $20 до $62 - для операций MS-DOS. Прерывания хранятся в специальной таблице прерываний. В таблице 1 приведен перечень некоторых прерываний.
Таблица 1.
Прерывание
Владелец
Назначение

$00
BIOS
Прерывание из-за ошибки деления на нуль

$04
BIOS
Прерывания из-за переполнения при умножении

$05
BIOS
Функция печати копии экрана

$06
BIOS
Исключительная ситуация «неопределенный код операции»

$07
BIOS
Исключительная ситуация «код операции ESC»

$10
BIOS
Обслуживание видеокарты

$11
BIOS
Список установленного оборудования

$12
BIOS
Размер памяти

$13
BIOS
Обслуживание дискового ввода- вывода

$14
BIOS
Обслуживание последовательного ввода вывода

$16
BIOS
Обслуживание ввода- вывода с клавиатуры

$17
BIOS
Обслуживание принтера

$19
BIOS
Программа начальной загрузки системы

$1A
BIOS
Обслуживание системного таймера и часов

$1B
BIOS
Клавиши Control-Break

$1C
BIOS
Часы таймера пользователя

$21
MS-DOS
Вызов функции MS-DOS

$22
MS-DOS
Адрес завершения программы

$23
MS-DOS
Адрес выхода Control-C

$24
MS-DOS
Адрес аварийного завершения из-за фатальной ошибки

$25
MS-DOS
Функция чтения по абсолютному адресу на диске

$26
MS-DOS
Функция записи по абсолютному адресу на диске

$27
MS-DOS
Функция «завершить и оставить резидентной»


В Паскале есть две процедуры для прямого обращения к функциям MS-DOS и BIOS -MSDos и Intr. Прерывания зависят от состояния регистров центрального процессора и заносят в эти регистры результат своей работы. Регистр – это внутреннее запоминающее устройство процессора для временного хранения обрабатываемой или управляющей информации. В модуле System имеется специальный тип Registers, который описывается следующим образом:
type
Registers = record
сase Integer of
0: (AX, BX, CX, BP, SI, DI, DS, ES, Flags: Word);
1: (AL, AH, BL, BH, CL, CH, DL, DH: Byte);
end;

тип Registers представляет собой запись, состоящую только из вариативной части. В табл. Дан список регистров процессора 80х86.
Таблица 2.
Регистры общего назначения

Регистры данных (16-битные = 8 + 8 бит)

Регистр
Назначение

AX = AH AL
Сумматор

BX = BH BL
Базовый (индексный) регистр

CX = CH CL
Счетный регистр

DX = DH DL
Регистр данных

Индексные регистры и регистровые указатели (16 бит)

Регистр
Назначение

SP
Указатель стека

BP
Указатель базы регистра

SI
Регистр- индекс источника

DI
Регистр- индекс назначения

Сегментные регистры (16 бит)

Регистр
Назначение

CS
Сегмент кода

DS
Сегмент данных

SS
Сегмент стека

ES
Дополнительный сегмент

Регистр командного указателя (16 бит)

IP


Флаговый регистр

Сегментом называется область памяти размером 64 Кбайт, которая начинается по любому адресу, кратному 16. В области памяти, выделяемой программе, имеется три основных сегмента:
Сегмент кода содержит машинные команды, которые будут выполняться. Первая выполняемая команда находится в начале кодового сегмента и операционная система для выполнения программы передает управление по адресу данного сегмента.
Сегмент данных содержит данные и рабочие области, необходимые программе.
Сегмент стека содержит адреса для возврата в операционную систему и для возврата из программ в главную программу.
Особенность регистров общего назначения заключается в том, что возможна их адресация как в целом (т.е. одним словом), так и каждой однобайтовой части (например, AL- младшая половина, а AH – старшая половина). Регистр AX является сумматором и применяется для всех операций ввода – вывода, некоторых арифметических и строковых операций. Регистр BX может использоваться для расширенной адресации и вычислений. Регистр CX необходим для управления числом повторений циклов и операций сдвига. Регистр DX применяется для некоторых операций ввода- вывода и тех арифметических операций над большими числами, которые используют два регистра DX:AX. Регистровые указатели SP и BP обеспечивают системе доступ к данным в сегменте стека, реже они используются для вычислений. Индексные регистры SI (индекс источника) и DI (индекс назначений) могут применяться для расширенной адресации и операций сложения и вычитания. Регистр командного указателя содержит смещение указателя на команду, которая должна быть выполнена.
Флагом называют признак, установленный программно с целью указания особенностей выполнения стандартных операций,- это одноразрядный индикатор, отражающий выполнение или невыполнение определенного условия.
Процедуры, предназначенные для работы с регистрами процессора и прерывания MSDos и Intr модуля DOS:

Procedure MSDos (var regs: Registers);
Procedure Intr (number : Byte ; var regs: Registers);

Процедура Intr предназначена для обращения к прерыванию с указанным номером (первый параметр). Перед выполнением прерывания процедура загружает регистры процессора значением соответствующих полей записи regs. После выполнения прерывания содержимое этих регистров вновь записывается в соответствующую переменную. Процедура MSDos эквивалентна вызову процедуры Intr для прерывания $21.
Для прерывания $21 имеется несколько сотен функций MS-DOS , предназначенных для работы с файлами и дисками. Процедуры Паскаля, использующие все эти низкоуровневые операции, дают гораздо более удобные и безопасные способы их выполнения.
К работе с прерываниями следует прибегать, если в этом действительно есть необходимость. Это потенциально опасно, так как функции напрямую обращаются к операционной системе и выполняют системные операции. Неаккуратное обращение с ними может привести к потере части информации на дисках, и другим неприятным последствиям.

Практическая часть
Ввести программу.
Запустить на выполнение.
Пояснить работу процедур модуля DOS, предназначенных для выполнения системных операций (прерываний), обращения к памяти и портам ввода- вывода.
Ответить на контрольные вопросы
Оформить отчет

Задача 1 В качестве примера работы с прерываниями рассмотрим пример простой программы, в которой используется функция $2С для считывания показаний системных часов.

Program gettime;

Uses dos, crt;

Var
Regs: registers;

Begin
ClrScr;
regs.AH := $2C;
intr ($21, regs);
write (Системные часы показывают ’);
with regs do
begin
write (CH, час. ’ );
write (CL, мин. ’ );
write (DH, . ’);
If DL < 10 then
Write(0);
Writeln(DL, сек. ’);
End;
Writeln(нажмите ’) ;
Readln;
End.


Задача 2 Так, прерывание с номером 18 ($12) возвращает в регистре AX объем оперативной памяти ПЭВМ. Пример программы выводящей на экран сообщение об этом объеме:

Program IntrDem;
Uses DOS;
Var
r: registers;
Begin
Intr($12, r);
writeln('Объем памяти = ', r.АХ, ' Кбайт')
END.


Задача 3 Процедура MSDOS инициирует прерывание с номером 33 ($21);
обращения: MSDOS(< регистры >);
Здесь < регистры > - переменная типа REGISTERS, содержащая значения регистров на входе и выходе процедуры обработки прерывания.
  Программное прерывание с номером 33 ($21) стоит особняком: как уже говорилось, оно дает доступ к большому количеству функций ДОС (этим прерыванием вызывается 85 функций). Рассматриваемая процедура полностью эквивалентна вызову процедуры INTR c номером прерывания 33. Программа примера выведет на экран версию операционной системы:

Program MsDosDemo;
Uses DOS;
Var
R: registers;
Begin
r.AH: = $30;
MsDos(r);
write1n ('Версия операционной системы: г.АL, '.', г.АН)
END.


Задача 4. С помощью следующих двух процедур программист может прочитать содержимое любого вектора или установить его новое значение.
Процедура GETINTVECT. Возвращает вектор прерывания с указанным номером; формат обращения GETINTVECT(< N >, < вектор >> Здесь < N > - выражение типа ВYТЕ, содержащее номер прерывания; < вектор > -переменная типа РOINTER, в которой возвращается адрес точки входа в процедуру обработки прерывания.
Пример: программа выводит на экран содержимое всех ненулевых векторов прерываний.

Uses DOS;
var
i: byte;
p: pointer;
Begin
for i:= 0 to 255 do
Begin
GetIntVec(i, p);
if (Seg(p^) <> 0) or (Ofs(p^) <> 0) then
write1n('N = ', i:3, 'Seg = ', Seg(p^):5, 'Ofs =', Ofs(p^):5);
End;
End.

Прямое обращение к памяти и портам ввода-вывода
  В Турбо-Паскале имеется пять предварительно объявленных массивов: МЕМ, МЕМW, МЕМL, РОRТ и РОRТW. Первые три обеспечивают доступ к любому участку оперативной памяти по абсолютному адресу, два другие - доступ к портам ввода-вывода.   Компонентами массива МЕМ являются данные типа ВYТЕ, массива МЕМW - типа WORD, массива МЕМL - типа LONGINT. Обращение к элементам этих массивов, т.е. их индексация, имеет специальный вид: каждый индекс представляет собой абсолютный адрес и состоит из двух выражений типа WORD; первое дает сегментную часть адреса, второе - смещение; выражения разделяются двоеточием:

Mem[$0000:$1000]:= 0;
DataMem:= MemW[Seg(p):Ofs(p)];
MemLong:= MemL[64:i*SizeOf(rea1)];
Задача 5. Как следует из технического описания операционной системы МS DOS, в ПЗУ BIOS по адресу $F000:$FFFE зашит байт-идентификатор типа компьютера. Таким образом можно определить тип компьютера, на котором запускается программа:

Program DMA_Demo;
Begin
Write('Тип компьютера: ');
Case Mem[$FOOO:$FFFE] of
$FF: writeln('PC');
$FE: writeln('XT');
$FD: writeln('PCjr');
$FC: write1n('AT');
$F9: writeIn('совместимый c PC');
End
End.
  Компонентами массива РОRТ являются байты, а массива РОRТW - слова. Индексами этих массивов должно быть выражение типа ВYТЕ, указывающее номер нужного порта. Присвоение значения элементу массива РОRТ или РОRТW приведет к записи в порт, упоминание элемента в выражении - к чтению из порта. Компоненты массивов РОRТ и РОRТW нельзя передавать в качестве параметров процедурам или функциям. Эти идентификаторы нельзя употреблять без индексных выражений.
Контрольные вопросы
Что представляют собой прерывания?
Какие номера прерываний зарезервированы за BIOS. MS-DOS?
Какие процедуры есть в Паскале для прямого обращения к функциям MS-DOS и BIOS?
Особенность регистров общего назначения
Процедуры, предназначенные для работы с регистрами процессора и прерывания MSDos и Intr модуля DOS
С помощью каких процедур можно прочитать любой вектор?
Охарактеризовать пять предварительно объявленных массивов: МЕМ, МЕМW, МЕМL, РОRТ и РОRТW.

Литература
Попов,И.И. Операционные системы, среды и оболочки: Учебное пособие[Тескт]/И.И.Попов, Т.Л.Партыка - М.:ФОРУМ: ИНФРА-М,2009 -400с
Олифер, В.Г. Сетевые операционные системы / В.Г. Олифер, А.А. Олифер – Спб.: Питер, 2006- 545с.
Спицына,О.И. Операционные системы и среды: лекционные материалы[Текст]/О.И.Спицына –Старый Оскол:ООО ТНТ, 2004-80с.
Заголовок 115

Приложенные файлы

  • doc 15329576
    Размер файла: 109 kB Загрузок: 0

Добавить комментарий