Программирование на JAVA

9.11, б. Если, например, вывод команды I2 будет от­ложен из-за промаха при обращении к кэш-памяти за ее исходным операндом, на такте 4 целочисленный блок окажется занятым, и подготовка команды I4 к вы­полнению станет невозможной. Корректна ли в этом случае диспетчеризация ко­манды I5? В принципе, да, если для команды I4 в буфере реорганизации зарезер­вировано место, что обеспечит выход команд из конвейера в правильном порядке. Однако внеочередная диспетчеризация команд требует большой осторожности. Приступая к ней, нужно иметь гарантию, что не произойдет взаимоблокировки.

Взаимоблокировкой называется ситуация, когда два блока, скажем А и В, со­вместно используют один ресурс. Предположим, блок В не может завершить ра­боту до тех пор, пока блок А не закончит свою. В то же время блоку В выделен ре­сурс, который нужен блоку А. При таком раскладе ни один из двух блоков не сможет решить свою задачу. Блок А будет ожидать освобождения ресурса, а блок В, «оккупировавший» нужный ресурс, — завершения работы блока А.

Рассмотрим, вследствие чего происходит взаимоблокировка, если команды диспетчеризируются не по порядку. Допустим, процессор имеет только один вре­менный регистр, который резервируется для команды I5, когда она диспетчеризируются


<< назад вперед >>