Временные прерывания всегда сопровождаются вызовом планировщика?

Когда произошло прерывание таймера, ISR вызывается для обслуживания прерывания.

Можно ли предположить, что каждое прерывание таймера заканчивается вызовом планировщика, по которому процесс должен продолжать работать дальше?

Может ли это быть обобщено и сказать, что каждое прерывание должно заканчиваться вызовом планировщика?

    One Solution collect form web for “Временные прерывания всегда сопровождаются вызовом планировщика?”

    Таймер ISR не вызывает schedule() напрямую. Он заканчивает вызов update_process_times() поэтому учетная информация процесса планировщика обновляется.

    Планировщик в конечном итоге вызывается при возврате в пользовательское пространство. Если ядро ​​является превентивным, оно также вызывается при возврате из прерывания таймера в kernelspace.

    В качестве примера представьте процесс A, который выдает системный вызов, который прерывается прерыванием, вызванным устройством, которое прерывается прерыванием таймера:

        процесс Пользовательское пространство → процесс Ядровое пространство → устройство ISR → таймер ISR
                         таймер IRQ таймер IRQ
    

    Когда таймер ISR заканчивается, он возвращается к другому ISR, который затем возвращается в ядерное пространство, которое затем возвращается в пользовательское пространство. Упреждающее ядро ​​проверяет, нужно ли перенести процессы при каждом возврате. Ядро без приоритета проверяет только при возврате в пользовательское пространство.

    В суше ARM кодировка идет широко, как:

    • IRQ, полученный в то время как в пользовательском пространстве заканчивается вызовом __irq_usr , в то время как IRQ, полученный в режиме SVC, заканчивается вызовом __irq_svc . IRQ не должны приниматься в других режимах процессора.
    • В __irq_svc после обработки IRQ, если ядро ​​является превентивным , preemption не отключается, и требуется перепланирование, ядро ​​переходит к svc_preempt , которое вызывает preempt_schedule_irq , которое вызывает schedule . В противном случае перепланирование не выполняется.
    • В конце концов, CPU вернется в пользовательское пространство, либо из обработчика IRQ ( __irq_usrret_to_user_from_irq ), либо из syscall ( vector_swiret_fast_syscall ). Там ядро ​​проверяет, должна ли выполняться работа, и если требуется перепланирование, вызывается schedule .
    Linux и Unix - лучшая ОС в мире.