리눅스 커널 스케쥴링에서 정책과 선점/비선점의 관계에 대해 문의드립니다.
글쓴이: neo2014 / 작성시간: 월, 2023/05/08 - 2:59오후
리눅스 커널 공부하다가 헷갈리는게 있어서 문의드립니다.
스케쥴링 정책으로 SCHED_OTHER가 일반 프로세스의 스케쥴링정책이고 리얼타임으로 하고 싶으면 SCHED_FIFO로 설정을 하면 된다고 알고있었는데요
다음과 같은 내용을 보고 혼란이 생기고 있습니다.
"리눅스 커널은 선점형 기능을 제공하고 있으며 프로세스가 동작중에 인터럽트가 발생하면 해당 인터럽트핸들러가 수행된 이후에 선점스케쥴링이 수행된다." 라는 말을 책에서 봤는데요.
저는 선점 스케쥴링이 SCHED_FIFO로 설정한 프로세스일 경우에만 선점되는걸로 이해를 하고 있었는데 그게 아닌가요?
스케쥴링 정책(SCHED_OTHER이든 SCHED_FIFO)이 무엇이든 상관없이 인터럽트 수행 후 선점스케쥴링이 동작하는것인지요?
Forums:
보다 상세하게 답변을 하기 위해서는 전체 문맥을 봐야
보다 상세하게 답변을 하기 위해서는 전체 문맥을 봐야 하겠지만 (위 내용으로는 검색이 안되네요)
현대적 OS 및 커널은 모두 선점 스케줄링(preemptive scheduling)이 가능하다고 보셔야 합니다. 여기에서 선점은 커널이 원할 경우 (그 요구가 커널 자체로 나왔던 유저에게서 나왔던, 또는 인터럽트에서 나오던지) 현재 실행되고 있는 thread(실)를 끊고 다른 작업을 할 수 있다는 의미입니다. 당연히 리눅스 커널도 선점형입니다.
SCHED_FIFO 와 SCHED_OTHERS는 모두 선점형에 기반을 두고 있으며 단지 유저가 볼 때 쓰레드에 대한 접근성이 다르다는 차이만 있습니다. 기본적으로 인터럽트가 발생하면 커널이 반응하고 인터럽트 내용에 따른 처리가 선점적 (지금 당장 실행되든, 스케줄링 큐에 쌓아두고 나중에 실행되든) 스케줄링에 의해 이루어지게 됩니다.
댓글 달기