Архитектура ISA (Industry Standard Architecture) занимает уникальное место в летописи вычислительной техники. Рожденная в недрах IBM в 1981 году одновременно с первым персональным компьютером, она послужила фундаментом для целой эпохи развития PC. Эта шина, выпускавшаяся в двух основных вариантах – 8-битной версии для IBM PC XT и 16-битной для IBM PC AT – продержалась на рынке почти два десятилетия, прежде чем окончательно кануть в Лету. Но почему технология с таким долголетием сегодня вызывает у инженеров лишь снисходительную усмешку? Ответ коренится в системных ограничениях, заложенных в ее архитектуру на заре компьютерной революции.
Разрабатывая первый персональный компьютер, инженеры IBM думали прежде всего о скорости выхода на рынок и минимизации затрат. Шина ISA создавалась как максимально простое и дешевое решение для сопряжения периферийных устройств с процессором Intel 8088. Поскольку этот процессор использовал 8-разрядную внешнюю шину данных (при 16-битной внутренней архитектуре), первая версия шины закономерно получилась 8-битной. Ее тактовая частота была привязана к частоте процессора – 4,77 МГц, обеспечивая теоретическую пропускную способность около 4,77 Мбайт/с. Для начала 80-х годов этого хватало, но принятые тогда архитектурные решения превратились в тяжелый груз, который индустрия тащила долгие годы.
Ситуация осложнилась в 1984 году с выходом IBM PC/AT на базе процессора 80286. Шину расширили до 16 разрядов, добавив дополнительный разъем, частоту подняли до 8 МГц, а пропускную способность – до 16 Мб/с. Обратная совместимость со старыми 8-битными картами была сохранена – благо для пользователей, но настоящая головная боль для разработчиков. С этого момента ISA оказалась в плену необходимости поддерживать древние низкоскоростные устройства.
Серьезной проблемой ISA стала прямая зависимость частоты шины от тактовой частоты процессора в первых реализациях. Производители клонов IBM PC, стремясь перещеголять оригинал в производительности, начали выпускать системы с более высокими частотами. В результате шина ISA в некоторых клонах 286-х компьютеров функционировала на частотах 10, 12 и даже 16 МГц. Периферийные карты, спроектированные под эталонные 8 МГц или исходные 4,77 МГц, на таких частотах работали с ошибками или отказывались запускаться.
Проблема многократно усиливалась отсутствием координирующего органа, который мог бы жестко стандартизировать параметры шины. В индустрии клонов царил полный произвол: каждый производитель интерпретировал стандарт по-своему. Положение немного исправилось только с появлением чипсетов, позволивших задавать для ISA фиксированную частоту, отделенную от процессорной. Но осадок остался. Шина ISA была критична к скорости: карта для 4,77 МГц могла отказаться работать на 8 МГц, и наоборот, а попытка установить ее в систему с неподходящей частотой часто заканчивалась фатальным сбоем.
Архитектура ISA содержала поистине дьявольское ограничение, превращавшее сборку конфигурации в искусство, близкое к магии. Речь о системе аппаратных прерываний (IRQ). В 16-битной версии шины использовалось всего 11 линий прерываний (от IRQ0 до IRQ15 с учетом каскадирования), но главная беда была не в количестве, а в принципе работы: они были активны по фронту сигнала (edge-triggered) и, что самое печальное, не могли разделяться между разными устройствами.
Каждое устройство требовало эксклюзивный канал прерывания. В системах конца 80-х – начала 90-х, где количество периферии стремительно росло (звуковые карты, модемы, сетевые адаптеры, SCSI-контроллеры), свободных IRQ катастрофически не хватало. Это порождало легендарные конфликты оборудования. Как отмечал в переписке разработчиков FreeBSD один из инженеров: "ISA прерывания неразделяемы – они edge-triggered". Эта особенность делала невозможной корректную работу нескольких устройств на одной линии, вынуждая пользователей подбирать незанятые комбинации методом проб и ошибок.
К проблеме прерываний добавлялась архаичная система назначения адресов ввода-вывода (I/O ports) и каналов прямого доступа к памяти (DMA). Все это конфигурировалось либо перемычками (джамперами) на плате, либо низкоуровневыми утилитами из-под DOS. Ошибка в настройках приводила к отказу загрузки или нестабильной работе. Линус Торвальдс, создатель Linux, позже крайне скептически оценивал попытки внедрить Plug and Play для ISA, называя стандарт "слегка сломанным" и отмечая, что он устарел еще до широкого распространения.
Когда к середине 1990-х сложность конфигурирования периферии достигла предела, а Microsoft с Intel начали продвигать концепцию Plug and Play (PnP), ISA получила последний шанс. В 1993 году появилась спецификация ISA PnP, призванная избавить пользователей от мучений с перемычками. На практике реализация оказалась далека от идеала.
ISA PnP функционировала через специальный механизм инициализации, который должен был программно распределять ресурсы между картами. Но из-за принципиальной неспособности шины разделять прерывания, огромного количества старых не-PnP устройств и низкого качества реализации PnP-логики на многих картах, "самонастройка" превращалась в хаос. Система зависала, ресурсы назначались конфликтующим образом, а попытка установить старую звуковую карту Sound Blaster вместе с новой PnP-сетевой картой могла вывести компьютер из строя. Не случайно пользователи тех лет расшифровывали PnP как "Plug and Pray" (включи и молись) – эта аббревиатура стала символом технологического фиаско.
Даже заявленные 16 Мбайт/с для 16-битной ISA были лишь теоретическим пиком. На практике реальная пропускная способность оказывалась значительно ниже из-за протокольных издержек и необходимости ожидания ответа медленных устройств. В ранней 8-битной версии использовалось 20 адресных линий и 8 линий данных, что ограничивало адресуемую память 1 Мбайт (позже, с расширением до 24 линий, планка поднялась до 16 Мбайт).
С ростом производительности процессоров шина ISA превратилась в главное узкое место системы. Особенно болезненно это проявлялось в задачах, требующих интенсивного обмена данными с периферией. Видеокарты для ISA были эталоном медлительности даже для стандарта VGA. Ситуация стала настолько критической, что для видеокарт пришлось разрабатывать отдельную локальную шину VESA Local Bus (VLB) – по сути, костыльное расширение ISA, позволявшее видеоконтроллеру работать на частоте процессоров 486-й серии. Но VLB отличалась капризностью и тоже страдала от проблем с частотой и стабильностью.
Настоящим прорывом стала шина PCI от Intel. Она предложила принципиально новую архитектуру с разделяемыми прерываниями, полноценной самонастройкой и пропускной способностью до 133 Мбайт/с в первой версии. Однако вытеснение ISA растянулось на годы. Даже в конце 1990-х материнские платы все еще оснащались парой-тройкой ISA-слотов для совместимости со старым оборудованием. Стандарт был настолько дешев и распространен, что производители промышленного оборудования и встраиваемых систем продолжали выпускать ISA-карты для станков с ЧПУ, платежных терминалов и контрольно-кассовых машин еще долгое время.