커널(스케줄러)는 어떤 자원을 사용해서 태스크들을 스케줄링 할까요?

chounlang의 이미지

커널에 대해 궁금한점이 있어서 올려봅니다.

커널 : Micro/C OS-II
스케줄링 : Priority 기반

커널의 스케줄러도 하나의 함수 형태로 구현되어 있는데 이 스케줄러가

태스크들에게 CPU(자원)을 사용하도록 스케줄링 시키고 Running 시킨다고 했을때

이 스케줄러는 어떤 자원을 사용해서 스케줄링을하는지 궁금합니다. 그리고 같은 CPU를 사용한다면

Clock이나 시간에 의존할것 같은데 스케줄러 및 기타 커널은 자원을 어떤 방법으로 쪼개서 사용하는지

알려주시면 고맙겠습니다.

sblade의 이미지

priority-based preemptive kernel 일것 같은데 어떤 자원을 사용해서 스케쥴링을 한다는게 무슨 뜻이죠?

보통 이런 시스템에서는, 각각의 task (thread) 는 priority 를 가지고, 가장 높은 priority를 가진 task 가 cpu 를 독점합니다. 즉 자원을 "쪼개서" 사용하는게 아니라 높은 priority 의 task 가 자원을 사용하게 됩니다.

만약 task 1 의 priority 가 10 이고 10 ms 마다 실행되도록 설정되어 있고, 한 주기당 일을 하는데 5ms 가 걸리고,
task2 의 priority 가 5 이고 20 ms 마다 실행되도록 설정되어 있고 한 주기당 일을 하는데 15ms 가 걸린다면

먼저 task 1이 5ms 동안 cpu 를 차지하고,
5-10 ms 동안 task 2 가 cpu 를 차지하고,
10-15 ms 동안 task1 이 cpu 를 차지하고
15-20 ms 동안 task 2 가 cpu 를 차지합니다.

(여기서 0-20 ms 동안 task 2 는 일을 끝마치지 못합니다 (15ms 동안 일을 해야 되는데 10ms 밖에 못하니까요) 이런 경우를 deadline miss 라고 합니다.)

그리고 real-time scheduler 들은 이렇게 시간을 재는데 high-resolution timer 를 이용합니다.

snowall의 이미지

음... 그보다, 이 질문의 의도는 스케줄러도 하나의 태스크(프로세스? 함수?)인데 스케줄러 자체가 사용하는 자원은 어떻게 배정되는가, 어떤 자원인가, 그런 질문인것 같습니다.

피할 수 있을때 즐겨라! http://melotopia.net/b

chounlang의 이미지

그런 의도였는데 제가 글을 잘 못써서.^^하하;;

chounlang의 이미지

제가 글을 잘못써서 다르게 이해하신것 같아요. 다시 한번 여쭤볼께요.

예를들어 Task1, Task2, Task3이 있고 선점형 우선순위 기반의 Real Time Kernel이 스케줄링을 한다고 가정했을때.

시퀀스 다이어그램으로 표현하면 시작 - Task1 - Task2 - Task3 ..이런식으로 라인을 두고 화살표가 왔다갔다 하게 되는데

커널의 스케줄러가 작동할때 보통 CPU를 2~5% 정도 사용한다는데, 이런 작은 시간을 시퀀스 다이어그램으로 나타내려는것은 무모한 짓을까요? 아니면 가능할까요?

lmk378의 이미지

chounlang님 "자원 = cpu" 라고 쓰신거죠?^^;;
선점형 스케줄링이라 가정했을때
태스크에게 특정 퀀텀값을 지정해주고 이많큼의 시간이 지나면
스케줄링이 동작하게 되겠지요~
그렇다면 스케줄링 코드는 타이머 인터럽트 헨들러에 들어가 있을겁니다.(아마두요~예전 교육용 OS에서 봤던 기억이 있네요)
스케줄링 자체를 하나의 태스크로 생각하면 안됩니다. 그냥 커널의 일부일 뿐입니다.