Доступ к внешним устройствам
С точки зрения центрального процессора и исполняющейся на нем программы, внешние устройства представляют собой наборы специализированных ячеек памяти или, если угодно, регистров. У микроконтроллеров эти ячейки памяти представляют собой регистры центрального процессора. У процессоров общего назначения регистры устройств обычно подключаются к шинам адреса и данных. Устройство имеет адресный дешифратор. Если выставленный на шине адрес соответствует адресу одного из регистров устройства, дешифратор подключает соответствующий регистр к шине данных. Таким образом, регистры устройства получают адреса в физическом адресном пространстве процессора. Схема подключения приведена на рисунке.
Два основных подхода к адресации этих регистров – это отдельное адресное пространство ввода-вывода и отображенный в память ввод-вывод (memory-mapped I/O), когда память и регистры внешних устройств размещаются в одном адресном пространстве. Такая архитектура называется Гарвардской. В первом случае для обращения к регистрам устройств используются специальные команды класса IN и OUT. Во втором случае могут использоваться любые команды, способные работать с операндами в памяти. Как правило, даже в случае раздельных адресных пространств, для обмена данными с памятью и внешними устройствами процессор использует одни и те же шины адреса и данных, но имеет дополнительный сигнал адресной шины, указывающий, какое из адресных пространств используется в данном конкретном цикле. Данная архитектура называется Принстонской.
Любопытный гибридный подход, сочетающий преимущества обоих вышеназванных, предоставляют микропроцессоры с системой команд SPARC v9. У этих процессоров команды имеют поле, служащее селектором адресного пространства. Этот селектор, в частности, может использоваться для выбора адресного пространства памяти или ввода-вывода. Благодаря этому, с одной стороны, можно применять для работы с регистрами портов любые команды работы с памятью, как при отображенном в память вводе-выводе, и в то же время полностью задействовать адресное пространство памяти.
Два основных подхода к выделению адресов внешним устройствам – это фиксированная адресация, когда одно и то же устройство всегда имеет одни и те же адреса регистров, и географическая адресация, когда каждому разъему периферийной (или системной, если внешние устройства подключаются непосредственно к ней) шины соответствует свой диапазон адресов. Географически можно распределять не только адреса регистров, но и другие ресурсы – линии запроса прерывания, каналы ПДП. Географическая адресация обладает свойством, которое на первый взгляд кажется противоестественным: перемещение платы устройства в другой разъем приводит к необходимости переконфигурации ОС (а в некоторых случаях, например, если перемещенная плата была контроллером загрузочного диска, а вторичный загрузчик или процедура инициализации ядра недостаточно сообразительны, может даже привести к ошибкам при загрузке). Однако этот способ распределения адресного пространства удобен тем, что исключает возможность конфликта адресов между устройствами разных производителей или между двумя однотипными устройствами (с этой проблемой должен быть знаком каждый, кто пытался одновременно установить в компьютер сетевую и звуковую карты конструктива ISA). Большинство периферийных шин современных мини- и микрокомпьютеров, такие, как PCI, S-Bus и др., реализуют географическую адресацию.
Многие современные конструктивы требуют, чтобы кроме регистров управления и данных устройства имели также конфигурационные регистры, через обращение к которым ОС может получить информацию об устройстве: фирму-изготовителя, модель, версию, количество регистров и т. д. Наличие таких регистров позволяет ОС без вмешательства (или с минимальным вмешательством) со стороны администратора определить установленное в системе оборудование и автоматически подгрузить соответствующие управляющие модули.
Дата добавления: 2015-09-29; просмотров: 802;