Может кто-нибудь помочь мне с некоторыми понятиями операционной системы, которые я не могу понять - прерывания - PullRequest
2 голосов
/ 04 декабря 2010

Извините, я не был уверен, подходит ли это место для этого, но я надеюсь, что это приемлемо, извините, если это не так!:)

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

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

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

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

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

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

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

Ответы [ 2 ]

3 голосов
/ 04 декабря 2010

Большая часть работы с прерываниями заключается в том, чтобы разрешить прерывание ЦП другими устройствами (например, сетевой картой, которая получила пакет).Я считаю, что сначала легче понять этот вариант использования.

Когда сетевой карте необходимо сообщить процессору, что он получил некоторые данные, она отправляет число на «контакт прерывания» на процессоре.Обычно это 8-битное число.Число называется «уровнем прерывания».

Процессор построен таким образом, чтобы он мог перейти к некоторому коду для обработки прерывания и затем вернуться к тому, что он делал.Это встроенное оборудование, поэтому оно должно быть простым: есть таблица, которая сопоставляет каждый уровень прерывания с адресом вызываемой функции.Эта функция называется «Процедура обработки прерывания».Как вы говорите, расположение этой таблицы стандартизировано, поскольку именно аппаратное обеспечение ищет в таблице (поэтому ее адрес жестко задан в микросхеме).

Обслуживание прерывания означает только выполнение фрагмента кода.это связано с прерыванием: в случае сетевой карты это означало бы считывание пакета с сетевой карты и копирование его в память (предположительно, память на самой сетевой карте ограничена).Вы спрашиваете о том, «идентификатор уровня прерывания, полученный как часть цикла прерывания, используется в качестве индекса в векторе прерывания».Это просто еще один способ сказать, что мы только что сделали: сигнал с карты (уровень прерывания) используется ЦП в качестве индекса в таблице («вектор прерывания»).Там он находит адрес кода для запуска;этот код был помещен туда драйвером устройства для вашей сетевой карты (или, возможно, ОС).

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

Такую же концепцию прерываний можно использовать и для «программных прерываний», где вместо сигнала, поступающего извне ЦП, он поступает изнутри.

0 голосов
/ 04 декабря 2010

Ну, конечно, в вашем вопросе много вопросов.Позвольте мне обратиться к одному из них.

Говорят, что прерывание является сервом, ОХ ВЕРНУТЬСЯ, Я ДОЛЖЕН ВЫПУСКАТЬ СОБАКУ.

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

Я «обслужил» запрос прерывания собаки.

...