Я знаю, что, когда системный вызов происходит, то программное прерывание генерируется. Это прерывание программного обеспечения заставляет режим процессора переключиться из режима пользователя в режим ядра. По моему мнению, во время переключения контекста аппаратного прерывания происходит из контекста пользователя (процесса), чтобы прервать контекст. Но делает ли то же самое и во время программного прерывания? Я также пробовал много документации, но я не мог вынести удовлетворительный ответ.Во время программного прерывания процессор переключается в контекст прерывания?
ответ
Обработчик прерываний системного вызова выполняется в контексте прерывания, так же как и любой другой обработчик прерывания, но он просто переходит в код ядра, а затем сразу же покидает контекст прерывания.
Обратите внимание, что большинство современных процессоров не реализуют системные вызовы, связанные с программными прерываниями, но с чем-то вроде SYSCALL.
В случае процессоров 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. И система запускает выполнение описанной выше процедуры.
- 1. Оболочка прерывания во время работы
- 2. для Windows прерывания Контекст
- 3. Переконфигурировать таймер во время прерывания прерывания таймера 8051
- 4. Время прерывания работы DMA
- 5. Прерывания отключены во время обработки прерываний
- 6. Предотвращение прерывания работы лазури во время обработки
- 7. Выполнение функции прерывания от прерывания
- 8. Программные прерывания в C?
- 9. Где вернуться с прерывания
- 10. Параллельные прерывания в ARM
- 11. Приоритет прерывания в ARM
- 12. Использование прерывания Inter Processor
- 13. вызов вектора прерывания внутри другого вектора прерывания
- 14. Bash не улавливать прерывания во время Rsync/подоболочка EXEC заявления
- 15. Прерывания драйвера LAN
- 16. Vagrant переходит в состояние прерывания во время обновления apt-get
- 17. может прерываться таймер прерывания?
- 18. Прерывания AVAudioSession
- 19. Parallel.Invoke vs Задача, почему время прерывания разное?
- 20. TelosB GPIO прерывания в Contiki
- 21. Задержка прерывания в Linux
- 22. C Ядро - прерывания не работают во время циклов
- 23. Распределенные прерывания
- 24. Предотвращение прерывания программы во время выполнения блоков выполняется бесконечно?
- 25. Прекращение прерывания
- 26. Почему все прерывания должны быть отключены во время операций семафора?
- 27. Переменная C++, измененная во время сбрасывания прерываний после прерывания
- 28. MPLAB прерывания в ассемблере
- 29. В то время как условие прерывания цикла
- 30. Запросить учетные данные во время HttpURLConnection без прерывания потока