Как процессор работает с инструкцией при прерывании - PullRequest
1 голос
/ 25 января 2011

Что произойдет, если в середине длинной инструкции ЦП получит прерывание?Будет ли процессор выполнять всю инструкцию или только ее часть?

Ответы [ 2 ]

1 голос
/ 25 января 2011

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

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

Есть исключения из этого, в частности, класс команд REP-string.

Я полагаю, что это то, о чем вы спрашивали, но если это не так, то позвольте мне спросить вас: как бы вы заметили, что инструкция была "частично" выполнена откуда угодно?

1 голос
/ 25 января 2011

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

(Источник: Википедия, http://en.wikipedia.org/wiki/Interrupt)

...