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, задающих сегментную часть и смещение соответственно.


 

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

26054. Эмитерно-связанная логика(ЭСЛ) 14.42 KB
  Он состоит из двух транзисторов в коллекторную цепь которых включены резисторы нагрузки RК а в цепь эмиттеров обоих транзисторов общий резистор Rэ по величине значительно больший Rк. На вход одного из транзисторов подаётся входной сигнал Uвх а на вход другого опорное напряжение Uоп. Схема симметрична поэтому в исходном состоянии Uвх=Uоп и через оба транзистора протекают одинаковые токи. При увеличении Uвх ток через транзистор VT1 увеличивается возрастает падение напряжения на сопротивлении Rэ транзистор VT2 подзакрывается и ток...
26055. Сравнительный анализ технологий производства микросхем 18.62 KB
  Если этот дефект окажется в критической точке то последующая диффузия примеси может вызвать короткое замыкание перехода и выход из строя всей микросхемы. Одним из эффективных методов визуализации является использование сканирующего электронного микроскопа позволяющего наблюдать топографический и электрический рельеф интегральной микросхемы. Для наблюдения необходимо чтобы поверхность микросхемы была открытой. Такую аппаратуру используют для оценки качества конструкции данной микросхемы...
26056. Регистры. Связь регистров между собой и с другими источниками данных 15.3 KB
  Связь регистров между собой и с другими источниками данных Регистры это функциональные узлы на основе триггеров предназначенные для приёма кратковременного хранения на один или несколько циклов работы данного устройства передачи и преобразования многоразрядной цифровой информации. В зависимости от способа записи информации кода числа различают параллельные последовательные и параллельно последовательные регистры. Появление импульса на тактовом входе регистра сдвига вызывает перемещение записанной в нём информации на один разряд...
26057. Демультиплексоры и дешифраторы 14.69 KB
  Схемы сравнения Цифровые компараторы являются универсальными элементами сравнения которые помимо констатации равенства двух чисел могут установить какое из них больше. Простейшая задача состоит в сравнении двух одноразрядных чисел. Для сравнения многоразрядных чисел используется следующий алгоритм. Устройство обладает свойством наращиваемости разрядности сравниваемых чисел.
26058. Схемы интегральных счётчиков 15.75 KB
  Микросхема К155ИЕ2 имеет кроме того входы установки в состояние 9 при котором первый и последний разряды устанавливаются в 1 а остальные в 0 то есть 10012=9. Десятый импульс переводит триггеры МС в состояние при котором на выходах 4 и 6 МС формируются лог. Адресные дешифраторы строк ДШx и столбцов ДШy формируют сигналы выборки на соответствующих АШ которые определяют строку и столбец накопителя в котором расположен выбираемый ЭП. Если при этом сигнал на входе то СУ формирует управляющий сигнал при котором ФЗС обеспечивает...
26059. Динамическая память 17.76 KB
  В зависимости от типа ПЗУ занесение в него информации производится или в процессе изготовления или в эксплуатационных условиях путем настройки предваряющей использование ПЗУ в вычислительном процессе. В последнем случае ПЗУ называются постоянными запоминающими устройствами с изменяемым в процессе эксплуатации содержимым или программируемыми постоянными запоминающими устройствами ППЗУ. Функционирование ПЗУ можно рассматривать как выполнение однозначного преобразования kразрядного кода адреса ячейки запоминающего массива ЗМ в nразрядный...
26060. Логические элементы 14.44 KB
  МОВ логических элементах на МОПтранзисторах используется два типа транзисторов: управляющие и нагрузочные. Логические элементы на МОПтранзисторах Существенным преимуществом логических элементов на МОПтранзисторах перед логическими элементами на биполярных транзисторах является малая мощность потребляемая входной цепью. Кроме того выходное сопротивление у открытого МОПтранзистора больше чем у биполярного что увеличивает время заряда конденсаторов нагрузки и ограничивает нагрузочную способность ЛЭ. Микросхемы КМОПструктуры...
26061. Асинхронные и синхронные триггеры. Способы управления триггеров 14.12 KB
  С Особенностью синхронного триггера является то что ввиду наличия в схеме управления инвертирующих элементов происходит изменение исполнительного значения управляющих сигналов по сравнению с асинхронными. Применение синхронизации не устраняет неопределённое состояние триггера возникающее при одновременной подаче единичных сигналов на все три входа. Поэтому условием нормального функционирования является следующее неравенство: SRC ≠ 1 Кроме трёх основных входов синхронные RSтриггеры снабжаются ещё входами асинхронной установки состояния...
26062. Катаболизм и анаболизм. Биологическое значение основных метаболических путей (гликолиз, цикл трикарбоновых кислот, расщепление и синтез жирных кислот) 15.72 KB
  При катаболизме происходит расщепление и окисление в результате чего извлекается энергия из расщепившихся макромолекул. На первом этапе идут 2 необратимых реакции в результате чего тратится 2 мол АТФ. В результате этого этапа образуется 2 мол НАДНН и 4 мол АТФ. Конечным продуктом является 2 мол ПВК.