_TIF_WORK_MASK

Category
아이템: 
포스트 갯수1

[라즈베리파이] 프로세스 - 스케줄링(Preemption): 유저 공간 실행 중 인터럽트 발생

By Guillermo Austin Kim | 2018년 9월 16일 | 
이번에는 인터럽트가 발생했을때 스케줄링(Preemption)하는 동작을 살펴봅니다. 우리는 그 동안 schedule() 함수를 호출했을때만 스케줄링이 실행하는지 알고 있습니다. 그것은 맞는 말입니다.그런데, 인터럽트가 발생했을때 스케줄링이 실행된다는 사실은 잘 모릅니다. 이 사실을 알면 많은 레이스 컨디션 발생 원인을 알 수 있습니다. 이제부터 __irq_usr이란 인터럽트 벡터부터 __schedule() 함수가 실행하는 코드 흐름을 알아보겠습니다. 유저 공간에서 프로세스 실행 도중 인터럽트가 발생하면 인터럽트 벡터로 __irq_usr이란 레이블을 실행합니다.먼저 __irq_usr 코드를 보겠습니다. 인터럽트 처리가 아키텍처에 의존적이니 어셈블리 코드로 구현됐습니다.[https://elixir.boo