Окно прерываний - PullRequest
       1

Окно прерываний

2 голосов
/ 09 мая 2011

Мой вопрос: зачем вам нужно запрещать прерывания во время следующей последовательности сборки? Разве прерывание не сохранит все регистры и не вернет их после завершения, чтобы не было потери данных?

cli   
inb (%dx), %al  
orb  $0x01, %al  
outb %al, (%dx)  
sti

Ответы [ 2 ]

3 голосов
/ 09 мая 2011

Разве прерывание не сохранит все регистрирует и возвращает их после сделано, чтобы не было потери данных?

Да, было бы. Однако некоторые порты ввода / вывода чувствительны ко времени и могут не работать должным образом, если последовательность чтения / записи прерывается. Или прерывание как-то влияет на порт (например, вы читаете регистр UART, и появляется символ, вызывая последовательное прерывание и изменяя состояние UART). Или вы можете писать в порт, который сам по себе связан с обработкой прерываний (например, контроллер прерываний). Трудно сказать, действительно ли это необходимо без каких-либо подробностей, но в целом лучше быть в безопасности, чем потом сожалеть.

0 голосов
/ 09 мая 2011

В этом конкретном случае вы читаете значение из порта, меняете один бит и записываете его снова. Чтобы работать как цикл чтения-изменения-записи, код должен быть непрерывным.

В противном случае, если во время этой последовательности произойдет другое прерывание и изменится другой бит, это изменение будет перезаписано при продолжении. Не хорошо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...