Ввод-вывод, отображаемый на пространство памяти
У каждого контроллера для связи с центральным процессором имеется несколько регистров. Путем записи в эти регистры операционная система может давать команды устройству на предоставление данных, на принятие данных, на его включение или выключение или на выполнение каких-нибудь других действий. Считывая данные из этих регистров, операционная система может узнать о текущем состоянии устройства, о том, готово ли оно принять новую команду, и т. д.
В дополнение к регистрам управления у многих устройств имеется буфер данных, из которого операционная система может считывать данные и в который она может их записывать. Например, наиболее распространенный способ отображения компьютерами пикселов на экране предусматривает наличие видеопамяти, которая по сути является буфером данных, куда программы или операционная система могут вести запись.
Но тут возникает вопрос, как центральный процессор обменивается данными с регистрами управления и буферами данных устройств. Есть два альтернативных варианта. В первом из них каждому регистру управления назначается номер порта ввода-вывода, являющийся 8- или 16-разрядным целым числом. Набор всех портов ввода-вывода формирует пространство портов ввода-вывода, которое защищено от доступа со стороны обычных пользовательских программ (доступ к нему имеет только операционная система). Используя специальные команды ввода-вывода, например
IN REG.PORT
центральный процессор может считать данные из регистра управления PORT и сохранить полученный результат в своем регистре REG. Аналогично этому, используя команду
OUT PORT.REG
центральный процессор может записать содержимое своего регистра REG в регистр управления PORT. Многие компьютеры первых поколений, включая практически все универсальные компьютеры, такие как IBM 360 и все его преемники, работали именно таким образом.
Во-вторых, при использовании ввода-вывода, отображаемого на пространство памяти, отпадает необходимость в специальном механизме защиты от осуществления ввода-вывода со стороны пользовательских процессов. Операционной системе нужно лишь воздержаться от помещения той части адресного пространства, в которой содержатся регистры управления, в какие-либо виртуальные адресные пространства пользователей. Еще лучше, если у каждого устройства его регистры управления будут находиться на отдельной странице адресного пространства, — тогда операционная система может предоставить одному пользователю в отличие от других пользователей возможность управления определенными устройствами, просто включив нужные страницы в его таблицу страниц. Такая схема может позволить различным драйверам устройств размещаться в разных адресных пространствах памяти, не только сокращая при этом размер пространства ядра, но и оберегая один драйвер от помех со стороны других драйверов.

