리눅스는 스케줄링에 소모되는 시간을 예측할 수 있게끔(O(1) 스케줄러). 선순위 레벨(0~139)을 표현하는 Active, Expired 비트맵 배열
두개를 가지고 있습니다.
고정된 크기의 비트맵 배열이므로 상수시간안에 스케줄링이 가능하고, 고정 시간 복잡도는 O(1)으로 표시된다네요. 뭐 여기까지는.. ㅎ
그런데 왜 레벨이 왜 0~139 일까 의문을 가지게 되겠죠.
이부분은 여기서 시작\됩니다. 두둥~ 일단 프로세스의 정보를 가지고 있는 task_struct 구조체의 policy 필드(스케줄링 정책)에서
SCHED_FIFO, SCHED_RR, SCHED_OTHERS정책이 있는데요.
앞 두개는 실시간 스케줄링 정책이며, 나머지 한개는 비실시간 정책입니다.
그럼 상식적으로 실시간 스케줄링이 더 중요하겠죠!! 아닌가?? ^^;; 그래서 task_struct 구조체의 rt_priority 필드를 사용하여
0~99까지의 우선순위를 가지고 CPU를 사용합니다. 또한 실시간 정책을 사용하는 테스크는 고정순위를 가지게 되어
항상 우선순위가 높은 테스크(실시간)가 낮은 테스크(비실시간)보다 먼저 수행되는걸 보장한다는 군요..
그럼 나머지 100~ 120은 어데??
이건 SCHED_OTHERS 비실시간 정책에서 사용합니다. 여기에서 우리가 저번시간에 공부한 우선순위 nice값 -20~19 사이의
동적 변경(-5~+5) 가능한 우선순위가 나오구요. 이값은 task_struct 구조체의 priority 필드에서 사용되죠..
음 rt_priority필드와 priority 필드라 헷갈리네요.. @..@
그런데 커널에서는 비실시간 테스크의 우선순위를 결정할때 너는 실시간 테스크보다 못났으니... +120 먹고 떨어져라 이런거죠..
비실시간 테스크(-20~19 + 120 => 100~139) 의 우선순위가 결정되는거죠...
짜잔~~ 이래서 0~139까지 140개짜리 비트맵이 작성되겠죠.. ㅎㅎ
'프로그래밍' 카테고리의 다른 글
[Thread] pthread_getschedparam() function (0) | 2011.10.10 |
---|---|
리눅스커널 - 프로세스 스케줄링 (0) | 2011.10.10 |
실시간 리눅스 (0) | 2011.10.10 |
[C] printf 다중매크로..... (0) | 2011.10.07 |
Reliable udp (0) | 2011.08.18 |