Если вы изучаете asm, чтобы ускорить внутренние петли и прочее, вам не нужно беспокоиться об этом. Вы можете и должны оставить управление прерываниями в ОС. (cli/sti
- это, конечно же, привилегированные инструкции, которые работают только в ядре.)
Драйверы устройств Linux (2-е издание), Chapter 9 касается обработки прерываний и упоминания с использованием cli/sti.
В дни, предшествовавшие SMP, прерывание прерываний работало как простая альтернатива блокировке. С многоядерными процессорами другое ядро может касаться вашей структуры данных, даже когда прерывания отключены в ядре, в котором работает ваш код, поэтому он намного менее полезен. Это очень редко делается больше.
Есть несколько раз, когда необходимо отключить прерывания. Например, пока вы делаете то, что временно имеет указатель стека, не указывающий на действительную память. (NVM, mov ss, reg
неявно отключает прерывания до завершения следующей команды. Таким образом, вы можете изменить сегмент стека, а затем указатель стека без cli/sti
. Который не имеет никакого значения в 64-битном коде, где сегментные регистры являются по существу не используется.)
другой возможным примером является изменение других ключевых структур данных, используемых ЦП, чтобы решить, что делать, когда происходит прерывание. (таблица глобальных дескрипторов и/или таблица дескрипторов прерываний). Хотя IDK о них, если они разделяются с другими процессорами, тогда вам нужно всегда держать их в силе. Я думаю, что недавно я прочитал пример о случае, когда вам нужно было отключить прерывания во время пары подключаемых изменений в таблицах дескрипторов или что-то в этом роде, но я не помню, что.
Я не являюсь экспертом по i386 по материалу ядра, поэтому я не задираю все в this explanation of a case, где вам нужно отключить прерывания при использовании «ворот задач», что бы это ни было.
Этот документ выглядит как часть серии уроков низкого уровня: http://www.osdever.net/bkerndev/Docs/gdt.htm. Вам может показаться интересным, если вы хотите копать все сумасшедшие вещи, которые происходят под капотом на x86.
Прочитайте _ГЛАВА 6 ПРЕРЫВАНИЕ И ИСКЛЮЧЕНИЕ ОБРАЩЕНИЯ_ в Руководство разработчика программного обеспечения _Intel® 64 и IA-32 Volume 3A: Руководство по системному программированию, часть 1_. Практическое использование IF для программного обеспечения операционной системы, чтобы отключить прерывания. НМИ редко используется. – Jester