2012-04-30 2 views
4

У меня есть основное сомнение в отношении прерываний. Представьте себе компьютер, на котором нет прерываний, поэтому для того, чтобы он мог выполнять операции ввода-вывода, ЦП должен будет проводить опрос * клавиатуру для нажатия клавиши, мыши для щелчка и т. Д. С регулярными интервалами. Теперь, если он прервется, ЦП будет продолжать проверять, была ли линия прерывания высокой (или низкой) с регулярными интервалами. Итак, как циклы CPU сохраняются с помощью прерываний. В соответствии с моим пониманием вместо проверки устройства мы проверяем линию прерывания. Может кто-нибудь объяснить, в какой основной логике я ошибаюсь.Опрос v/s Прерывание

* Здесь, при опросе, я не имею в виду, что процессор находится в оживленном состоянии. Процитировать Wikipedia «Опрос» также относится к ситуации, когда устройство неоднократно проверяется на готовность, а если компьютер не возвращается к другой задаче »

ответ

4

@David Шварц и @RKT правы, он не принимает каких-либо циклов процессора, чтобы проверить линию прерывания.

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

Вот как это работает. Когда операционная система загружается, она регистрирует набор обратных вызовов (таблица указателей функций, фактически) с процессором, используя специальную инструкцию, которая берет адрес первой записи таблицы. Когда инициируется прерывание N, процессор вытягивает N-й элемент из таблицы и запускает код в том месте, где он относится. Код внутри функции записывается авторами ОС в сборку, но обычно все, что она делает, это сохранение состояния стека и регистров, так что текущая задача может быть возобновлена ​​после того, как обработчик прерывания был вызван, а затем вызывает более высокий уровень общий обработчик прерываний, который написан на C и который обрабатывает логику «Если это ошибка страницы, сделайте X», «Если это прерывание клавиатуры, сделайте Y», «Если это системный вызов, сделайте Z» и т. д. Конечно, есть вариации в этом с разными архитектурами и языками, но суть в этом одна и та же.

Идея с программными прерываниями («сигналы» на языке Unix) одинакова, за исключением того, что ОС выполняет работу по настройке стека для запуска обработчика сигналов. Основная процедура заключается в том, что процесс userland регистрирует обработчики сигналов по одному в OS через системный вызов, который принимает адрес функции обработчика в качестве аргумента, затем некоторое время в будущем ОС распознает, что он должен отправить этот процесс сигнал. В следующий раз, когда этот процесс будет запущен, ОС установит свой указатель на начало функции обработчика и сохранит все его регистры где-то, процесс может восстановить их, прежде чем возобновить выполнение этого процесса. Обычно обработчик будет иметь некоторую логику маршрутизации, чтобы предупредить соответствующий бит кода, что он получил сигнал. Когда процесс завершает выполнение обработчика сигнала, он восстанавливает состояние регистра, существовавшее до выполнения обработчика сигнала, и возобновляет выполнение там, где он был остановлен.Следовательно, программные прерывания также более эффективны, чем опрос, чтобы узнать о событиях, поступающих из ядра в этот процесс (однако это не является механизмом общего использования, поскольку большинство сигналов имеют конкретные применения).

3

Для проверки строки прерывания не требуется никаких циклов ЦП. Это делается с помощью специального оборудования, а не инструкций CPU. Причина, по которой это называется прерыванием, заключается в том, что если строка прерывания утверждается, процессор прерывается.

+0

Привет, Спасибо за ответ, но я немного смущен. Что именно означает «CPU прерван». Как ЦП знает, что ему нужно обслуживать прерывание, не проверяя его. – Pratt

+0

Точно так же вы можете знать, когда телефон звонит, не проверяя его. Звонок прерывает вас. Ваш мозг сконструирован таким образом, что когда телефон звонит, что бы он ни делал, он прерывается и замечает, что телефон звонит. Вам не нужно опросить телефон, чтобы узнать, звонит ли он. –

+0

Пример звонка телефона точно отражает мое замешательство. Разве это не значит, что мой мозг «бессознательно» опрокидывает нейроны, прикрепленные к моему уху. – Pratt

1

«CPU прерван»: он оставит (приостановит) выполнение обычной программы, а затем выполнит процедуру ISR (прерывание) и снова вернется к выполнению приостановленной программы.

CPU приходят знать о прерываниях через IRQ (запрос прерывания) и IF (флаг прерываний)

-1

Прерывание: событие, генерируемое устройством в компьютере, чтобы привлечь внимание процессора. Предоставляется для улучшения использования процессора. Для обработки прерывания существует связанная с ним процедура обслуживания прерываний (ISR). Чтобы прервать процессор, устройство отправляет сигнал на свою линию IRQ и продолжает делать это до тех пор, пока процессор не подтвердит прерывание. Затем ЦПУ выполняет контекстный переключатель, нажимая Слово состояния программы (PSW) и ПК на стек управления. CPU выполняет ISR. , тогда как пул - это процесс, когда компьютер ждет внешнего устройства, чтобы проверить его готовность. Компьютер не выполняет ничего, кроме проверки состояния устройства Опрос часто используется с аппаратурой низкого уровня Пример: при подключении принтера через порт Parrnell компьютер ждет, пока принтер не получит следующий символ. Этот процесс может быть таким же, как только чтение 1 Байт

-1

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

В режиме с прерыванием, когда данные передаются устройству ввода-вывода, генерируется прерывание, а ЦП проверяет приоритет этого входа для его обслуживания.