LINUX.ORG.RU

Синхронизация в ядре


0

1

Должны ли быть реентерабельными: а - обработчик системного вызова в драйвере, б - обработчик прерывания в драйвере, в случае: 1 - SMP системы (возбуждение обрабатываемого прерывания блокируется до конца его обработки только на локальном APIC или все же на глобальном APIC контроллере?), 2 - при наличии вытеснения в ядре (обработчик системного вызова может быть прерван прерыванием от аппаратуры по окончании которого может произойти переключение процессов планировщиком, т. е. реентерабельность нужна и в отсутствие SMP?)

а - да, если smp или включено вытеснение

б.1 - обработка прерывания происходит после захвата спинлока, так что этот же обработчик не будет вызван ни каком другом процессоре одновременно, другие прерывания могут обрабатываться, за подробностями таки в do_irq() надо смотреть

б.2 - да, только термин «вытеснение» значит, что тебя может вытеснить другой процесс, а не обработчик прерывания, прерывания и раньше (до появления вытеснения в ядре) могли прервать процесс и с ними нужна была синхронизация

Посмотри ldd ch.5 и пойми, что такое вытеснение.

frey ★★
()
Ответ на: комментарий от frey

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

mskmsk1985
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.