✔️ 프로세스의 상태
1. 생성(Created)
- 작업(Job)을 커널에 등록
- PCB 할당 및 프로세스 생성 - created
- Ready
쓸 수 있는 메모리 공간 체크 및 프로세스 상태 전이 (메모리 공간 있을 때) - suspended ready
쓸 수 있는 메모리 공간 체크 및 프로세스 상태 전이 (메모리 공간 없을 때)
- Ready
2. 준비(Ready)
- 프로세서(CPU) 할당 대기 상태
- Queue에서 대기하고 있는 상태를 의미 (물리적인 메모리에 적재된 상태를 말한다.)
3. 실행(Running)
- 프로세서와 필요한 자원을 모두 할당 받은 상태
- 프로세스를 실행하는 중
- Time runout(preemption)
Running State에서 Ready State로 돌아가는 것 - sleep(block)
Running State에서 Asleep State로 가는 것, I/O 등 자원 할당 요청
- Time runout(preemption)
4. 대기(Blocked / Asleep / Wait)
- 프로세서 외에 다른 자원을 기다리는 상태
- 프로세스가 어떤 사건이 발생하기를 기다리고 있는 상태
- 당장 CPU를 할당해줘도 Instruction을 수행할 수 없는 상태를 말한다.
디스크에서 File을 읽어와야하는 오래 걸리는 작업을 하고 있거나 다른 프로세스의 진행을 위해 일부러 재워둔 경우에 해당- Wake - up
Asleep에서 Ready로 가는, asleep 상태에서 data 대기 후 data를 받았을 때 ready 상태에서 기다리게 됨
- Wake - up
5. 지연(Swap-out / Suspended)
- 메모리를 할당 받지 못한(빼앗긴) 상태
- 커널 또는 사용자에 의해 발생
6. Terminated / Zombie
- 프로세스 수행이 끝난 상태
- 모든 자원 반납 후 커널 내에 일부 PCB 정보만 남아 있는 상태
상태 | 자원 할당 상태 | ||
Active (swapped-in) |
Running | 프로세서 o | 메모리 o |
Ready | 프로세서 x, 기타 자원 o | ||
Blocked, asleep | 프로세서 x, 기타 자원 x | ||
Suspended (Swapped-out) |
Suspended ready | 프로세서 x | 메모리 x |
Suspended block | 프로세서 x, 기타 자원 x |
7. Exit
- 프로세스가 실행 종료
- 프로세스가 실행 종료된 상태(프로그램이 메모리에서 해제된 상태) 프로세스가 종료되면 정리하는 작업을 진행하게 되는데 이 상태에 해당한다.
✔️ 프로세스의 상태 전이
프로세스는 다음과 같은 상태 전이를 가지며 주로 아래와 같이 명명한다.
- 디스패치(Dispatch) : 준비 → 실행
- 타임 아웃(Time out) : 실행 → 준비
- 대기(block) 또는 사건 준비(Event Wait) : 실행 → 대기
- 깨움(wake up) 또는 사건 발생(Event Occurs) : 대기 → 준비
- new → ready : new 상태에서 프로세스가 생성되면 OS 커널에 존재하는 Ready Queue에 올라가게 된다.
- ready → running : Ready Queue에 있는 프로세스들을 OS가 프로세스 스케쥴링 알고리즘에 의해서 Running 상태로 가야할 프로세스에게 CPU를 할당한다. 그러면 프로세스가 Running 상태가 된다.
- running → ready : 현재 running 상태에 있는 프로세스 A보다 Ready Queue에서 대기하고 있는 프로세스 B가 우선순위가 높으면, preemptive schedule(선점형)인 경우 프로세스 A는 Ready 상태로 오게 되고 프로세스 B가 Running 상태가 되어 CPU를 할당 받게 된다.
- running → blocked : 현재 running 상태에 있는 프로세스 A에게 입출력(I/O) 이벤트가 발생했을 때 프로세스 A가 blocked 상태로 가게 된다.
- running → terminate : 프로세스 종료
✔️ 프로세스 관리를 위한 자료구조
Waiting Queue
1) Job Queue : HDD에 있던 프로그램들이 메모리에 올라올 때, 만약 메인 메모리가 가득 찼거나 CPU가 다른 작업을 수행 중이라면 메모리에 올라오기 전에 어느정도 기다려야하는데 HDD의 프로그램들이 잠시 기다리는 곳을 Job Queue라고 한다.
2) Ready Queue : 메인메모리에 프로그램이 올라왔다고 하더라도 바로 CPU의 서비스를 받을 수 있는 것은 아니다. 다른 프로그램이 수행 중이면 기다렸다가, 해당 프로그램이 I/O를 시작하거나, 시공유 시스템의 경우 기존 프로세스가 시간초과되면 실행된다. 이렇게 이미 메모리에 올라온 프로세스들이 실행을 위해 대기하는 곳을 Ready Queue라고 한다.
3) Device Queue : I/O장치 (e.g. 프린터, 키보드, 마우스 등)을 이용하려면 기존 I/O 작업이 끝나기를 기다렸다가 밀려있던 모든 작업이 끝나면 비로소 I/O장치를 사용할 수 있다. 프린터는 프린터큐, 마우스는 마우스큐, 키보드는 키보드큐와 같이 각각 I/O 장치들은 각자의 대기 큐를 가지고 있는데, 이러한 I/O 장치들의 큐들을 통틀어서 Device Queue라고 부른다.
✔️ 프로세스 Scheduler
프로세스를 스케줄링하기 위한 Queue를 다시 한번 정리하면 다음과 같다.
- Job Queue : 현재 시스템 내에 있는 모든 프로세스의 집합
- Ready Queue : 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
- Device Queue : Device I/O 작업을 대기하고 있는 프로세스의 집합
각각의 Queue에 프로세스들을 넣고 빼주는 스케줄러에도 크게 세가지 종류가 존재한다.
장기스케줄러(Long-term scheduler or job scheduler)
메모리는 한정되어 있는데 많은 프로세스들이 한꺼번에 메모리에 올라올 경우, 대용량 메모리(일반적으로 디스크)에 임시로 저장된다.
이 pool 에 저장되어 있는 프로세스 중 어떤 프로세스에 메모리를 할당하여 Ready Queue로 보낼지 결정하는 역할을 한다.
- 메모리 ↔ 디스크 사이의 스케줄링 담당
- 프로세스에 memory(및 각종 리소스)를 할당(admit)
- degree of Multiprogramming(MPD) 제어 (실행중인 프로세스의 수 제어)
- 프로세스의 상태
new → ready(in memory)
cf) 메모리에 프로그램이 너무 많이 올라가도, 너무 적게 올라가도 성능이 좋지 않은 것이다.
참고로 time sharing system 에서는 장기 스케줄러가 없다. 그냥 곧바로 메모리에 올라가 ready 상태가 된다.
단기스케줄러(Short-term scheduler or CPU scheduler)
- CPU ↔ 메모리 사이의 스케줄링을 담당
- Ready Queue에 존재하는 프로세스 중 어떤 프로세스를 running 시킬지 결정.
- 프로세스에 CPU를 할당(scheduler dispatch)
- 프로세스의 상태
ready → running → waiting → ready
중기스케줄러(Medium-term scheduler or Swapper)
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄 (swapping)
- 프로세스에게서 memory를 deallocate
- degree of Multiprogramming 제어
- 현 시스템에서 메모리에 너무 많은 프로그램이 동시에 올라가는 것을 조절하는 스케줄러.
- 프로세스의 상태
ready → suspended
Process state - suspended
Suspended(stopped) : 외부적인 이유로 프로세스의 수행이 정지된 상태로 메모리에서 내려간 상태를 의미한다.
프로세스 전부 디스크로 swap out 된다. blocked 상태는 다른 I/O 작업을 기다리는 상태이기 때문에 스스로 ready state 로 돌아갈 수 있지만 이 상태는 외부적인 이유로 suspending 되었기 때문에 스스로 돌아갈 수 없다.
✔️ 프로세스 Scheduling
1) Job Scheduler : Job Queue의 프로그램들을 어떤 순서로 메모리에 올릴 것인지 결정한다. 이러한 과정은 프로그램이 새로 시작될 때, 메인메모리가 가득찬 경우 등의 상황에만 발생하므로 자주 일어나지 않고 어쩌다 한번(수분 ~ 수십분) 일어난다. 때문에 이러한 스케줄러를 Long Term Scheduler라고도 한다.
2) CPU Scheduler : Ready Queue의 프로세스들을 어떤 순서로 서비스 할 것인지에 대한 스케줄러이다. 시공유 시스템의 경우 이러한 과정은 1초에도 수십번에서 많게는 수백번도 일어나기 때문에 이러한 스케줄러를 Short Term Scheduler라고도 한다. 모든 스케줄링 중에서 CPU 스케줄링이 가장 중요하다.
3) Device Scheduler : Device Queue의 프로세스들을 어떤 순서로 I/O 장치를 이용하게 할 것인지에 대한 스케줄러이다. 이는 Disk Scheduler, Printer Scheduler, Mouse Scheduler 등 I/O, 보조기억 장치 스케줄러를 통틀어 가리키는 말이다.
4) Degree of Multi Programminig : 메인 메모리에 프로세스가 몇개나 올라와 있는지를 의미함. (만약 3개의 프로세스가 실행중이라면 Degree는 3)
5) I/O Bound Process VS CPU Bound Process : I/O Bound Process의경우 대부분의 시간을 I/O하는데 쓰는 프로세스들을 의미하고 CPU Bound Process는 대부분의 시간을 CPU로 연산하는데 쓰는 프로세스를 의미한다. 운영체제(Job Scheduler)는 이들을 적절하게 배합하여 I/O 장치와 CPU 모두 너무 오랫동안 쉬게하지 않아야한다.
✔️ 프로세스 Swapping
1) Swapping : 서버와 같이 여러 사용자가 하나의 메모리를 공유하는 경우에 만약 한 사용자가 자리를 비우면 그 사용자가 돌아올 때 까지 해당 프로세스에 메모리를 할당할 이유가 없다. 때문에 PCB(Process Control Block)의 CPU Time등을 확인해서 오랫동안 동작이 없는 프로세스는 잠시 HDD로 내려놓고, 다른 프로세스를 실행하거나 기존 프로세스에 메모리를 더 할당하는 등 메모리를 더 효율적으로 활용하다가, 해당 사용자가 돌아와서 작업을 수행하면 다시 메모리에 프로세스를 올린다. 메모리에서 HDD로 내리는 작업을 Swap Out이라고 하고, HDD에서 다시 메모리로 올리는 작업을 Swap In이라고 하며, 이러한 목적으로 사용되는 HDD 공간을 Backing Store 혹은 Swap Device라고한다.
2) MIdium Term Scheduler : Swapping 역시 여러 프로세스들이 HDD로 내려가고 다시 메모리로 올라오고 하기 때문에 어떤 순서로 프로세스를 먼저 내리고 올릴지 결정해야한다. 이러한 스케줄링 작업은 Short Term Scheduling 보다는 적게 일어나지만 Long Term Scheduling 보다는 자주 일어난다. 때문에 이러한 스케줄링 작업(Swapping Scheduling)을 Midium Term Scheduling이라고 한다.
'CS > 운영체제' 카테고리의 다른 글
[운영체제] CPU Scheduling (0) | 2022.04.04 |
---|---|
[운영체제] IPC(Inter Process Communication) (0) | 2022.04.04 |
[운영체제] PCB(Process Control Block) & Context Switching (0) | 2022.03.17 |
[운영체제] System Call (0) | 2022.03.14 |
[운영체제] 인터럽트(Interrupt) (0) | 2022.03.14 |
영차영차 성장 블로그
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!