5

В настоящее время я делаю модуль в теории операционных систем, и у меня есть несколько концепций, которые я не могу понять - это было бы правильное место, чтобы задавать вопросы?

Мой главный вопрос о прерываниях. Когда процессор обнаруживает, что произошло прерывание, я понимаю, что оно должно выяснить, откуда возникло это прерывание. Мое понимание таково: может кто-нибудь сказать мне, если это правильно, и объяснить несколько пробелов в моих знаниях?

Чтобы процессор мог определить, где возникло прерывание, он может запросить все объекты, чтобы определить источник, но эти вопросы на основе ввода / вывода могут занять много времени. Вместо этого он использует цикл прерываний и ожидает идентификатор прерывания на шине данных. Если это 8-битная шина данных, существует 256 уровней прерываний (т.е. 2 ^ 8). (Почему это?)

Таким образом, подпрограмма обработки прерывания (ISR) записывается для каждого возможного уровня прерывания и сохраняется в таблице в фиксированном месте (вектор прерывания), который стандартизируется процессором. В моих заметках написано "Место должно быть известно до получения адреса" (что это значит?)

Идентификатор уровня прерывания, полученный как часть цикла прерывания, используется как индекс в векторе прерывания (может кто-нибудь немного разбить это, пожалуйста?). Насколько я понимаю, значение, идентификатор уровня прерывания передается в ЦП и используется для указания на вектор прерывания.

Кроме того, что это означает, когда прерывание называется "обслуживаемым"?

Большое спасибо, и извините за длинные абзацы, меня просто немного смущают многие аспекты этого!

2 ответа2

4

что это значит, когда прерывание называется "обслуживаемым"?

Когда о вещании, запрашивающем прерывание, заботятся, то это называется «обслуживаемым» Это может быть так же просто, как чтение следующего символа с клавиатуры или отправка следующего пакета данных с карты Ethernet. Некоторые прерывания более важны, чем другие, поэтому есть возможность расставить приоритеты.

Полезную статью можно найти здесь.

Идентификатор уровня прерывания, полученный как часть цикла прерывания, используется как индекс в векторе прерывания

Как вы упомянули, когда происходит прерывание, процессор обычно спрашивает: «Кто это сделал?"и прерывающее устройство помещает свой идентификатор прерывания в шину данных. Затем процессор берет это число и ищет его в таблице ISR для передачи выполнения обработчику.

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

2

Вместо этого он использует цикл прерываний и ожидает идентификатор прерывания на шине данных. Если это 8-битная шина данных, существует 256 уровней прерываний (т.е. 2 ^ 8). (Почему это?)

Альтернативой этому является наличие булавки на процессоре для каждого типа или уровня IRQ, которые вы хотите поддерживать. 68000 сделали это, у них было 3 контакта прерывания, позволяющих выразить уровень IRQ от 0 (NMI) до 7. Процессоры Intel имеют только 1 вывод IRQ и ожидают, что адрес на шине (предоставляемый промежуточным устройством, называемым PIC) будет обеспечивать его тип (я думаю, что в Intel этот "адрес", в действительности индекс, идет непосредственно в регистр). Некоторые PIC могут на самом деле сообщить процессору, на какой адрес следует перейти напрямую).

Я полагаю, что у них есть отдельный вывод NMI (и есть другие прерывания с их собственными выводами, такими как SMI, IPI, и сброс является типом прерывания).

Таким образом, подпрограмма обработки прерывания (ISR) записывается для каждого возможного уровня прерывания и сохраняется в таблице в фиксированном месте (вектор прерывания), который стандартизируется процессором.

Вам не нужно писать 256 ISR, вы можете создать "заглушку", которая просто "возвращается из прерывания", фактически игнорируя ее.

В моих заметках написано "Место должно быть известно до получения адреса" (что это значит?)

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

Идентификатор уровня прерывания, полученный как часть цикла прерывания, используется как индекс в векторе прерывания (может кто-нибудь немного разбить это, пожалуйста?).

PIC получает IRQ от устройства. Это устройство настроено на запуск IRQ # 3. CPU, получив IRQ от PIC, видит 3 на шине и переходит на адрес в своей локальной таблице векторов IRQ, индекс 3.

Насколько я понимаю, значение, идентификатор уровня прерывания передается в ЦП и используется для указания на вектор прерывания.

Правильно.

Кроме того, что это означает, когда прерывание называется "обслуживаемым"?

Обычно вы не хотите, чтобы процессор прерывался во время обработки прерывания. Комбинации CPU и CPU + PIC выполняют различные функции для отключения прерываний после получения IRQ. Таким образом, вы должны "объявить", когда вы закончите обработку. В Intel вы должны снова включить бит разрешения системных прерываний и сообщить PIC, что вы закончили обслуживание IRQ. PIC "сдерживает" дальнейшие IRQ до тех пор, пока процессор не скажет, что это сделано.

Я упустил некоторые детали из вышеперечисленного для упрощения, а также потому, что прошло много времени с тех пор, как я изучал все вышеперечисленное, но я надеюсь, что это полезно.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .