프로그래밍

스케줄링

지니아부지 2011. 10. 10. 20:47
http://www.iamroot.org/xe/index.php?mid=Kernel_8_ARM_H&page=9&document_srl=41567


리눅스는 스케줄링에 소모되는 시간을 예측할 수 있게끔(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