Шесть автономных блоков микропроцессора i386 составляют систему конвейерного выполнения команд.
Исполнение команды, в общем виде, состоит из 6 тактов:
ФАК──>ВК──>ФАО──>ВО──>ОП──>ЗпРез
здесь:
ФАК - формирование адреса команды,
ВК - выборка команды,
ФАО - формирование адреса операнда,
ВО - выборка операнда,
ОП - выполнение текущей операции,
ЗпРез - запись результата операции.
Конвейерное выполнение программы - это когда в разных автономных блоках микропроцессора одновременно выполняются разные такты нескольких смежных команд. Например, ЗпРез команды n-1, собственно ОП команды n, ФАК команды n+1, ВК команды n+2 и ФАК команды n+3.
Обработка команды в CPU i386, в свою очередь, состоит из четырех этапов:
1) преобразование адресов при сегментированной или страничной организации памяти (выполняется в блоке MMU);
2) выборка полей команды из ОЗУ и накопление их в стеке очереди команд (выполняется в PU);
3) дешифрация команд из очереди и накопление дешифрованных кодов операций в стеке декодированных команд (выполняется в блоке IDU);
4) выполнение операции в EU, под микропрограммным управлением, и формирование статусных флагов.
Для ускорения выполнения команд в CPU, моделей i386 и старше, организован конвейер команд:
- каждая из команд в свое время находится в стадии выборки, хранения, дешифрации, формирования адреса и - выполнения;
- для смежных команд эти стадии (такты выполнения) обычно выполняются разными узлами CPU одновременно, в режиме совмещения, если соответствующие узлы микропроцессора в это время свободны;
- работа CPU, по отношению к системной магистрали, синхронна, а между узлами BIU, PU, IDU, EU - асинхронна.
Счетчик команд EIP в EU автоматически модифицирует адрес следующей команды по словам или двойным словам, в зависимости от длины команды, задаваемой входом /BS16. Информация в EIP, системных и сегментных регистрах блока MMU используется при формировании физического адреса для выборки следующей команды.
Одновременно с адресным формированием в EU, в работе находится одна из команд очереди в IDU, в которое, в свой черед, подгружается команда из PU.
Обмен данными между CPU и системой осуществляет BIU по запросу от EU, либо при наличии свободного места в очереди команд.
Если EU выполняет длинную команду, не требующую новых данных из системы, а узлы очередей заполнены, то BIU может находиться в, так называемом, холостом цикле.
В многопроцессорных системах, когда шина передается от одного ведущего модуля другому, отключаемые модули переводят свои шины в состояние высокого импеданса - Z-состояние. В это время отключенный от шины CPU, или контроллер имеет возможность автономно выполнять все команды, находящиеся в стеках, до тех пор, пока CPU не потребуется шина для обмена. Если же в это время шина все еще занята, то CPU прекращает работу, находясь в состоянии ожидания (Time-Out), пока шина не освободится (линия /READY=H, т. е. пассивна).
Контрольные вопросы.
1. Из каких тактов состоит выполнение команды в CPU?
2. Что такое цикл шины в РС?
3. В чем смысл сигнала HOLD?
4. В чем смысл сигнала HLDA?
5. Как реагирует микропроцессор на сигнал INTR?
6. В чем особенность сигнала NMI?