Шина PCI и разделяемые прерывания.

Схемы Программы Библиотека Все для сотового Компьютеры Поиск
Чат Форум Ссылки Рефераты Гостевая

 

 

В зад

(В главное меню)

Вперед

 

           

       Пару лет назад архитектура PC отпраздновала свое двадцатилетие. Вместе с нею двадцатилетие отпраздновал большой черный разъем, стоящий на краю платы точнее, его 8-битная часть. Шина ISA, которая должна была пропасть из компьютеров еще лет пять назад, только начинает сдавать свои позиции. В чем же причина? Ведь старые платы ISA по большей части уже можно заменить новыми, рассчитанными на плату PCI, благо и внутренние модемы  и звуковые карты уже давно выпускаются почти исключительно для новой шины. Всякие специализированные устройства типа программаторов и электронных ключей уже давно подключаются либо к LPT – порту, либо к USB.

             Количество разъемов PCI на современной плате полного размера обычно равно шести, если только на ней нет встроенной периферии. В принципе, этого должно хватить самому требовательному пользователю. Но ISA, «уплотненная» до одного - двух слотов, не желает совсем вымирать. Одна из причин, из-за которой откладывается смерть шины ISA — количество прерываний на шине PCI. Точнее не количество, а то, как ими распоряжаются изготовители системных плат.

             По спецификации PCI, на прерывания отведено четыре контакта. Это гораздо меньше, чем на ISA, где на 16-разрядной шине есть 11 входов запроса прерываний. Но дело в том, что прерывания на ISA и PCI принципиально разные сигналы. 

            На шине ISA прерывания срабатывают по перепаду из «0» в «1». Просто установленный «1» прерывания не вызовет, поэтому, если одно устройство выставило сигнал, то другому бесполезно выставлять на эту же линию «1» - контроллер прерываний на нее не среагируют. Поэтому на ISA закон прост: одно устройство – одно прерывание.

             На шине PCI выход запроса прерывания должен быть с открытым стоком (то же самое, что открытый коллектор в TTL), несколько выходов разных устройств объединяются по схеме «проводного И», т.е. выходы просто соединяются вместе и, если хотя бы на одном из них «0», то и на всей линии «0». Поэтому активный запрос прерывания на шине PCI – «0». И контроллер прерываний должен реагировать не на перепад, а на уровень. Таким образом, если два устройства запросили прерывания по одной линии, то программа-обработчик должна сначала проверить, ее ли устройство вызвало прерывание, обработать вызов (при этом устройство снимет запрос, но на линии останется «0» из-за второго устройства). Контроллер, отреагировав на логический «0», снова вызовет обработчик. Тот, проверив, что «его» устройство прерывания не требовало, вызовет второй обработчик. Он выполнит уже код, отвечающий за второе устройство, после чего на входе запроса прерывания наконец-то появится «1». 

            Для того, чтобы это стало возможным, в PCI – устройстве должно быть что-то, чтобы позволяло определять, оно ли вызвало прерывание. В спецификации PCI конкретно не указывается, каким образом это достигается. Там только говорится о том, что все обработчики прерываний должны уметь работать с разделяемыми прерываниями, и должны уметь выстраиваться в цепочку («Daisy chaining»). Этот механизм используется программистами уже давно, и проблем никаких не вызывает. На известной старшему поколению ЭВМ «Электронике-60» и всех ее родственниках на разъеме вообще только одно прерывание. При подтверждении прерывания устройство выдает на шину вектор, в котором содержится стартовый адрес обработчика именно этого устройства, при этом централизованный контроллер прерываний, характерный для архитектуры РС, вообще отсутствует. На PCI такой механизм легко реализуем, но для платформы х86 используется более традиционный способ — радиальное назначение, когда конкретной линии запроса ставится в соответствие какой-то вектор, генерируемый контроллером прерываний. 

            Чтобы («Daisy chaining») работал, достаточно в каком-то программно-доступном регистре иметь «флажок», повторяющий состояние запроса прерывания этого устройства, а лучше — число не обслуженных прерываний. Регистр с такими функциями может находиться и среди портов I/O, и даже быть ячейкой памяти. Этот регистр позволяет всем PCI – устройствам назначить вообще всего одно прерывание.

             Зачем же тогда четыре линии запросов? Это запас для многофункциональных устройств. Например плата Iomega BUZ содержит две совершенно независимых части — устройство видеозахвата и Ultra SCSI контроллер. Они могут использовать два отдельных запроса прерывания. Это позволяет нормально работать даже тогда, когда одна часть многофункционального устройства не поддерживается конкретной операционной системой. В случае Iomega BUZ видеоввод работает только под Win9x, а SCSI-контроллер и под WinNT

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

            В следующей версии, 2.1, появился пример воплощения универсального механизма назначения прерываний. При этом линия Int A на первом разъеме PCI становится Int B на втором разъеме, Int C на третьем и Int D на четвертом. Остальные линии тоже сдвигаются  на один контакт. Эти четыре провода идут на матричный коммутатор, который доводит их до свободных входов  контроллера прерываний. Такой матричный коммутатор 4Х4 является частью моста PCIISA всех чипсетов предпоследнего поколения, — раньше контроллер прерываний в архитектуре РС находится на шине ISA. Только сейчас  искоренение ISA заставило перенести все устройства, включая BIOS, поближе к процессору. 

            Пока разъемов PCI на материнской плате было не больше четырех, такая схема работала идеально, —каждому устройству в итоге доставался свой запрос прерывания, и можно было не заботиться о разделении прерываний и выстраивании цепочек. Но очень скоро четырех слотов перестало хватать, и пришлось выдавать двум слотам одинаковый набор прерываний. Вот тут-то проблема interrupt sharing встала во всей красе. 

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

             При включении компьютер сам теперь определяет прерывания PCI и AGP устройствам. Однако когда на плате имеются интегрированный звук, USB – порты и другие устройства, всем различных прерываний не хватает. Поэтому некоторые устройства получают одинаковые номера прерываний и прекрасно работают. Но это касается только самых современных плат. Слегка устаревшие платы могут и конфликтовать друг с другом. Это может проявляться в зависании, заторможенной работе, ухудшении качества звука. Поэтому лучше все-таки стараться разделить ресурсы, отключая в SETUP IRQ для видеоадаптера и USB – портов, если они не используются. Иногда к решению проблем приводит переустановка плат в другие слоты PCI-шины. 

            Опыт показывает, что сетевой карте и звуковой карте желательно иметь собственные, ни с кем не разделенные номера прерываний. 

            Прямой доступ к памяти (DMA). Как известно, в случае передачи данных в режиме прямого доступа DMA периферийное устройство связано с памятью непосредственно, минуя внутренние регистры микропроцессора. В компьютерах, совместимых с IBM PC/XT, для этой цели используется четыре канала DMA, причем канал 0 предназначен для регенерации (refresh) оперативной памяти. Разумеется, работать по этому каналу недопустимо, поскольку скорее всего это приведет к сбоям в машине. Каналы 2 и 3 предназначены для управления высокоскоростной передачей данных между дисководами гибких дисков, винчестером и оперативной памятью соответственно. Только канал 1 DMA доступен для дополнительного оборудования.

             IBM PC/AT – совместимые компьютеры насчитывают семь каналов DMA. Поскольку прямой обмен данными  между оперативной памятью и периферийными устройствами в IBM PC – совместимых компьютерах имеет некоторые существенные ограничения (в том числе и по скорости), то в РС/АТ задействованы только канал 2 — для обмена с приводом флоппи-диска и канал 4 — под контроллер прямого доступа. 

            Рекомендации по использованию верного номера канала DMA, пожалуй, ничем не отличаются от рекомендаций для установки линии прерываний IRQ. Единственное преимущество использования каналов прямого доступа DMA с номерами 5 – 7 состоит в повышении производительности обмена данными, так как в этом случае реализуется 16-разрядная  передача. 

            Верхние блоки памяти. Напомним, что первые 640Кб адресуемого пространства в IBM PC – совместимых компьютерах называют стандартной памятью, а область памяти, в которой располагаются видеопамять, системный ROM BIOS и другие ROM различных адаптеров (от 640Кб до 1Мб), называют памятью в верхних адресах — UMB (Upper Memory Blocks). UMB активно используется такими устройствами, как видеоадаптеры, контроллеры SCSI, сетевые адаптеры, не только для размещения там своих ROM, но и для отображения в эту область некоторой части extended – памяти (операция shadow). В частности, некоторые видеокарты могут использовать дополнительную часть UMB как расширенный фрейм-буфер. Разумеется, что без UMB немыслима спецификация LIM/EMS для extended – памяти. Заметим, правда, что почти на всех персональных компьютерах область UMB редко бывает заполнена полностью, но, тем не менее, при установке дополнительных адаптеров об ее существовании также не следует забывать.

 Таблица 6. Распределение адресов UMB

             В таблице 6 показано распределение UMB между некоторыми стандартными устройствами. Для просмотра области UMB достаточно удобно использовать, например, такую программу, как Quarterdeck ManiFest

Диапазон адресов

Использование

A000 – BFFF

Видеопамять

C000 – C3FF

EGA BIOS ROM

C000 – C7FF

VGA BIOS ROM

C800 – CBFF

ROM BIOS винчестера

E000 – FFFF

F000 - FFFF

Системный ROM BIOS

             Более конкретные  рекомендации для огромного количества различных моделей компьютеров и периферийных адаптеров дать достаточно сложно, поэтому просто не забывайте о разделяемых системных ресурсах и внимательнее читайте документацию. Пример разделения системных ресурсов для некоего гипотетического компьютера приведен в таблице 7.

 Таблица 7. Разделение системных ресурсов. 

Устройство

UBM

Порты

IRQ

DMA

Контроллер VGA

A000 – BF000 C000 – C7FF

3B0 – 3DF

11

Контроллер флопии

3F0 – 3F7

6

2

EMS

E000 – EFFF

LPT1

3700 – 37F

7

COM1

3F8 – 3FF

4

COM2

2F8 – 2FF

3

Адаптер SCSI

D800 – DBFF

14

Сетевой адаптер

DC00 – DFFF

300 – 30F

10

Sound Blaster

220

5

1

            Часто утилиты, показывающие разделение системных ресурсов, «не понимают» использование  стандартных прерываний по другому назначение (например, если IRQ3 занимает не СОМ 2, а иное устройство). С портами ввода-вывода ситуация примерно такая же. Именно поэтому стоит порекомендовать последовательность действий, которая проделывается также и в том случае, когда вдруг компьютер начинает вести себя  просто непредсказуемо после установки дополнительной платы.

            Во-первых, вовсе не лишним будет, если вы откроете крышку компьютера, предварительно выключив питание, и убедитесь в том, что плата соответствующего адаптера надежно установлена в слот расширения. Кстати, эту плату лучше вынуть и снова установить в разъем. Если речь идет об адаптере накопителя, то следует проверить, не поврежден ли кабель между ним и проводом, а также надежность подсоединения кабеля с обеих сторон. В случае повреждения его необходимо заменить. Кабель питания для привода должен быть также хорошо закреплен. После тщательной проверки соединений необходимо убедиться, что все перемычки (jumpers) на плате адаптера установлены требуемым образом. Это лучше всего сделать по документации. 

            В тому случае, если проблемы возникли после установки на системную плату дополнительных периферийных адаптеров, первым делом удалите все контроллеры, кроме видеоадаптера и, разумеется, контроллера для приводов винчестера или флоппи. Это минимальная конфигурация, при которой конфликтов быть не должно (они маловероятны). Реинсталлируя один за другим удаленные адаптеры, начиная с нового, можно выяснить, с каким из них, возможно, конфликтует это устройство. При установке каждой платы стоит анализировать занимаемые ею системные ресурсы.

 

 

 

В зад

(В главное меню)

Вперед

--------------------------------------------------------------------------------------------------------------------------------------------

По всем вопросам работы сайта пишите!

 Рейтинг@Mail.ru

Дизайн и программирование - Joker -  2005г.

Используются технологии uCoz