Устройство ввода вывода
Для связи с каждым контроллером существует небольшое количество
регистров. Например, минимальный контроллер диска может иметь регистр для определения
адреса на диске, адреса в памяти, номера сектора и направления операции (чтение или
запись). Чтобы активизировать контроллер, драйвер получает команду от ОС, затем транслирует
ее в величины, подходящие для записи в регистры устройства. На некоторых компьютерах
отображаются в адресное пространство ОС, поэтому их можно читать или записывать как обычные
слова в памяти, т.е. на таких машинах не нужны специальные команды I/O. На других
компьютерах регистры устройств располагаются в специальных портах I/O, и каждый регистр
имеет свой адрес порта. На этих машинах в режиме ядра доступны команды
IN и OUT. Они позволяют драйверам считывать и записывать
регистры. Первая схема устраняет необходимость специальных команд I/O, но использует
некоторое количество адресного пространства. Вторая схема не затрагивает адресного
пространства, но требует наличия специальных команд. Обе схемы широко используются.
I/O данных можно осуществлять тремя различными способами.
1. Простейший способ: пользовательская программа выдает системный запрос, который ядро транслирует в вызов процедуры, соответствующей драйверу, затем драйвер начинает процесс I/O. В этом время он выполняет короткий программный цикл, постоянно опрашивая устройство, с которым он работает (есть бит, указывающий занятость устройства). При завершении операций I/O драйвер помещает данные туда, куда требуется, и возвращается в исходное состояние. Затем ОС возвращает управление программе, осуществлявшей вызов. Этот метод - ожидание готовности (активное ожидание). Он имеет один недостаток: ЦП должен опрашивать устройство, пока оно не завершит работу.
2. Драйвер запускает устройство и просит его выдать прерывания по окончании I/O; после этого драйвер возвращает управление ОС, и она начинает выполнять другие задания. Когда контроллер обнаруживает окончание передачи данных, он генерирует прерывание о завершении операции, Процесс I/O, использующий прерывания, состоит из четырех шагов (ступеней). На первом шаге драйвер передает команду контроллеру, записывая информацию в регистры устройств. Затем контроллер запускает устройство. Когда контроллер заканчивает чтение или запись того количества байтов, которое ему было указано передать, он посылает сигнал микросхеме контроллера прерываний, используя определенные провода шины. Это шаг второй. На третьем шаге если контроллер прерываний готов к обработке прерываний, то он подает сигнал на определенный контакт ЦП, информируя его таким образом. На четвертом шаге контроллер прерываний вставляет номер устройства на шину, чтобы ЦП мог узнать, какое устройство завершило работу.
предыдущаяследующая