PersCom — Компьютерная Энциклопедия Компьютерная Энциклопедия

PCI и PCI-X

Границы диапазонов адресов и транзакций

Области пространств памяти и ввода/вывода, занимаемые устройством (точнее, функцией), описываются регистрами BAR (Base Address Register) в заголовке конфигурационного пространства. При этом подразумевается, что длина области выражается числом 2n (n = 0, 1, 2…) и область выровнена естественным образом. В PCI области памяти выделяются по 2n параграфов (16 байт), то есть минимальный размер области — 16 байт. Области ввода/вывода выделяются по 2n двойных слов. Мосты PCI-PCI имеют карты адресов памяти с гранулярностью 1 Мбайт и карты ввода/вывода с гранулярностью 4 кбайт.

В PCI пакетная транзакция может быть прервана на границе любого двойного слова (в 64-битных операциях — учетверенного слова). В PCI-X ради оптимизации обращений к памяти пакетные транзакции разрешается прерывать только в разрешенных точках, называемых ADB (Allowable Disconnect Boundary — разрешенные границы отключения). Точки ADB располагаются с интервалом 128 байт — это целое число (1, 2, 4 или 8) строк кэша современных процессоров. Конечно, это ограничение относится только к границам транзакций внутри последовательности. Если последовательность должна по плану заканчиваться не на границе ADB, то и ее последняя транзакция будет завершена не на границе. Однако этой ситуации стараются избегать, разрабатывая такие структуры данных, которые могут быть выровнены подходящим образом (иногда даже ценой избыточности).

С границами адресов связан термин ADQ (ADB Delimited Quantum) — часть транзакции или буферной памяти (в мостах и устройствах), лежащая между границами соседних ADB. Например, транзакция, пересекающая одну границу ADB, состоит из двух ADQ (квантов) данных и занимает в мосте два буфера ADQ.

В соответствии с разрешенными границами транзакций области памяти, занимаемые устройствами PCI-X, также должны начинаться и заканчиваться на ADB — память выделяется квантами ADQ. Таким образом, минимальная область памяти, выделяемая устройству PCI-X, не может быть меньше 128 байт, а с учетом правил описания области ее размер может составлять 128 × 2n байт.