Process
현재 메모리에 있거나 CPU에서 실행 중인 프로그램
- 즉, HDD나 SSD에 있는 프로그램은 프로세스라 부를 수 없음
Memory Address Space
프로세스는 각각 자신의 데이터(코드, 변수, 인자 등)을 저장하기 위한 address space를 가지고 있음

Text(code) : 프로세스의 코드 저장
Data : 정적 데이터 저장(전역변수 등)
- 위 예시에서는 전역변수인 x, y 해당
Stack : local data 저장(local variable, function parameter, return address, ...)
- 위 예시에서는 int * values, int i 해당
Heap : c language의 malloc, JAVA / JS의 object 등 저장됨
OS 역시 프로그램이므로, 자신의 memory space를 가지고 있음
- Text : OS를 이루는 코드, 시스템 콜, ISR 등 저장
- Data : OS의 memory space에는 실행 중인 프로세스를 관리하기 위한 PCB(Process Control Block) 저장
- Stack : Kernel Stack 저장
PCB
- OS가 프로세스를 관리하기 위한 요소, 프로세스의 정보를 저장
- Process ID(PID)
- Process Status - new, ready, running, waiting(blocked), terminated
- PC(Program Counter) - 다음 실행할 명령어의 위치 저장
- Register - 보다 정확히 말하면, 프로세스가 사용하는 레지스터의 값
- CPU Scheduling Information
Process Status

- new : 프로세스 생성 중
- ready : 프로세스가 ready queue에서 대기 중, ready 상태인 프로세스에게 CPU 리소스 할당 시 사용 가능
- running : 프로세스가 현재 cpu에서 실행 중, cpu 리소스 사용 중
하나의 코어에서는 오직 하나의 프로세스만 실행 가능,
하나의 코어에서 동시에 여러 프로세스 실행 불가
- waiting : 프로세스가 waiting queue에서 대기 중, waiting 프로세스는 CPU 리소스 할당해도 사용 불가
대표적으로 특정 프로세스에서 I/O 발생 시,
그 프로세스는 디바이스가 task 완료 전까지 다음 명령어를 실행할 수 없으므로 waiting 상태,
그 device의 waiting queue에서 대기
- terminated : 프로세스 종료 중
Process Scheduling

- Ready Queue : 하나의 프로세스가 running, 코어 위에서 실행 중일 때
ready 상태인 프로세스를 관리하는 곳
현재 running 중인 프로세스가 timer, 또는 I/O, preemptive scheduling 등으로
나오게 될 때 다음 running 프로세스가 될 프로세스가 모여 있는 곳
Linked List로 만들어졌으므로, Array와 달리 저장할 수 있는 프로세스의 개수에 제한 X
- 위 Ready Queue 중, 어떠한 프로세스를 다음 running 프로세스로 할 것인가? 를 결정하는 것이
Process Scheduling, 다음 running 프로세스를 결정하는 방법은 Process Scheduling Algorithm이라 함
- 즉, 단순히 Queue의 FIFO(First In First Out)의 원칙대로는 다음 running 프로세스는 결정되지 않음
- cf> Waiting Queue
- waiting 상태인 프로세스가 저장되는 Queue, 하나만 존재하는 것이 아닌 각 디바이스별로 존재
- ex) 프린터 waiting queue, 키보드 waiting queue, ...
Context Switch

- 현재 running 상태 프로세스의 Process Context 저장,
ready -> running 될 프로세스의 Process Context의 정보를 로드
- running 상태 프로세스가 바뀔 때, ready queue에 있는 프로세스가 running 상태로 바뀔 때 발생
- running 상태 프로세스가 나갈 때(CPU 사용을 그만둘 때),
만약 Process Context를 저장하지 않는다면? 위 프로세스를 다시 실행할 때
지금까지의 작업을 이어서 불가, 따라서 CPU를 놓을 때, Process Context를 저장해야
- Process Context
- 쉽게 말하면, Process Context는 프로세스를 실행시키기 위해 필요한 모든 것
- Memory address space(code, data, stack, heap)
- PCB(PID, Process Status, PC, Register)
- Kernel Stack
- 하지만, Context Switch 중일 동안에는 CPU는 프로세스 실행 불가
- Running 될 Process Context를 로드 / CPU를 놓을 Process Context를 세이브해야 하므로
- 이 Context Switch할 때 걸리는 시간을 Context Switch Overhead라 함
'TIL > OS' 카테고리의 다른 글
| 5. Scheduling (FCFS, SJF, RR, Priority Scheduling) (1) | 2023.08.10 |
|---|---|
| 4. Thread (0) | 2023.07.25 |