- Process Scheduling
- 프로세스 안에는 Code, Data, Heap, Stack이 있고, Excution state를 담당하는 PC counter, SP가 있다.
- 프로세스들는 서로 다른 Address space를 가지고 있고 하나의 컴퓨터에서 동시에 돌아갈 수 있다.
- 하나의 프로세서로 여러개의 프로세스를 돌리고 싶다면? Concurrent하게 해야한다. 이것을 Process Scheduling 이라고 한다.
- "어떻게 프로세스에게 CPU를 할당할 것인가?"
- Ready Queue에 있는 프로세스들 가운데 하나에게 CPU를 할당한다.
- Scheduler 를 통해 프로세스의 context를 바꿔가며 돌게한다.
- Process Scheduling 의 목적
- 적은 Processor로 많은 Process를 실행하자.
- CPU 이용률(utilization) 및 처리량(throughput)의 최대화
- 프로세스는 두 Burst를 번갈아가면서 실행한다.
- CPU Burst : CPU로 연산을 수행하는 시간
- I/O Burst : I/O 처리를 위해 기다리는 시간
- 프로세스 분류에 따른 CPU Burst의 특징
- CPU-Bounded Process
- 짧은 주기의 긴 CPU Burst
- 기다리는 시간이 짧고 CPU를 많이 사용한다.
- I/O-Bounded Process
- 긴 주기의 짧은 CPU Burst
- 기다리는 시간이 길고 CPU를 적게 사용한다.
- CPU-Bounded Process
- Context-Switch
- CPU가 A process에서 B process로 넘어갈 때 현재 프로세스 상태를 저장하고 다른 프로세스의 상태를 꺼내오는 것
- 현재 돌고있는 상태를 PCB에 저장하고 다른 프로세스의 상태를 PCB에서 가져오면서 Context Switching 한다.
- Ready Queue : 바로 다음에 돌릴 수 있는 프로세스를 관리한다.
- I/O Queue
프로세스 안에는 Code, Data, Heap, Stack이 있고
execution state를 나타내는 PC counter ,SP가 있다.
프로세스 각각 자신의 Address space를 가지게 되고 서로서로 다른 여러개의 프로세스가 하나의 컴퓨터에서 동시에 돌아갈 수 있다.
코어가 하나씩 프로세스를 담당하면 문제가 없다.
프로세스가 코어보다 많다면?
하나의 프로세서로 여러개의 프로세스를 동시에 실행시키고 싶다면?
Concurrent 하게 하면 된다.
이것을 프로세스 스케줄링이라고 한다.
운영체제는 Scheduler를 통해서
process의 context를 바꿔가면서
마치 컴퓨터에 여러개의 주소공간이 돌아가는 것처럼 illusion을 만드는 효과를 낸다.
Process scheduler 의 목적 : 적은 양의 Processor를 가지고 Process를 실행하자.
- 현재 어떤 프로세스들이 있는 지
- 다음에 어떤 프로세스를 실행해야 할 지
- 프로세스간에 어떻게 switch 하는 지
프로세스 스케쥴링의 목적은 CPU가 쉬지않고 일하게 하는게 뽀인트이다.
Process가 CPU burst와 I/O wait 하는 cycle을 반복하는데 이것을 반영한 scheduling이 중요하다.
CPU를 사용하는 시간 : CPU burst
I/O wait
CPU-bound process : CPU가 돌아가는 시간이 많은 프로세스
I/O-bound process : I/O가 많고 CPU가 돌아가는 시간이 적은 프로세스
4~5ms 정도 마다 프로세스를 바꿔준다.
타이머를 만들어 놓는데 정해진 시간이 지나고나면 interrupt가 발생하면 커널모드로 진입하고 운영체제에 제어권을 넘겨준다.
interrupt가 발생하면 현재 상태(process excution state)를 PCB에 적어놓고
P1 이 excute 된다.
process state : 현재 프로세스의 상태
process counter : 현재 실행을 어디까지 하고있는지
register : 현재 돌고있는 레지스터의 상태
이것들을 PCB에 저장해 놓는다.
CPU가 A process 에서 다른 프로세스로 넘어가야 할텐데, 넘어가려면 현재 프로세스의 실행상태를 저장해놓고 다른 프로세스의 상태를 꺼내와야한다. 이것을 Context-switch 라고 한다.
현재 돌고있는 프로세스 상태를 PCB에 저장해놓고, 다음 프로세스의 상태를 PCB에서 가져오면서 Context switch를 한다.
Context switching을 하면서 concurrent하게 프로세스를 돌린다.
우리가 운영체제 공부하다가 컴퓨터구조 공부하려는 시간 = Context-switch time
스케줄러가 컴퓨터에서 돌고있는 프로세스들을 효과적으로 관리하는 방식이 필요하다.
프로세스의 transition마다 스케줄러가 관여하고 스케줄러에 그 정보가 피드백이 되어야 하기 때문이다.
보통 Queue를 이용한다.
바로 다음에 돌릴 수 있는 프로세스를 관리하는 ready queue
ready queue 에서 스케줄러가 준비되어있는 프로세스를 Dispatch 해서 CPU로 돌리고
event나 어떤 것으로 인하여 빠져 나오면 다시 ready queue 로 돌아가거나 I/O queue로 가서 wait하거나 한다.
Queue들은 linked list 형태로 붙어있다.
'🚦 Server > Operating System' 카테고리의 다른 글
12. Process Scheduling (3) (0) | 2020.05.07 |
---|---|
11. Process Scheduling (2) (0) | 2020.05.05 |
pthread (0) | 2020.04.29 |
fork() 와 exec() (6) | 2020.04.28 |
09. Threads (3) (0) | 2020.04.27 |