Главная » Статьи о COM-портах » Использование регистра прерываний

Использование регистра прерываний

Разработка мультипортовых адаптеров основана на том, что несколько UART, формирующих последовательные порты, могут одновременно пользоваться одним и тем же запросом на прерывание. Пропускная способность асинхронного приемника/передатчика ограниченна величиной, приблизительно равной 1 Мбиту, а возможности локальных шин, будь то ISA или PCI, значительно ее превосходят, что и позволяет мультиплексировать порты.

На повестке дня при выборе такой архитектуры — способ определения, от какого UART поступило прерывание? Это необходимо сделать для того, что принять или отправить обработанные данные в COM-порты.

Самый простой путь для идентификации инициатора — радиальный обзор всех примников-передатчиков. В случае, если поступил запрос прерывания, нужно один за другим опросить все порты, работающие по протоколу RS-232. И здесь существует несколько подходов, оптимизирующих работу последовательного мультиплексора: можно всегда выполнять обход портов по заранее установленному порядку; можно от сеанса к сеансу инкрементировать (декрементировать) номера опрашиваемых портов; можно осуществлять требуемую процедуру с ротацией номеров COM-портов. Как бы там ни было, стохастические качества всех перечисленных подходов примерно одинаковы. Даже, если порядок опрашиваемых портов будет формироваться с рандомизацией (что неэффективно с экономической точки зрения, так как существенно увеличит стоимость по определению бюджетного решения), все равно это коренным образом не изменит производительность адаптера, обслуживающего несколько RS-232 интерфейсов.

Одним из кардинальных решений в архитектуре мультипортовых платформ является использование индексации COM-портов с формированием битового поля, отображающего активность прерывания в том или ином канале RS-232 интерфейса. Если с этой целью задействовать байт в конфигурационном пространстве PCI-мультиплексора, то можно говорить, что ситуаций с запросами на прерывание отображается в регистре-защелке. Отсюда название для такого регистра прерываний: Interrupt Latch Register.

Ненулевое состояние ILR сигнализирует системе о наличии необслуженного процесса, ради которого следует прервать текущую работу. Анализ битов по маске сразу же указывает на источник запроса, что с точки зрения накладных расходов гораздо эффективнее в смысле производительности в целом. Как обстоит дело на практике?

Очевидное недоумение касается ситуации, когда в ILR несколько активных битов сигнализируют о запросах сразу от нескольких последовательных портов. Если в процессе обслуживания одного их них возникнет еще один запрос, то необходимо детерминировать процесс разрешения коллизий. Иначе существует вероятность «забытого» запроса на прерывание от какого-либо COM-порта.

В этой связи применение регистра прерываний требует дополнительных исследований, так как его использование в системах, где подключение жестких дисков выполняется через SAS-интерфейс, выглядит сомнительным. Неоправдана и попытка сместить приоритеты обслуживания прерываний в системах с SATA-дисками, работающими в режиме UDMA, либо в системах, где используется центральный процессор с высоким коэффициентом умножения. На устаревших системных платах, где IDE-контроллер выполнен в отдельном корпусе, например CMD-640 (CMD Technology, Inc. — сейчас Silicon Image, Inc.), DTC 2278D (Data Technology Corp.), HT-6560B (Holtek Corp,), RZ1000 (PC Technology Inc. — ныне Micron Electronics Inc.), использование такого механизма может привести к увеличению времени ожидания завершения дисковых операций, что опасно для целостности логических структур на жестком диске.

Реклама на V-Comp:


21.09.2017