Гук Михаил Юрьевич
Шрифт:
• master-Abort – прекращение транзакции, когда в течение заданного времени ведущее устройство не получает ответа от целевого устройства (сигнала DEVSEL#).
Транзакция может быть прекращена по инициативе целевого устройства; для этого оно может ввести сигнал STOP#. Возможны три типа прекращения транзакции:
• retry – повтор, введение сигнала STOP# при пассивном сигнале TRDY# до первой фазы данных. Эта ситуация возникает, когда целевое устройство из-за внутренней занятости не успевает выдать первые данные в положенный срок (16 тактов). Прекращение типа retry является указанием ведущему устройству на необходимость повторного запуска той же транзакции;
• disconnect – отключение, введение сигнала STOP# в течение или после первой фазы данных. Если сигнал STOP# введен при активном сигнале TRDY# очередной фазы данных, то эти данные передаются, на чем транзакция и завершается. Если сигнал STOP# выставлен при пассивном сигнале TRDY#, то транзакция завершается без передачи данных очередной фазы. Отключение производится, когда целевое устройство не способно своевременно выдать или принять очередную порцию данных пакета. Отключение является указанием ведущему устройству на необходимость повторного запуска этой транзакции, но с модифицированным стартовым адресом;
• target-abort – отказ, введение сигнала STOP# одновременно со снятием сигнала DEVSEL# (в предыдущих случаях во время появления сигнала STOP# сигнал DEVSEL# был активен). После этого данные уже не передаются. Отказ производится, когда целевое устрйство обнаруживает фатальную ошибку или иные условия, по которым оно уже никак не сможет обслужить данный запрос (в том числе и неподдерживаемую команду).
Использование трех типов прекращения транзакции вовсе не обязательно для всех целевых устройств, однако любое ведущее устройство должно быть готово к завершению транзакций по любой из этих причин.
Прекращение типа retry используется для организации отложенных транзакций (delayed transactions). Отложенные транзакции используются только медленными целевыми устройствами, а также мостами PCI при трансляции транзакций на другую шину. Прекращая (для инициатора) транзакцию условием retry, целевое устройство внутренне выполняет данную транзакцию. Когда инициатор повторит эту транзакцию (выдаст ту же команду с тем же адресом и тем же набором сигналов C/BE# в фазе данных), у целевого устройства (или моста) уже будет готов результат (данные чтения или состояние выполнения записи), который оно быстро вернет инициатору. Результат отложенной транзакции, выполненной данным устройством, устройство или мост должны хранить до тех пор, пока результаты не будут запрошены инициатором. Однако он может и «забыть» повторить транзакцию (из-за каких-либо нештатных ситуаций). Чтобы избежать переполнения буфера хранения результатов, устройству приходится отбрасывать (discard) эти результаты. Отбрасывание может быть выполнено без побочных эффектов, если откладывалась транзакция к памяти, допускающей предвыборку (с атрибутом prefetchable, см. далее). Остальные типы транзакций в общем случае безнаказанно отбрасывать нельзя (может нарушиться целостность данных), для них отбрасывание разрешается только после безрезультатного ожидания повтора в течение 215 тактов шины (по срабатыванию discard timer). Об этой особой ситуации устройство может сообщить своему драйверу (или всей системе).
Инициатор транзакции может потребовать монопольного использования шины PCI на все время выполнения операции обмена, требующей нескольких шинных транзакций. Так, например, если центральный процессор выполняет инструкцию модификации данных в ячейке памяти, принадлежащей устройству PCI, ему нужно прочитать данные из устройства, модифицировать их в своем АЛУ и вернуть результат в устройство. Чтобы в эту операцию не вклинивались транзакции от других инициаторов (что чревато нарушением целостности данных), главный мост выполняет ее как блокированную – на все время исполнения операции подается шинный сигнал LOCK#. Этот сигнал никак не используется (и не вырабатывается) обычными устройствами PCI (не мостами); он используется только мостами для управления арбитражем.
Команды шины PCI
Команды PCI определяют направление и тип транзакций, а также адресное пространство, к которому они относятся. Набор команд шины PCI включает следующие:
• I/O Read, I/O Write – команды чтения и записи ввода/вывода, служат для обращения к пространству портов;
• Memory Read, Memory Write – команды чтения и записи памяти, служат для выполнения коротких (как правило, непакетных) транзакций. Их прямое назначение – обращение к отображенным на память устройствам ввода/вывода. Для «настоящей» памяти, допускающей предвыборки, предназначены команды чтения строк, множественного чтения и записи с инвалидацией;
• Memory-Read Line – чтение строки памяти, применяется, когда в транзакции планируется чтение до конца строки кэша. Выделение данного типа чтения позволяет повысить производительность обмена с памятью;
• Multiple Memory Read – множественное чтение памяти, используется для транзакций, затрагивающих более одной строки кэш-памяти. Использование данного типа транзакций позволяет контроллеру памяти выполнять упреждающую выборку строк, что дает дополнительный выигрыш производительности;
• Memory Write and Invalidate (MVI) – запись с инвалидацией, применяется к целым строкам кэша, причем все байты во всех фазах должны быть разрешены.
Эта операция заставляет контроллер кэш-памяти очищать «грязные» строки кэша, соответствующие записываемой области, без их выгрузки в ОЗУ, что экономит время. Инициатор, вводящий эту команду, должен знать размер строки кэша в данной системе (для этого у него есть специальный регистр в конфигурационном пространстве);
• Dual Address Cycle (DAC) – двухадресный цикл, позволяет по 32-битной шине обращаться к устройствам с 64-битной адресацией. В этом случае младшие 32 бита адреса передаются одновременно с данной командой, а далее следует обычный цикл, определяющий команду обмена и несущий старшие 32 бита адреса. Шина PCI допускает 64-битную адресацию как памяти, так и портов ввода/вывода (последнее для систем на x86 бесполезно, но PCI существует и на других платформах);