Почему архитектура IA-32 помещает регистр EFLAGS в стек до вызова обработчика прерываний? - PullRequest
0 голосов
/ 26 апреля 2011

Это только потому, что регистр EFLAGS работает как коммутатор? Таким образом, когда оно активно, прерывание включено, в противном случае это не так?

Скажем, в программе на Java это будет что-то вроде

 while (switch != 0){
     keepRunning;
 }

 Stop;

Ответы [ 2 ]

1 голос
/ 14 июня 2011

Ядро сохраняет EFLAGS в кадре стека прерываний, чтобы прерванная задача могла быть возобновлена ​​позже.EFLAGS является частью минимального состояния машины, сохраняемого ядром в кадре стека, который также включает указатель инструкций (EIP), сегмент кода (CS) и обычно указатель стека пользовательского режима (ESP).Когда процедура обработки прерывания завершается (с помощью инструкции IRET), ядро ​​восстанавливает EFLAGS и остальные регистры в кадре стека.

Основная философия здесь заключается в том, что задача может выполняться без опасений, что любое случайное прерываниевдруг топает по регистрам.Это единственный разумный подход.

0 голосов
/ 09 января 2012

Я полагаю, что причина этого в том, что регистры изменяются в силу прерывания. А именно флаг IE (interrupt-enable) будет сброшен. Если бы процессор не выдвигал флаги, он не мог бы изменять флаги и потребовал бы дополнительного состояния и дополнительных инструкций для получения этого скрытого состояния.

...