2847

Прерывания в ОС MS-DOS

Контрольная

Информатика, кибернетика и программирование

Прерывания в ОС MS-DOS Драйвер – это программа, являющаяся посредником между устройством и программой пользователя и предоставляющая набор функций для работы с устройством. В MS-DOS существуют драйверы символьных устройств (за одну операцию обм...

Русский

2012-10-20

36 KB

15 чел.

Прерывания в ОС MS-DOS

Драйвер – это программа, являющаяся посредником между устройством и программой пользователя и предоставляющая набор функций для работы с устройством. В MS-DOS существуют драйверы символьных устройств (за одну операцию обмена между устройством и драйвером передаётся один символ) и блочных устройств (за одну операцию обмена между устройством и драйвером передаётся блок символов, размер блока зависит от устройства).

Порт – это регистр (ячейка памяти) в адресном пространстве компьютера, связанный с каким-либо устройством компьютера. Обращение к порту приводит к передаче информации между ЦП и устройством, которому принадлежит порт.

Контроллер – это специальная микросхема, обеспечивающая работу определённого устройства и его взаимодействие с ЦП.

Прерывание – это приостановка выполнения текущей программы, позволяющая выполнить другую программы (программу обработки прерывания). Прерывания бывают трёх видов:

  •  внутренние – возникают в процессе работы ЦП (деление на 0, переполнение регистра);
  •  аппаратные – инициируются аппаратурой ПК (нажатие клавиш клавиатуры, перемещение мыши);
  •  программные – вызываются пользовательскими приложениями или операционной системой (печать на экран, ввод с клавиатуры).

Каждое прерывание представляется 4-байтовым адресом начала (первой команды) программы обработки прерывания, которая может быть драйвером или входить в состав ОС или BIOS. Этот адрес называется вектором прерывания. В ОС MS-DOS определены 256 различных прерываний, имеющих номера от 00h до FFh. Положение векторов прерываний в ОЗУ строго фиксировано на протяжении всего времени работы ПК. В ОС MS-DOS вектора прерываний располагаются в диапазоне адресов 00000h-003FFh и занимают объём памяти 1K, каждый адрес имеет размер 4 байта (по два байта на адреса сегмента и смещения) для адресации к любому участку 1M памяти ОС. Адрес расположения начала вектора прерывания можно вычислить, умножив номер этого вектора на 4 (так как каждый вектор имеет размер 4 байта).

Каждое прерывание связано с каким-либо устройством или системной операцией. Так как с каждым устройством или системной операцией можно выполнять различные действия (определить положение курсора мыши, состояние кнопок мыши), то каждое прерывание имеет несколько режимов работы, называемых функциями прерывания.

В дальнейшем будем рассматривать только аппаратные и программные прерывания.

Действия, выполняемые системой при обработке прерывания.

  1.  Прерывание инициируется источником прерывания. Если это программное прерывание, то выполняется команда процессора int с номером соответствующего прерывания. Если это аппаратное прерывание, то сигнал от устройства поступает на вход контроллера прерываний, который посылает по соответствующей линии на вход процессора сигнал запроса прерывания.
  2.  Процессор приступает к обработке прерывания. Он сохраняет в стеке выполняемой программы содержимое регистра флагов, регистров CS и IP.
  3.  Процессор читает номер прерывания, определяющий вектор прерывания (для программного прерывания номер задается в команде, для аппаратного прерывания он читается процессором из контроллера прерываний), то есть новые значения регистров CS и IP. Таким образом, выполняется переход по адресу программы обработки прерывания.
  4.  Выполняется программа обработки прерывания, в конце которой должна стоять команда возврата.
  5.  При выполнении команды возврата из стека прерванной программы извлекается содержимое регистра флагов, регистров CS и IP, продолжается выполнение прерванной программы.

Так как программы обработки прерываний взаимодействуют с прикладными программами, то необходима передача параметров при вызове прерывания, а также указание функции прерывания. Это выполняется с использованием регистров процессора.

Регистры процессора Intel8086.

Регистры данных: AX(AH и AL), BX(BH и BL), CX(CH и CL), DX(DH и DL). Это двухбайтовые регистры, однако возможно обращение отдельно к старшему или младшему байту регистра.

Регистры указатели: SI, DI, BP, SP, IP.

Сегментные регистры:  CS, DS, ES, SS.

Регистр флагов, содержит набор специальных битовых переменных (флагов).

Пара регистров CS (сегмент) и IP (смещение) определяют адрес выполняемой команды.

Через регистры передаются данные от инициатора прерывания к программе обработки при вызове прерываний и от программы обработки к инициатору при возврате из программы обработки. Регистры на входе – регистры до выполнения прерывания, регистры на выходе – регистры после выполнения прерывания. Назначение регистров и характер передаваемых через них данных строго фиксированы и описываются в соответствующей документации по ОС MS-DOS.

Средства Borland C++ 3.1 для работы с регистрами процессора Intel8086.

В файле dos.h для работы с регистрами процессора объявлены агрегативные типы данных.

struct  SREGS   {

   unsigned int    es;

   unsigned int    cs;

   unsigned int    ss;

   unsigned int    ds;

};

struct WORDREGS {

   unsigned int    ax, bx, cx, dx, si, di, cflag, flags;

};

struct BYTEREGS {

   unsigned char   al, ah, bl, bh, cl, ch, dl, dh;

};

union   REGS    {

   struct  WORDREGS x;

   struct  BYTEREGS h;

};

Структура SREGS предназначена для работы с сегментными регистрами, структура WORDREGS – для работы с двухбайтовыми регистрами, структура BYTEREGS – для работы с однобайтовыми регистрами, объединение REGS – для возможности доступа к регистрам данных одновременно как двухбайтовым и однобайтовым регистрам.

int int86(int intno, REGS * in, REGS * out);

int int86x(int intno, REGS * in, REGS * out, SREGS * seg);

Функции int86() и int86x() выполняют вызов программного прерывания, номер которого задается параметром intno. Параметры in и out задают регистры на входе и выходе прерывания соответственно. Для функции int86x() параметр seg задает значения сегментных регистров. Перед выполнением прерывания функции копируют значения переменных параметра in в регистры процессора (функция int86x() перед вызовом прерывания также копирует в сегментные регистры DS и ES соответствующие значения из полей cтруктуры seg), после выполнения – значения регистров копируются в параметр out. Функции возвращают значение регистра AX после выполнения прерывания.

unsigned FP_SEG(void far *p);

unsigned FP_OFF(void far *p);

Макросы FP_SEG и FP_OFF выполняют для указателя p выделение сегментной части или смещения соответственно, которое и является результатом макрорасширения.

void far * MK_FP(unsigned seg, unsigned off);

Макрос MK_FP позволяет получить значение указателя из параметров seg и off, задающих сегментную часть и смещение соответственно.


 

А также другие работы, которые могут Вас заинтересовать

14692. ИЗУЧЕНИЕ РАБОТЫ СЦИНТИЛЛЯЦИОННОГО СЧЕТЧИКА ИОНИЗИРУЮЩИХ ИЗЛУЧЕНИЙ 59 KB
  ЛАБОРАТОРНАЯ РАБОТА №25 ИЗУЧЕНИЕ РАБОТЫ СЦИНТИЛЛЯЦИОННОГО СЧЕТЧИКА ИОНИЗИРУЮЩИХ ИЗЛУЧЕНИЙ Задание для подготовки к лабораторной работе: По указанной литературе изучите устройство и принцип работы сцинтилляционного счетчика иониз
14693. ИЗУЧЕНИЕ РАБОТЫ ГАЗОРАЗРЯДНОГО СЧЕТЧИКА ИОНИЗИРУЮЩИХ ИЗЛУЧЕНИЙ 75 KB
  ЛАБОРАТОРНАЯ РАБОТА №24 ИЗУЧЕНИЕ РАБОТЫ ГАЗОРАЗРЯДНОГО СЧЕТЧИКА ИОНИЗИРУЮЩИХ ИЗЛУЧЕНИЙ Задание для подготовки к лабораторной работе По указанной литературе изучите устройство и принцип работы газоразрядного счетчика ионизирующих излучений...
14694. ОПРЕДЕЛЕНИЕ ПРОЦЕНТНОГО СОДЕРЖАНИЯ KCl В СМЕСИ KCl+NaCl 32 KB
  ЛАБОРАТОРНАЯ РАБОТА №23 ОПРЕДЕЛЕНИЕ ПРОЦЕНТНОГО СОДЕРЖАНИЯ KCl В СМЕСИ KClNaCl Природный калий представляет собой смесь изотопов: К3993 К4003 К4167. Изотопы К39 и К41 стабильны изотоп К40 радиоактивен с периодом полураспада 14109 лет. Радиоактивное превращение калий40 прот
14695. ОПРЕДЕЛЕНИЕ ЭНЕРГИИ α-ЧАСТИЦ ПО ВЕЛИЧИНЕ ИХ ПРОБЕГА В ВОЗДУХЕ 53 KB
  ЛАБОРАТОРНАЯ РАБОТА №22 ОПРЕДЕЛЕНИЕ ЭНЕРГИИ αЧАСТИЦ ПО ВЕЛИЧИНЕ ИХ ПРОБЕГА В ВОЗДУХЕ Ядра некоторых изотопов как естественных так и искусственных могут самопроизвольно превращаться в другие ядра. Такие превращения ядер называют радиоактивным распадом. При испу...
14696. ОБРАБОТКА РЕЗУЛЬТАТОВ ИЗМЕРЕНИЙ В ЭКСПЕРИМЕНТЕ ЯДЕРНОЙ ФИЗИКИ 40.5 KB
  ЛАБОРАТОРНАЯ РАБОТА №21 ОБРАБОТКА РЕЗУЛЬТАТОВ ИЗМЕРЕНИЙ В ЭКСПЕРИМЕНТЕ ЯДЕРНОЙ ФИЗИКИ Вероятность того что за данный промежуток времени ∆t распадётся k атомов из n равна где pk число групп из n атомов в каждой из которых произошло к радиоактивных распадов a q об
14697. ОПРЕДЕЛЕНИЕ СКОРОСТИ ЗВУКА В ВОЗДУХЕ МЕТОДОМ СТОЯЧЕЙ ВОЛНЫ 408 KB
  Лабораторная работа № 5 ОПРЕДЕЛЕНИЕ СКОРОСТИ ЗВУКА В ВОЗДУХЕ МЕТОДОМ СТОЯЧЕЙ ВОЛНЫ Цель работы: ознакомиться с основными характеристиками волновых процессов; изучить условия образования и особенности стоячей волны; определить скорость звука в воздухе метод...
14698. Определение характеристик двухполюсных резистивных элементов 189.5 KB
  ЛАБОРАТОРНАЯ РАБОТА №3 Определение характеристик двухполюсных резистивных элементов Цель работы: Генератор и нагрузка собираются по схеме звезды. Исследуются зависимые и независимые схемы соединения генератора и нагрузки. Объект и средства измерения:
14700. Определение характеристик пассивных элементов в цепи постоянного тока 52.5 KB
  ЛАБОРАТОРНАЯ РАБОТА №1 Определение характеристик пассивных элементов в цепи постоянного тока Цель работы: Овладеть методикой измерения сопротивлений и определения вольтамперных характеристик пассивных двухполюсников Объект и средства измерения: Об...