2013-12-15 4 views
0

Я знаю, что, когда системный вызов происходит, то программное прерывание генерируется. Это прерывание программного обеспечения заставляет режим процессора переключиться из режима пользователя в режим ядра. По моему мнению, во время переключения контекста аппаратного прерывания происходит из контекста пользователя (процесса), чтобы прервать контекст. Но делает ли то же самое и во время программного прерывания? Я также пробовал много документации, но я не мог вынести удовлетворительный ответ.Во время программного прерывания процессор переключается в контекст прерывания?

ответ

1

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

Обратите внимание, что большинство современных процессоров не реализуют системные вызовы, связанные с программными прерываниями, но с чем-то вроде SYSCALL.

0

В случае процессоров ARM и Linux ядра,

Во время управления прерыванием программного обеспечения переходит к процедуре, определенной в vector_swi http://lxr.free-electrons.com/source/arch/arm/kernel/entry-common.S.

346/* ========================================================================================================================================= ================================== 347 * SWI обработчик
348 * ------- -------------------------------------------------- -------------------- */
351 .align 5
352 ЗАПИСЬ (vector_swi)
353 #ifdef CONFIG_CPU_V7M
354 v7m_exception_entry
355 #else
35 6 югу зр, зр, #S_FRAME_SIZE
.
.
.
461 суб Л.Р., Л.Р., # 4
462 ул Л.Р., [SP, #S_PC]
463 б ret_fast_syscall
464 #endif
465 ENDPROC (vector_swi)

Текущий контекст выполнения хранится в стек того же процесса, который выполнил инструкцию swi. И система запускает выполнение описанной выше процедуры.

Смежные вопросы