이번에는 커널 모드에서 인터럽트가 발생했을때 스케줄링(Preemption)하는 동작을 살펴봅니다. 커널 모드에서 커널 프로세스가 실행 중 인터럽트가 발생하면 __irq_svc 이란 인터럽트 벡터로 PC를 바꿉니다.__irq_svc 코드를 봅시다.[https://elixir.bootlin.com/linux/v4.14.49/source/arch/arm/kernel/entry-armv.S]1 __irq_svc:2 svc_entry3 irq_handler45 #ifdef CONFIG_PREEMPT6 ldr r8, [tsk, #TI_PREEMPT] @ get preempt count7 ldr r0, [tsk, #TI_FLAGS] @ get flags8 teq r8, #0 @ if preempt count
Continue reading ...