Способ. Одно адресное пространство

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

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

Существуют разные гибридные схемы отображения ввод-вывод.

 

Способ. Гибридный

Один из возможных вариантов третьего, гибридного подхода.

Эта схема широко используется в платформах на базе Интел, Пентиум, в которых помимо портов ввод-вывод с адресами от 0 до 64 Кб используется адресное адресное пространство ОЗУ от 640 Кб до 1 Мб для буферов устройств ввод-вывод. Во всех случаях, когда ЦП хочет прочитать слово данных либо из памяти, либо из порта ввод-вывод, он сначала выставляет нужный адрес на адресную шину, после чего выставляет <read> (считать) на управляющую шину. Сигнальная линия при этом позволяет отличить обращение к памяти от обращения к порту. В зависимости от состояния той линии на запрос процессора реагирует либо устройство ввод-вывод (контроллер), либо память. Если пространство адресов общее (Вариант 2), то каждый модуль памяти и каждое устройство ввод-вывод сравнивает выставленный на шину адрес с обслуживаемым им диапазоном адресов. Если адрес попадает в этот диапазон, то соответствующее устройство реагирует на запрос процессора. Поскольку выделенные внешним устройством адреса удаляются из памяти, внешние устройства не реагируют на них и конфликта не происходит. Схема 1 и 2 имеет свои достоинства и недостатки.

Достоинства:

1. При отображение на адресное пространство памяти ввод-вывод не требуются специальные команда процессора <in> и <out>. В результате программу можно написать целиком на языке С, без вставок на Ассемблере и обращений к подпрограммам.

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

Недостатки:

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

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