понедельник, 11 апреля 2011 г.

11.2. Взгляд назад: ISA


Взгляд назад: ISA

Шина ISA довольно стара по дизайну и является заведомо низкоэффективной, но всё ещё занимает значительную часть рынка для устройств расширения. Если скорость не важна и вы хотите поддержать старые материнские платы, реализация ISA предпочтительнее PCI. 

Дополнительным преимуществом этого старого стандарта является то, что если вы любитель электроники, вы можете легко создавать свои собственные ISA устройства, что определённо невозможно с PCI.

С другой стороны, большим недостатком ISA является то, что она тесно связана с архитектурой ПК; интерфейсная шина имеет все ограничения процессора 80286 и причина бесконечной боли системных программистов. Другой большой проблемой с дизайном ISA (унаследованной от оригинального IBM PC) является отсутствие географической адресации, которая привела ко многим проблемам и длительным циклам отключите-переставьте перемычки-подключите-проверьте при добавлении новых устройств. Интересно отметить, что даже на самых старых компьютерах Apple II уже использовалась географическая адресация, и они уже поддерживали безджамперные платы расширения.

Несмотря на свои большие недостатки, ISA всё ещё используется в нескольких неожиданных местах. Например, серия VR41xx процессоров MIPS, используемая в нескольких карманных компьютерах, включает ISA-совместимую шину расширения, как это ни странно. Причиной этих неожиданных использований ISA является крайне низкая стоимость некоторого устаревшего оборудования, такого как сетевые карты на базе 8390, так что процессор с электрическими сигналами ISA может легко использовать ужасные, но дешёвые устройства ПК.
Аппаратные ресурсы
ISA устройство может быть оснащено портами ввода/вывода, областями памяти и линиями прерывания. Даже несмотря на то, что x86 процессоры поддерживают 64 Кб пространство портов ввода/вывода (то есть процессор имеет 16 адресных линий), некоторое старое оборудование ПК декодирует только младшие 10 адресных линий. Это ограничивает используемое адресное пространство до 1024 портов, потому что любой адрес в диапазоне от 1 Кб до 64 Кб ошибочно принимается за более низкий адрес любым устройством, которое декодирует только младшие адресные линии. Некоторая периферия обходит это ограничение отображая только один порт в младший килобайт и используя старшие адресные линии для выбора между разными регистрами устройства. Например, устройство, отображаемое на 0x340, может безопасно использовать порт 0x740, 0xB40 и так далее.

Если количество портов ввода/вывода ограничено, с доступом к памяти всё ещё хуже. Устройство ISA можно использовать только память в диапазоне от 640 Кб до 1 Мб, а также между 15 Мб и 16 Мб для регистра ввода/вывода и управления устройством. Диапазон от 640 Кб до 1 Мб используется BIOS ПК, в VGA-совместимых видеокартах и различными другими устройствами, оставляя мало пространства для новых устройств. Память на 15 Мб, с другой стороны, непосредственно не поддерживает Linux и требуется изменение ядра для такой поддержки, в настоящее время это бесполезный расход времени программирования.

Третьим ресурсом, доступным для плат ISA устройств, являются линии прерывания. К шине ISA подключено ограниченное число линий прерывания и они являются общими для всех интерфейсных плат. В результате, если устройства не были настроены правильно, они могут оказаться использующими одни и те же линии прерывания.

Хотя оригинальная спецификация ISA не разрешает разделение прерывания между устройствами, большинство плат устройств позволяют это. (* Проблема с разделением прерывания идёт из электротехники: если устройство, управляющее сигнальной линией неактивно, применяя уровень напряжения с малым сопротивлением, прерывание не может быть общим. Если, с другой стороны, устройство использует нагрузочный резистор для неактивного логического уровня, возможно совместное использование. В настоящее время это норма. Однако, всё ещё есть потенциальный риск потери событий прерывания, так как прерывания ISA запускаются перепадом, вместо срабатывания по уровню. Запускаемые по перепаду прерывания проще для реализации на оборудовании, но не поддаются безопасному совместному использованию.) Совместное использование прерывания на программном уровне описано в разделе "Разделяемые прерывания" в Главе 10.
Программирование ISA
Что же касается программирования, для облегчения доступа к ISA устройствам нет никакой особой помощи в ядре или в BIOS (как есть, например, для PCI). Единственными средствами, которые вы можете использовать, являются регистрации портов ввода/вывода и линий прерывания, описанные в разделе "Установка обработчика прерываний" в Главе 10.

Приёмы программирования, показанные в первой части этой книги, распространяются на ISA устройства; драйвер может проверять порты ввода/вывода, а линия прерывания должна определяться автоматически одним из методов, показанных в разделе "Автоопределение номера  прерывания" в Главе 10.

Вспомогательные функции isa_readb и друзья были кратко представлены в разделе "Использование памяти ввода/вывода" в Главе 9 и сказать о них больше нечего.

Спецификация Plug-and-Play
Некоторые новые платы устройств ISA следуют своеобразным правилам проектирования и требуют специальной последовательности инициализации для упрощения установки и настройки дополнительный интерфейсных плат. Эта спецификация называется plug and play (PnP, включай и работай) и состоит из набора громоздких правил для создания и конфигурирования безджамперных ISA устройств. Устройства PnP реализуют перемещаемые регионы ввода/вывода; BIOS в ПК, отвечающая за перемещение, напоминает PCI.

Короче говоря, целью PnP является получение такой же гибкости, как в устройствах PCI, без изменения основного электрического интерфейса (шины ISA). С этой целью спецификации определяют набор аппаратно-независимых регистров конфигурации и способ географической адресации интерфейсных плат, хотя и физическая шина не содержит по-платной (географической) проводки - каждая сигнальная линия ISA подключается к каждому имеющемуся слоту.

Географическая адресация работает назначая малое целое число, называемое card select number (CSN, номер выбора карты), для каждой периферии PnP в компьютере. Каждое устройство PnP имеет уникальный серийный идентификатор размером 64 бита, который установлен аппаратно в периферийной плате. CSN определение использует уникальный серийный номер, чтобы определить PnP устройства. Но CSN-ы могут быть назначены безопасно только во время загрузки системы, что требует BIOS, осведомлённый о PnP. По этой причине старые компьютеры требуют от пользователя получить и вставить специальную конфигурационную дискету, даже если устройство совместимо с PnP.

Интерфейсные платы, использующие спецификации PnP, сложны на аппаратном уровне. Они гораздо более сложные, чем платы PCI и требуют сложного программного обеспечения. Столкновение с трудностями при установке этих устройств не необычно и даже если установка идёт хорошо, вы-прежнему сталкиваетесь с ограничениями производительности и ограниченным пространством ввода/вывода шины ISA. Гораздо лучше вместо этого установить PCI устройства, когда возможно, и наслаждаться новыми технология.

Если вы заинтересованы в программной конфигурации PnP, вы можете просмотреть drivers/net/3c509.c, чьи зондирующие функции имеют дело с устройствами PnP. Ядро версии 2.6 вобрало много работы в области поддержки устройств PnP, так что по сравнению с предыдущими версиями ядра было убрано много не гибких интерфейсов.

Комментариев нет:

Отправить комментарий

Примечание. Отправлять комментарии могут только участники этого блога.