Ответ 1
Хорошо, да, если мы говорим о традиционном таймере 8254 PIT, то он находится в IRQ0, который является вектором 32. Но это обычно не используется в качестве таймера в операционной системе Linux на современных машинах. [Обратите внимание, что векторное присваивание 32 действительно довольно произвольно. Он задается при программировании 8259 (PIC) или APIC - но это не плохой выбор, так как 32 является первым вектором ПОСЛЕ зарезервированных. Это, безусловно, лучше, чем смешивать аппаратные прерывания с векторами исключений, поскольку DOS будет делать - так что не было возможности рассказать об общей ошибке защиты (вектор 13 в таблице выше) из INTR 5 (также вектор 13, когда INT0 был отображен к вектору 8 и 5 + 8 = 13). Из памяти INTR5 не был особенно хорошо использован - что-то вроде LPT2: (Второй параллельный порт). Но все же хорошая идея не перекрывать их... Henc "зарезервировано" для векторов с 20 по 31.
IRQ, который фактически контролирует синхронизацию системы, скорее всего, является локальным таймером APIC, и этот вектор не фиксируется на аппаратном уровне так же, как на исходном ПК.
Кроме того, с появлением "сигнальных прерываний с сообщением" вполне возможно иметь (намного) более 256 векторов прерываний.
Я не согласен с формулировкой "vector 0-19 - это не маскируемые прерывания". Помимо NMI (вектор 2), все они являются ИСКЛЮЧЕНИЯМИ (иначе TRAPS или FAULTS), то есть событие, вызванное некоторым условием ошибки в системном векторе, является результатом целочисленного деления на ноль, вектор 1 является "один шаг" прерывания команд [и несколько других "отладочных" ловушек, таких как "запись на любой адрес, соответствующий разрешенному регистру отладки" ], вектор 3 является результатом команды "int3" (код операции 0xcc), вектор 4 является результат выполнения "INTO" (что "o" как при переполнении, а не 0
как в ноле). При доступе к части памяти, не помеченной как присутствующая в таблицах страниц, используется вектор 14. Они действительно "не маскируются", но за некоторыми исключениями они непосредственно следят за выполнением инструктажа в то время, поэтому они синхронны с самой программой.
Исключение составляют исключение "двойная ошибка" и "ошибка проверки машины".
Двойная ошибка заключается в том, что процессор обнаруживает ошибку при обработке другого исключения - как правило, из-за того, что операционная система сделала что-то глупое, например, установила, что стек некорректен, и, таким образом, получает ошибку страницы, пытается использовать стек для сохранения адреса возврата страницы, и это не удается, потому что стек недоступен. Таким образом, двойные обработчики ошибок, как правило, устанавливаются как "прерывания переключения задач", и загружают новый стек, чтобы убедиться, что двойная ошибка может продолжаться. Если обработчик двойной ошибки не может работать правильно, процессор будет "тройной". Обычно это означает "перезагрузка" на платформах ПК. Двойные сбои обычно не восстанавливаются - обработчик (попытается) предоставить некоторую информацию о том, что произошло, и как он попал в это состояние, но как только это произойдет, система либо перезагрузится, либо ждет, когда кто-то придет, и нажмите reset кнопка.
Ошибка проверки компьютера - это то, где процессор обнаруживает неустранимую ошибку, такую как ошибка безвозвратной памяти или ошибка проверки четности и т.д. Обычно они также не восстанавливаются, но не ПРЯМО не связаны с выполняемой инструкцией, но больше на сочетание различных событий (чтение памяти адреса, в котором содержимое памяти испортилось или что-то подобное).