본문 바로가기

운영체제/프로세스(process)

운영체제 - 프로세스 스케쥴링(process scheduling)

운영체제 - 프로세스 스케쥴링(process scheduling)


프로세스 스케쥴링(process scheduling)이란?

- 여러가지 프로세스가 CPU를 공평하게 공유하도록 하는 운영체제의 역할.


Running 상태인 프로세스가 종료되거나 interrupt에 의해 Ready상태로 전이하거나 I/O operation을 호출하여 Waiting 상태로 전이하게되어 Ready Queue에 존재하는 process들에서 Running 상태로 전이시킬 한 개의 process를 선택하는 것.


프로세스 스케쥴링은 크게 1) Policy, 2) Mechanism 으로 나눌 수 있다.

1. Policy : 다음에 수행될 프로세서를 선택하는 기준(=scheduling policy)

2. Mechanism : CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 방법(=dispatcher)


dispatcher는 어떻게 구현하는 것일까?

- process에서 다른 process로 실행이 넘어가는 것인데, dispatcher도 결국 process이다. 어떻게하면 실행중이던 process가 실행 흐름을 dispatcher로 넘겨줄 수 있을까?



- dispatcher는 kernel 함수인데 kernel 함수를 부르려면 모드 체인지(=mode change)가 일어나야 한다.


* 운영체제는 collection of function이다.( system call + ISR )

- 프로세스가 하드웨어 자원(I/O device)에 접근하기 위해 호출하는 함수, System call

- Interrupt가 발생했을 때 IRQ(interrupt request number)에 따른 ISR(interrupt service routine).


Running상태의 프로세스에서 H/W Interrupt가 발생하면 kernel mode로 변경되므로 이 때 dispatcher가 실행되어 process 상태정보를 저장할 수 있다. 또한, I/O operation을 호출하는 경우에도 S/W interrupt로 kernel mode로 변경되므로 dispatcher에 의해 process 상태정보를 저장할 수 있다.


process scheduling 방식은 크게 두가지로 나뉜다

1. non-preemptive scheduling

- 프로세스가 자발적으로 CPU를 양보하여 다른 프로세스를 수행하는 스케쥴링

- S/W interrupt(=trap)을 발생시켜 dispatcher 수행


2. preemptive scheduling

- 운영체제가 강제로 프로세스로부터 CPU를 빼앗아 다른 프로세스를 수행하는 스케쥴링

- 주로 Timer를 사용한 timer interrupt에 의해 dispatcher를 수행.



process의 구성요소

1) "state" = context

    • memory context
    • hardware context
    • kernel context(include PCB)
2) Thread of control
    • stack
- thread of control을 stack이 나타내므로 stack을 모니터링 함으로써 process의 상황을 알 수 있다.

user mode -> kernel mode로 모드는 변경되지만 실행중인 process는 변하지 않는 경우가 있다.

process가 system call을 호출하게 되면 process id는 변화하지 않는다.(= process state transition이 일어나지 않음)


+ user mode에선 user mode stack을 사용하고 kernel mode에선 kernel mode stack을 사용한다.


system call vs. function call

공통점 : process id를 변화시키지 않는다.

차이점 : system call은 mode change를 요구한다.