информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
За кого нас держат?Spanning Tree Protocol: недокументированное применение
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Бэкдор в xz/liblzma, предназначенный... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / hardware
Имя Пароль
ФОРУМ
все доски
FAQ
IRC
новые сообщения
site updates
guestbook
beginners
sysadmin
programming
operating systems
theory
web building
software
hardware
networking
law
hacking
gadgets
job
dnet
humor
miscellaneous
scrap
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Комментирую... 06.04.04 16:43  Число просмотров: 1999
Автор: leo <Леонид Юрьев> Статус: Elderman
Отредактировано 06.04.04 17:10  Количество правок: 2
<"чистая" ссылка>
Комментирую, с запозданием (только вот заметил), но может еще пригодиться.

1)
На ISA-шиненельзяпосадить дваразныхISA-устройства на одно IRQ по электрическим "причинам".
Если все-же это сделать, то при первом-же прерывании будет ситуация когда TTL-выход с логическим '0' будет соединен с другим TTL-выходом с логическим '1'. Сигналы как минимум "задавятся", и в худшем случае TTL-вентиль устройства выставившего прерывания (лог 0) может перегореть. Хотя иногда "задавленного" уровня может хватить для срабатывания триггера на контроллере шины/прерываний, и тогда все может работать и даже "предсказывать" погоду :).
Реально обычно ничего не горит, но и не работает.

2)
Некоторые мультипортовые ISA-платы могут соединяться между собой специальным шлейфом, при этом обеспечивается синхронность изменения TTL-уровня на IRQ. Т.е. все соединенные платы выставляют IRQ одновременно и синхронно.

3)
Некоторые IO-контроллеры (ISA-карты на борту которых COM-порты, LPT, возможно IDE и т.д.) имеют логику "объединения" IRQ между своими устройствами, и поэтому, при наличии нормальных драйверов такие COM-порты могут работать на одном IRQ.

4)
Интегральные IO-чипсеты (все в одном чипе), как для ISA, так и для PCI, либо имеют логику объединения IRQ, либо не допускают установку одного IRQ для своих устройств. Но не все из чипов имеют "на борту" интерфейс к шине компьютера и при этом могут выдавать IRQ от каждого устройства на отдельном выводе.

5)
Внутренности плюшевых Win95/98/Me я знаю очень плохо, могу только предположить что WDM (98, Me) работает примерно также как Win2K/XP.
Win2K/XP не позволяет драйверам штатно разделать IRQ для ISA-устройств. Но можно сказать, что если системе "известно", что эти устройства "дружат" по IRQ между собой, и если их драйвера "захотят" разделать IRQ, то все будет работать. На самом деле все несколько сложнее, может быть несколько шин ISA, несколько шин PCI, и несколько процессоров... В конечном счете все будет решаться арбитром шины + HAL и драйверами.

Мой драйвер (SerialXp.sys) может работать в режиме разделения IRQ для ISA, системный Serial.sys тоже может, но его часто просто невозможно заставить это сделать. И конечно, независимо от драйвера, разделение IRQ на ISA должно не вызывать конфликтов на аппаратном уровне.

6)
В Windows для устройств предусмотрена возможность "псевдо"-разделения IRQ. При этом логическое подключение к IRQ производиться только при задействовании устройства (открытии handle к COM-порту), соответственно в каждый момент времени только одно из устройств разделяющих IRQ может быть активно. На аппаратном уровне это должно поддерживаться динамическим отключением/подключением устройств от/к линии IRQ (например через ISA-PNP).

7)
Вот еще забыл написать. На ISA-шине прерывание фиксируется контроллером прерываний по фронту (но можно перепрограммировать). Поэтому, перед выходом из обработчика прерываний и перед подачей контролеру команды "End Of Interrupt" (mov al, 20h; out al, 20h) необходимо убедиться, что с момента фиксации прерывания (TTL_IRQ 1->0) был момент (такт) когда линия IRQ была неактивна (TTL_IRQ = 1), иначе контроллер больше "не заметит" новых прерываний. Это также затрудняет разделение IRQ на ISA между разными устройствами, которые обслуживаются разными драйверами.

Ну прямо FAQ получилось :-)
Удачи!

SerialXp.sys
<hardware> Поиск 






Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach