본문 바로가기

전자, 전기, 프로그래밍

선점형(preemption), 비선점형(non-preemption) 스케쥴링


스케쥴링에서 대표적인 개념이다.

선점형/비선점형.

여러개의 프로세스가 동시에 돌아간다는 것은 실질적으로는 동시라기 보다는 시분할이라고 봐야한다.
(물론 최근의 듀얼 코어 같은 경우에는 다르다고 할수도 있지만, 여기서도 시분할 방식은 사용된다.)

선점형 하나의 프로세스가 다른 프로세스 대신에 프로세서(CPU)를 차지할수 있다는 뜻이다.

비선점형
하나의 프로세스가 끝나지 않으면 다른 프로세스는 CPU를 사용할 수 없다.

이게 언뜻 말을 들으면 상당히 혼란스러울수 있다.
우리말로 "선점"하면 왠지 "먼저 점령" 하고 있으니 다른 것이 들어올수 없을것 같다.
즉 "전투에서 승리하려면 저 고지를 선점해야해!!" 이런 뜻에서 처럼.

하지만 여기서는 "다른 프로세스(B)가 CPU를 사용하고 있는 프로세스(A) 대신 자신이 CPU를 점령 할수 있다."
라는 뜻으로 선점을 받아들여야 한다.

아마 Preemption 이라는 말의 번역때문에 선점이라는 말이 사용된 것 같다.

<네이버 사전>
preempt

1. 선매권에 의하여 획득하다
2. 《미》 <공유지를> 선매권을 얻기 위해 점유하다
3. 먼저 차지하다, 선취하다
4. <예상 되었던 사태를> (먼저 행동한 일에 따라) 회피하다
5.a 《문어》 대신하다

차라리 선점이라기 보다는 강점, 강탈 이런 말이 더 적당할 것이라고 생각한다.(어감은 좋지 않지만..)

대표적인 비선점형(다른 프로세스를 끝낼수 없는..) 스케쥴링은
FIFO : 대기 큐에 먼저 들어온 작업순으로 CPU를 할당
SJF(Shot Job First) : 소요시간이 짧은 작업순으로 할당
HRN : 우선순위와 대기 시간에 따라 작업을 할당

선점형(다른 프로세스를 종료시키고 다른 프로세스가 실행되는) 스케쥴링은
Round Robin 방식
   -시간 단위가 설정되어 각 시간동안 프로세스를 실행하고 시간이 지나면 다음 프로세스로 전환되게 된다. 
   전체적인 응답 속도가 빨라질수도 있으나, 시간 단위마다 프로세스를 전환할때 문맥 전환에 따른 오버헤드가 
   발생할 수 있기 때문에 적당한 시간 단위를 설정하여야 한다.

*참고로 Hard Real Time System(Dead Line을 넘기지 않고 작업이 수행되어야 하는 시스템 : ex)원전관리..)에서는
선점형 스케쥴링을 사용해야 한다.
(가장 중요하고 급한 프로세스가 먼저 실행될수 있도록..)