LINUX.ORG.RU

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


0

1

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

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

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

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

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

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

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

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