[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 483: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 112: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/bbcode.php on line 112: preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4688: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3823)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4690: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3823)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4691: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3823)
[phpBB Debug] PHP Warning: in file [ROOT]/includes/functions.php on line 4692: Cannot modify header information - headers already sent by (output started at [ROOT]/includes/functions.php:3823)
l4os.ru • Просмотр темы - Прерывания L4

Прерывания L4

Модераторы: alman, Samuray

Re: Обработка прерываний

Сообщение alman » 05 апр 2012, 00:29

alman
 
Сообщения: 64
Зарегистрирован: 27 май 2010, 12:15

Re: Прерывания L4

Сообщение alman » 06 апр 2012, 12:54

Вы правильно описали работу прерываний в L4. Какое устройство Вас интересует? Многие устройства, чтобы они генерировали прерывания, неообходимо настроить.
alman
 
Сообщения: 64
Зарегистрирован: 27 май 2010, 12:15

Re: Прерывания L4

Сообщение alman » 03 май 2012, 14:18

alman
 
Сообщения: 64
Зарегистрирован: 27 май 2010, 12:15

Re: Прерывания L4

Сообщение alman » 05 май 2012, 01:21

Такой подход возможен. В принципе, спецификация L4-X2 вообще может быть реализована на уровне железа, как блок микропроцессора.

Я бы не стал сильно волноваться о приоритете прерываний. Обычно устройства, способные генерировать прерывания, не генерируют повторное до получения подтверждения. То есть контроллером прерываний управляет микроядро, а самим устройством - драйвер. Например, современные сетевые PCI карты принятимают пакеты непосредственно в оперативную память. После принятия первого пакета генерируется прерывание, но карта продолжает "складывать" новые пакеты в оперативную память. Драйвер, при получении прерывания от сетевой карты, анализирует регистры сетевой карты и на их основе находит принятые пакеты, которые передаёт сообщениями в сетевой сервис. Затем драйвер в регистрах сетевой карты помечает освобидившиеся буфера и сбрасывает флаг прерывания. При получении новых данных операция повторяется.

Интересный момент возникает когда по какой-то причине драйвер не освобождает приёмные буфера, а сетевая карта продолжает принимать данные. В этом случае также генерируется прерывания, но уже по причине переполнения буфера приёмника.

Почти любое устройство имеет регистр статуса прерывания, в котором находится причина прерывания. Каждый тип прерывания помечается отдельным битом. Следующие прерывания такого типа не будет возникать до сбороса его бита. Приорет обработки событий, вызвавших прерывания, определяет драйвер устройства.

Кстати, можно уточнить, что Вы называете ядром? Микроядро?

"Узкое место" место современных x86 процессоров - переключение адресных пространств. Эта операция связана с обновлением таблицы страниц. Т.е. если ядро и драйвера работают в одном адресном пространстве, то по производительности такая система не должна отставать от монолитных ядер.

Не следует упускать из виду ещё один уровень приоритетов - приореты потоков обработчиков прерываний. Если какое-либо устройство требует привелегированной обработки прерываний, дайте высший приоритет потоку обработчику прерываний в драйвере этого устройства. В этом случае разница между обработкой в ISR и передачей сигналов о прерываниях через IPC - считанные такты.

Наконец, возможность держать драйвера в отдельных адресных пространствах ценой некоторой потери производительности. Обычно ошибка в драйвере "роняет" всю систему. В случае микроядерных решений, пользовательская программа может работать как драйвер. Ошибка в таком драйвере не порушит систему и даже может быть обработана.

Что касается лишних tcb, то, вероятно, здесь есть какой-то потенциал для оптимизации. Я так глубоко не копал.
alman
 
Сообщения: 64
Зарегистрирован: 27 май 2010, 12:15

След.

Вернуться в Прочие вопросы и обсуждения



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

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

cron