Как создать таблицу прерываний - PullRequest
2 голосов
/ 28 февраля 2011

У меня есть домашнее задание для класса «Операционные системы», где мне нужно написать таблицу прерываний для симулируемой ОС. У меня уже есть, из предыдущего назначения, все соответствующие драйверы настроены:

Насколько я понимаю, у меня должен быть массив типов прерываний вдоль строк interrupt_table[x], где x = 0 для прерывания, x = 1 для прерывания тактового сигнала и т. Д. должны содержать указатели на соответствующие обработчики для каждого типа прерывания, которое затем должно вызывать соответствующий драйвер? Я правильно понимаю? Может ли кто-нибудь указать мне правильное направление для создания этих обработчиков?

Спасибо за помощь.

Ответы [ 3 ]

2 голосов
/ 28 февраля 2011

Большинство подробностей об обработчиках прерываний зависит от ОС. Единственное, что близко к универсальному - это то, что вы, как правило, хотите делать как можно меньше в самом обработчике прерываний. Как правило, вы просто подтверждаете прерывание, записываете достаточно информации о входе, чтобы иметь возможность обработать его, когда будете готовы, и возвращаетесь. Все остальное делается отдельно.

1 голос
/ 28 февраля 2011

Ваше понимание звучит довольно хорошо.

Насколько смоделирована эта симулированная ОС? Если он работает полностью на «машине» собственного дизайна вашего профессора, то, несомненно, она дала некоторые спецификации о том, какие прерывания предоставляются, как проверять наличие прерываний, которые могут , и какие виды задач обрабатывают обработчики прерываний. должен сделать.

Если это полноценный компьютер x86 или что-то подобное, возможно, Linux arch / x86 / pci / irq.c может дать вам советы.

0 голосов
/ 28 февраля 2011

То, что вы делаете при получении прерывания, зависит от конкретного прерывания. Правило большого пальца состоит в том, чтобы выяснить, что является критически важным для конкретного прерывания, а затем выполнить «просто» (не более и не менее) и выйти из обработчика как можно скорее. Кроме того, обработчики прерываний - это лишь малая часть вашего драйвера (именно так вы должны проектировать). Например, если вы получаете прерывание для входящего байта на некотором последовательном порту, то вы просто читаете байт из регистра и помещаете его в некоторую переменную «volatile», заводите все и выходите из обработчика. Остальное (например, что вы будете делать с входящим байтом на последовательном порту) может быть обработано в коде драйвера.

Правило большого пальца остается: «не больше, не меньше»

...