- •Устройства ввода/вывода
- •Контроллеры устройств
- •Ввод-вывод с отображением на память
- •Прерывания
- •Обработка прерываний в защищенном режиме работы процессора
- •Классификация прерываний
- •Прямой доступ к памяти (dma)
- •Программное обеспечение ввода-вывода
- •Назначение программного обеспечения ввода-вывода
Ввод-вывод с отображением на память
У каждого контроллера есть несколько регистров, с помощью которых с ним может общаться центральный процессор. Записывая в эти регистры определенные значения, операционная система посылает устройству команды приема и передачи данных, включения, выключения и пр. Также некоторые регистры служат для отображения текущего состояния, готовности и др.
В дополнение к регистрам управления, многие устройства имеют буфер данных, доступный для чтения и записи со стороны ОС, пример — видеопамять.
Как процессор взаимодействует с регистрами управления и буферами данных устройств? Существует две альтернативы.
Каждому регистру назначается номер порта ввода-вывода. Процессор может считать регистр с номером PORT и сохранить результат в своем регистре REG, используя специальную команду ввода-вывода, например in REG, PORT, аналогично — OUT PORT, REG.
В этом случае память и область ввода-вывода имеют разные адресные пространства.
Метод ввода-вывода, при которыхом регистры ввода-вывода являются частью обычного адресного пространства. Такая организация называется вводом-выводом с отображением на память. Каждому регистру управления назначается уникальный адрес памяти, с которым обычная память не связана. В современных компьютерах применяется смешанная организация, при которой буферы данных устройств отображаются в адресное пространство, а отдельные регистры доступны с помощью механизма портов.
Прерывания
Как правило, регистры контроллеров содержат один или несколько битов состояния. Их можно проверить и определить, не завершена ли операция вывода и имеются ли новые данные в устройстве ввода. Цикл, исполняемый процессором, и проверяющий бит состояния до готовности устройства принять или передать данные, называется опросом, или активным ожиданием. Поскольку такое ожидание может оказаться очень долгим, активное ожидание допустимо лишь в небольших однозадачных системах.
В дополнение к битам состояния, многие контроллеры часто используют прерывания, которые позволяют сообщить процессору, что регистры готовы для записи или чтения. В результате завершение операции, вызывающей прерывание, останавливает процессор и запускает процедуру обработки прерывания. Процедура обработки прерывания информирует ОС о том, что ввод-вывод завершен. После этого у ОС появляется возможность обработать полученные данные.
Обработка прерываний в защищенном режиме работы процессора
Как и в случае с сегментами памяти, информация о обработчиках прерываний располагается в структуре данных, которая находится в ОП. Эта структура называется IDT (Interrupt Description Table). Каждый элемент этой структуры выглядит следующим образом:
Информация о расположении IDT находитсяв регистре IDTR, который имеет структуру, аналогичную GDTR:
32-битный линейный базовый адрес | 16-битный лимит таблицы } 48 бит
Загружается регистр командой LIDT.
Во время прерывания в стек помещаются служебные регистры в следующем порядке: EFLAGS, CS, EIP. По окончании обработки прерывания ОС выполняет команду iretd, которая выгружает значения из стека.
