2023. 5. 23. 12:01ㆍ공부/OS
다음은 다섯 개의 state가 존재하는 프로세스의 상태도이다.

CPU가 하나 당 프로세스는 하나만 실행할 수 있다. 동시에 여러 개를 실행할 수는 없다.
그러나 단일 CPU이어도 여러 프로그램을 실행할 수 있다.
여러 프로세스가 돌아갈 때 한 프로세스가 끝날 때까지 기다렸다가 다음 프로세스가 실행된다면 많은 시간이 걸릴 뿐더러 동시에 여러 프로세스를 실행한다고 보기 어려울 것이다.
그래서 CPU가 이 프로세스들에게 일정 시간(time quantum)을 부여한 다음 그 시간을 다 사용한다면 잠시 멈췄다가 그 다음 프로세스에게 일정 시간(time quantum)을 부여한다.
이를 담당하는 것이 CPU 스케줄러이고 이렇게 프로세스를 관리하는 과정을 cpu 스케줄링이라고 한다.
이러한 과정이 진행될 때 프로세스의 state를 5개로 나눈 모습이 위 프로세스 상태도이다.
- New : 프로세스가 새롭게 생성된 상태이다. 이는 곧 Ready queue에 들어가게 된다.
- Ready : 프로세스가 cpu로부터 시간을 할당받기를 기다리고 있다.
- Run : 프로세스가 cpu로부터 시간을 할당받아서 작업 중이다.
- Wait : 프로세스가 실행 도중 IO 작업을 만나면 Wait 상태가 된다.
- Exit : 프로세스가 종료된 상태이다.
조금 더 자세히 상태 변화 과정을 살펴보자면 우선 첫 번째로 프로세스가 생성되면 New 상태이다.
New 상태에서 Ready queue에 들어가게 되면 Ready 상태가 된다.
Ready 상태는 프로세스들이 cpu에게 time quantum을 할당받기를 기다리고 있다.
이 중에서 cpu는 우선 순위를 고려하는 등의 방식으로 적절한 프로세스를 골라서 cpu 작업을 할 수 있도록 time quantum을 할당해준다.
이 때 프로세스의 상태는 Run이 된다.
그런데 time quantum을 다 사용하기 전에 I/O 작업을 만나면 어떻게 될까?
I/O 작업은 기본적으로 시간이 오래 걸리기 때문에 Run 상태에서 Wait 상태로 변경한다.
Wait 상태에서 I/O 작업이 끝나게 되면 다시 Ready 상태가 되어 Ready queue에 들어가게 된다.
이러한 과정을 반복하다가 프로세스가 종료되면 Exit 상태가 되는 것이다.
Context Switching
CPU는 실행 중인 프로세스를 바꾸는 과정을 반복한다.
이렇게 프로세스나 쓰레드를 바꾸는 과정을 Context Switching이라고 한다.
Context Switching이 발생하면 현재 프로세스의 상태를 저장한 후 다음 실행할 프로세스의 상태를 가져와야 한다.
이를 위해서 PCB(Process Control Block)이 사용된다.
PCB는 다음과 같이 프로세스의 정보가 담겨있다.

PCB에 대해 간단히 정리해보자면
- process state : 프로세스 상태 (new, ready, run, wait, exit 등등..)
- program counter : 다음에 실행할 명령어의 주소
- cpu register : run에서 wait, ready로 state가 바뀔 때 현재 레지스터 값을 저장한다.
다음은 UNIX process 상태도이다.

이전 5가지 상태를 가지고 있는 상태도보다 조금 더 세분화 된 모습이다.
다른 점은 zombie와 suspended가 추가된 모습을 확인할 수 있다. 또한 blocked 상태는 위 5가지 상태도의 wait이라고 보면 된다.
suspended 상태가 되는 주된 원인은 메모리가 부족할 때이다.
suspended ready
프로세스 하나가 ready 상태라고 하자.
ready queue에서 cpu에게 time quantum을 할당받기를 기다리고 있다.
그런데 새로운 프로세스가 실행되어야 한다면 메모리가 부족해서 프로세스가 메모리에 올라오지 못 할 것이다.
그래서 메모리 공간 확보를 위해서 기존 ready queue에 존재하던 ready 상태인 프로세스를 디스크로 쫓아내는 것이다.
이를 swap out이라고 한다.
이러던 와중 디스크로 쫓아낸 프로세스를 실행해야 한다면 다시 메모리로 불러들이는 과정을 swap in이라고 한다.
suspended blocked
suspended blocked도 suspended ready와 비슷하다.
run 상태에서 실행 도중 I/O 작업을 만나서 blocked 상태가 되었을 때 역시나 메모리에 자리가 부족하다면 기존 waiting queue에 존재하던 blocked 상태의 프로세스를 디스크로 swap out 한다.
기존 blocked 상태이던 프로세스는 suspended blocked 상태가 된다.
'공부 > OS' 카테고리의 다른 글
[OS] CPU scheduling 알고리즘 (0) | 2023.06.11 |
---|---|
[OS] 프로세스 동기화 문제 (세마포어) (0) | 2023.05.27 |
[OS] 쓰레드의 개념과 프로세스와의 차이 (0) | 2023.05.25 |
[OS] 일괄 처리 시스템, 다중 프로그래밍 시스템, 시분할 시스템, 다중 프로세서 시스템 (0) | 2023.03.29 |
[OS] 프로그램과 프로세스의 차이 및 프로세스 구조 (0) | 2023.03.28 |