Что означает «процессор синхронизирует выполнение команд ввода-вывода с активностью внешней шины»? - PullRequest
2 голосов
/ 22 марта 2011

Следующая выдержка из Руководства разработчика программного обеспечения Intel® 64 и IA-32, Том 1: Базовая архитектура (стр.432, http://www.intel.com/Assets/PDF/manual/253665.pdf)


Когда адресное пространство ввода-выводаиспользуется вместо сопоставленного с памятью ввода-вывода, ситуация отличается в двух отношениях:

• Процессор никогда не буферизует записи ввода-вывода. Следовательно, процессор обеспечивает строгий порядок операций ввода-вывода (Как и в случае ввода-вывода с отображением в память, микросхема может выполнять запись в определенных диапазонах ввода-вывода.)

• Процессор синхронизирует выполнение команды ввода-вывода с активностью внешней шины (см. Таблицу 14).-1).

Таблица 14-1. Сериализация команд ввода-вывода

------------------+----------------------------------+----------------------------------
                  | Processor Delays Execution of …  | Until Completion of …
                  +---------------+------------------+-----------------+----------------
Instruction Being | Current       | Next             |                 |
Executed          | Instruction?  | Instruction?     | Pending Stores? | Current Store?
------------------+---------------+------------------+-----------------+----------------
IN                |     Yes       |                  |      Yes        |
INS               |     Yes       |                  |      Yes        |
REP INS           |     Yes       |                  |      Yes        |
OUT               |               |       Yes        |      Yes        |       Yes
OUTS              |               |       Yes        |      Yes        |       Yes
REP OUTS          |               |       Yes        |      Yes        |       Yes
------------------+---------------+------------------+-----------------+----------------

Может кто-нибудь объяснить мне, что означает эта таблица? Особенно я понятия не имею, что это такое 'означает «ожидающие магазины» или «текущий магазин».

1 Ответ

5 голосов
/ 22 марта 2011

Процессор имеет очередь записи, поэтому, когда что-то сохраняется в памяти, данные просто попадают в очередь. Инструкция считается завершенной, как только данные поступают в очередь - вы можете начать выполнение следующей инструкции, не дожидаясь, пока данные перейдут из очереди в целевую память.

Пространство ввода / вывода не то же самое. Если вы читаете из пространства ввода-вывода, ваше чтение не будет даже начинаться , пока все данные в очереди записи в память в это время не будут записаны в память. Если вы выполняете запись в пространство ввода / вывода, инструкция начинает выполняться немедленно, но следующая инструкция не может быть выполнена, пока все данные в очереди записи не будут записаны и данные, записываемые текущая инструкция была написана.

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

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

...