OSDev

для всех
Текущее время: 01 май 2024, 17:38

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2, 3  След.
Автор Сообщение
 Заголовок сообщения: Работа с прерываниями
СообщениеДобавлено: 27 дек 2010, 23:01 

Зарегистрирован: 22 окт 2010, 13:22
Сообщения: 92
Откуда: Ртищево
Всем доброго вечера!

Ещё не работал с прерываниями, но уже пора бы. Прерывания нумеруются от 0 до 255 (всего 256 штук). Таблица векторов прерываний должна храниться в регистре IDR. Это всё понятно. Вот сами прерывания:

Изображение

Решил я сегодня почитать про клавиатуру. И оказалось что она может попросить процессор уделить ей немного времени (причём по приоритету не на последнем месте):

Изображение

И тут я не понял! Там прерывания, тут прерывания - объясните. Этот нижний список ничем не совпадает с верхним. Какое же тогда прерывание получает процессор от клавиатуры? Что за

_________________
Изучаю процессор...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с прерываниями
СообщениеДобавлено: 27 дек 2010, 23:56 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
1. Таблица прерываний хранится не в регистре, а в памяти, в регистре хранится указатель на неё.

2. Клавиатура -- второй по важности источник запросов аппаратных прерываний, а отнюдь не один из последних; важнее её только таймер.

3. С прерываниями на ПК полный бардак, поскольку первый IBM PC (как, впрочем, и последующие модели -- PC/XT, PC/AT) проектировали полные кретины, а в дальнейшем все допущенные ими глупости приходилось повторять для сохранения совместимости. В данном случае эти горе-инженеры, создавая БИОС, инициализировали в нём контроллер прерываний таким образом, что векторы аппаратных прерываний (физические линии запросов прерываний IRQ0--IRQ15; они не имеют никакого отношения к программным прерываниям, поскольку поступают не на процессор, а на контроллер прерываний) совпадали с векторами программных прерываний, часть которых уже тогда была зарезервирована фирмой Интел. Поэтому одним из первейших дел любой сколько-нибудь вменяемой ОС является перепрограммирование контроллера прерываний, чтобы используемые им вектора не совпадали с зарезервированными (0-31).

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с прерываниями
СообщениеДобавлено: 28 дек 2010, 12:20 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Цитата:
И тут я не понял! Там прерывания, тут прерывания - объясните. Этот нижний список ничем не совпадает с верхним. Какое же тогда прерывание получает процессор от клавиатуры? Что за
Читаем книжки, в них все написано.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с прерываниями
СообщениеДобавлено: 21 мар 2011, 19:56 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
Хочу на несколько разных прерываний натравить ОДИН обработчик типа "task gate". Может ли задача-обработчик прерываний определить, какое именно прерывание вызвало переключение задачи?

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с прерываниями
СообщениеДобавлено: 21 мар 2011, 23:33 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Может, но лучше для каждого прерывания сделать специфичный вводный код. Например:
Код:
  push ID
  jmp common_handler


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с прерываниями
СообщениеДобавлено: 22 мар 2011, 00:13 
Аватара пользователя

Зарегистрирован: 14 мар 2011, 12:31
Сообщения: 970
Откуда: Дагоба
А КАК это можно сделать?
Лучше или хуже, – это уже вопрос философский. Правда, если накладные расходы на определение очень велики, то из философского он, конечно, перейдёт в практическую сферу.

_________________
Yet Other Developer of Architecture.
The mistery of Yoda’s speech uncovered is:
Just an old Forth programmer Yoda was.

<<< OS Boot Tools. >>>


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с прерываниями
СообщениеДобавлено: 22 мар 2011, 01:45 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Это зависит от используемого контроллера прерываний (PIC/APIC). Например, в логике PIC есть регистр ISR, который хранит двоичный набор, определяющий, какие прерывания обрабатываются в данный момент.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с прерываниями
СообщениеДобавлено: 22 мар 2011, 11:29 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
А обработчики-задачи лучше вообще не использовать. Больше геморроя, да и в64-разрядной системе аппаратной многозадачности уже нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с прерываниями
СообщениеДобавлено: 22 мар 2011, 18:28 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Согласен, для прерываний этого делать не нужно (может, только для NMI). Но для некоторых исключений на IA32 альтернативы этому нету.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Работа с прерываниями
СообщениеДобавлено: 22 мар 2011, 18:53 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Почему ж нету? Обычные шлюзы прерываний и ловушек. Другое дело, что в 32-разрядном режиме без обработчика-задачи невозможна корректная обработка исключения, если оно вызвано кривым стеком системы, поскольку попытка использования кривого стека автоматом вызывает новое исключение. В конечном итоге будет зафиксирована тройная (или двойная? на разных архитектурах по-разному) ошибка и произойдёт аппаратный сброс процессора. Но, если отбросить этот случай, обработчики-задачи не являются необходимыми. Ну а в 64-разрядном режиме, как уже говорил, их в принципе быть не может.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 30 ]  На страницу 1, 2, 3  След.

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB