시큐리티 대응팁2009/10/09 11:57


 리눅스에서 소프트웨어 적으로 real-time 시스템 비슷하게 프로세스를 운용할 수 있는 방법이 있습니다. 일반적인 nice 유틸리티로는 SCHED_OTHER 라는 정책의 범위에서 10부터 -20까지 우선순위를 정할 수 있는데요, 커널 2.6 이후부터 탑재된 sched_ 계열의 함수를 사용해서 SCHED_RR, SCHED_FIFO 라는 리얼타임 수준의 프로세스 운영을 할 수 가 있습니다.

굳이 따지자면,

-----------------
SCHED_FIFO
-----------------
SCHED_RR
-----------------
SCHED_OTHER
-----------------

이런 식의 그림이 되겠습니다. 우선순위는 위가 높고 아래가 낮음... 간단한 설명은 아래...

SCHED_OTHER
priority -20 ~ 10 시분할 방식, 보통의 프로세스와 쓰레드가 가지는 정책입니다.

SCHED_FIFO
리얼타임을 위한 정책이고 priority 는 1~ 99까지 프리엠프티브(높은 우선권가지 프로세스가 cpu선점)
block, yield, terminate 되기전까지는 계속 실행이 되는 정책입니다.

SCHED_RR
역시 리얼타임을 위한 정책이고, priority 는 1~99까지.
특이한점은 동일한 우선순위를 가진 SCHED_RR그룹의 프로세스와 시분할을 사용하고 그 나머지는 SCHED_FIFO와 동일하게 움직입니다.

아래 간단한 sched_ 계열 함수 사용법과 소스를 첨부합니다. 유용하게 사용하세요.



 

 

그림설명: victim 계정의 top 프로세스에 RT 딱지가 붙어 있는 것을 보실 수 있습니다.

 

 

개념에 대해서는 "/linux.x.x.x/include/linux/sched.h" 에 대한 설명을 아랫 분이 잘 해 놓으셨네요.

http://vincenthanna.springnote.com/pages/534384

sche_함수에 대한 리눅스 맨페이지 매뉴얼

http://linux.die.net/man/2/sched_setscheduler

Posted by 진실찾기