Я пишу эмулятор и не могу найти информацию об этом. Что я знаю, так это то, что устройства запускают импульс на проводе IRQ. Но объяснения онлайн не включают, как процессор справляется с этим. Вызывает ли прерывание буквально процессор все бросить и позаботиться об этом? Или процессор проверяет состояние IRQ во время каждого цикла? А как насчет других способов обработки прерываний? Например, Nintendo Game Boy, очевидно, использует зарезервированное место в памяти в качестве флага прерывания, который сообщает центральному процессору, где вызывать подпрограмму для обработки этого прерывания (мое лучшее предположение, что этот флаг записывается DMA). Это распространено или стандартно в старых системах?

1 ответ1

1

Что я знаю, так это то, что устройства запускают импульс на проводе IRQ.

Может быть, пульс, но более распространенный уровень утверждается.
Только после подтверждения прерывания строка запроса отменяется.

Вызывает ли прерывание буквально процессор все бросить и позаботиться об этом?

Эффективно да, упорядоченно. Вот почему это называется "прерывание".

Или процессор проверяет состояние IRQ во время каждого цикла?

Нет, процессор буквально прерывается (при завершении инструкции).
Но если вы посмотрите глубже, то есть как работает сам процессор, то есть конечный автомат, который проверяет линию IRQ.

Например, Nintendo Game Boy, по-видимому, использует зарезервированное место в памяти в качестве флага прерывания, который сообщает процессору, где вызывать подпрограмму для обработки этого прерывания.

Это смутно звучит как вектор прерывания, который используется во многих архитектурах ЦП. Но он не используется как "флаг прерывания".

Ваши вопросы, кажется, указывают на то, что у вас есть слабое понимание того, что является внешним по отношению к процессору, и что является внутренним по отношению к процессору. Например, процессор выполняет машинные инструкции, извлеченные из памяти. Внутри процессора есть декодер команд. Если вы описываете эту внутреннюю операцию как "ЦП декодирует инструкцию", то вы создали проблему, различающую внешние и внутренние (низкоуровневые) операции.

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