OSDev

для всех
Текущее время: 09 май 2024, 20:20

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




Начать новую тему Ответить на тему  [ Сообщений: 27 ]  На страницу Пред.  1, 2, 3
Автор Сообщение
СообщениеДобавлено: 23 июл 2010, 09:18 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Можно опрашивать регистры контроллера прерываний и по ним выяснить, какие прерывания находятся с его точки зрения в обработке (для которых не были выданы команды "конец прерывания"). Поскольку прерывания обрабатываются в соответствии с приоритетами, самое приоритетное из обрабатываемых и будет тем, что произошло последним. Так что реализовать программное определение номера линии IRQ возможно. Другое дело, что особого смысла в этом лично я не вижу.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2010, 14:09 

Зарегистрирован: 16 фев 2010, 22:03
Сообщения: 101
У меня микроядро. Серверы могут попросить ядро при приходе определённого прерывания послать им сообщение. Все пользовательские обработчики у меня в списке. Там указан номер, нить сервера и какое сообщение посылать. Вот для этого мне и надо определять номер IRQ.
Узнать номер прерывания как я понимаю можно из регистров ISR Local APIC.
UPD: Вот что получилось:
Код:
        mov eax, [local_apic_registers + 0x100 + (IRQ_BASE shr 5) * 16]
        mov rcx, 24
        xor rbx, rbx
@@:
        bt eax, ebx
        jc @f
        inc ebx
        loop @b
        jmp .exit ; Это не IRQ прерывание, а не понятно что
@@:               
       ; Теперь в RBX у нас номер IRQ

Может быть кому-нибудь пригодится. Если можно сделать что-то оптимальнее, то можете мне подсказать.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 23 июл 2010, 21:00 

Зарегистрирован: 10 май 2007, 11:33
Сообщения: 1206
Пусть каждый первичный обработчик передает свой номер. Это будет эффективнее, чем каждый раз определять номер прерывания. Для оптимизации можешь размножать обработчики из одного прототипа походу пропатчивая их или сделать их по шаблону: сохранить номер прерывания/передать управление на обобщенный обработчик.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 июл 2010, 00:08 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
KIV писал(а):
Увы. Таймер CMOS не заработал.

Опять же проверь, это не работает только в Bochs, или вообще везде. И в конце обработчика прерывания так же должна быть отправка сигнала EOI. У меня работает в качестве основного генератора, и в Bochs работает.

По поводу универсальной обработки стандартного таймера. Можно не маскировать IRQ0 в IO-APIC, а должны быть замаскированы сами PIC1 и PIC2. В итоге, прерывания будут поступать всегда: либо через IRQ0, либо через IRQ2.

KIV писал(а):
P. S. У меня возник ещё маленький вопросик: можно ли поставить на почти все IRQ один и тот же обработчик, а потом в обработчике получить номер IRQ откуда-нибудь?

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


Последний раз редактировалось Himik 24 июл 2010, 02:15, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 июл 2010, 01:35 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
chizh писал(а):
И в конце обработчика прерывания так же должна быть отправка сигнала EOF


EOI ;)


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 июл 2010, 12:34 

Зарегистрирован: 16 фев 2010, 22:03
Сообщения: 101
Ну ладно. С помощью препроцессора размножу обработчики, которые запихнут в стек RAX, затем присвоят ему номер IRQ и прыгнут на главную часть обработчика. Тот вариант, что сейчас своеобразная оптимизация по размеру. Если я сделаю отдельные обработчики - будет по скорости.


Вернуться к началу
 Профиль  
 
СообщениеДобавлено: 24 июл 2010, 13:57 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Учитывая объёмы памяти, оптимизация по скорости важнее. Тем более что чтение регистров контроллеров иногда выполняется _чрезвычайно_ медленно (сотни тактов процессора).


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

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


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

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


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

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