Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Операции ввода-вывода. Прерывания.docx
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
187.78 Кб
Скачать

Ввод-вывод с отображением на память

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

В дополнение к регистрам управления, многие устройства имеют буфер данных, доступный для чтения и записи со стороны ОС, пример — видеопамять.

Как процессор взаимодействует с регистрами управления и буферами данных устройств? Существует две альтернативы.

  1. Каждому регистру назначается номер порта ввода-вывода. Процессор может считать регистр с номером PORT и сохранить результат в своем регистре REG, используя специальную команду ввода-вывода, например in REG, PORT, аналогично — OUT PORT, REG.

В этом случае память и область ввода-вывода имеют разные адресные пространства.

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

Прерывания

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

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

Обработка прерываний в защищенном режиме работы процессора

Как и в случае с сегментами памяти, информация о обработчиках прерываний располагается в структуре данных, которая находится в ОП. Эта структура называется IDT (Interrupt Description Table). Каждый элемент этой структуры выглядит следующим образом:

Информация о расположении IDT находитсяв регистре IDTR, который имеет структуру, аналогичную GDTR:

32-битный линейный базовый адрес | 16-битный лимит таблицы } 48 бит

Загружается регистр командой LIDT.

Во время прерывания в стек помещаются служебные регистры в следующем порядке: EFLAGS, CS, EIP. По окончании обработки прерывания ОС выполняет команду iretd, которая выгружает значения из стека.