프로세스 (Process)
- 메인 메모리에 할당 되어 실행중인 상태인 프로그램
- 프로그램은 일반적으로 하드디스크 (보조기억장치)에 저장되어 아무 일도 하지 않는 상태임
- 프로세스는 실행 하면서 Pointer, Data, Text, Register 등이 끊임없이 변함
- Job, Task 등으로 불리기도 함
프로세스 상태
- New: 프로그램이 메인 메모리에 할당 됨
- Ready: 할당된 프로그램이 초기화와 같은 작업을 통해 실행되기 위한 모든 준비를 마침
- Running: CPU가 해당 프로세스를 실행
- Waiting: 프로세스가 끝나지 않은 시점에서 I/O (입력/출력)으로 인해 CPU를 사용하지 않고 다른 작업을 함
// 해당 작업이 끝나면 ready 상태로 돌아가야 CPU에 의해 실행 가능
- Terminated: 프로세스 종료
PCB (Process Control Block)
- 프로세스에 대한 모든 정보가 모여있는 곳
- 학생에게 학생증이 있다면 프로세스에겐 PCB가 있다고 생각하면 됨
- PCB 안에는 프로세스의 상태, 프로세스 번호 (PID), 해당 프로세스의 프로그램 카운터 (PC), 레지스터 값, MMU 정보, CPU 점유 시간 등이 포함 되어 있음
- CPU는 여러 프로세스를 중간 중간 바꿔가며 수행하므로, 수행중인 프로세스가 나갈 때, 이 프로세스의 정보를 어딘가에 저장하고 있어야 다음에 이 프로세스를 수행할 때 이전에 수행한 그 다음부터 이어서 작업 할 수 있음 (이러한 정보를 저장하는 것이 PCB)
프로세스 큐 (Queue)
- 프로세스는 수행하면서 상태가 여러 번 변하므로 서비스를 받아야 하는 곳이 다르고, 일반적으로 프로세스는 여러 개가 한 번에 수행되므로 그에 따른 순서가 필요함, 이러한 순서를 대기하는 곳이 큐 (Queue)
- 운영체제가 이해하는 프로세스는 PCB이므로, 스케줄링 큐는 PCB의 Linked List로 관리되고 있음
- Job Queue: 하드디스크에 있는 프로그램이 실행되기 위해 메인 메모리의 할당 순서를 기다리는 큐
- Ready Queue: CPU 점유 순서를 기다리는 큐
- Device Queue: I/O를 하기 위한 여러 장치가 있는데, 각 장치를 기다리는 큐가 각각 존재
- 순서를 기다리는 공간이 있다면 이 순서를 정해주는 알고리즘이 있어야 하는데, 이것이 스케줄링 (Scheduling)
멀티 프로그래밍 (Multi-Programming)
- 단일 프로세서 (CPU) 환경에서 여러 개의 프로세스가 동시에 실행되는 것
// 실제로 동시에 실행되지는 않음
- 여러 프로세스가 실행되려면 이 프로세스들이 모두 메인 메모리에 존재하고 있어야 함
Degree of Multi-programming
- 멀티프로그래밍의 정도
- 현재 메모리에 할당되어 있는 프로세스 개수임
I/O bound process VS CPU bound process
- I/O bound process: 해당 프로세스에서 I/O 작업이 차지하는 비중이 높은 프로세스
- CPU bound process: 해당 프로세스에서 CPU 작업 (계산)이 차지하는 비중이 높은 프로세스
- Job Scheduler는 I/O bound process 와 CPU bound process를 적절히 분배해서 메모리에 할당해야 함
Scheduler
- Long Term Scheduler, Midum Term Scheduler, Short Term Scheduler 로 나눌 수 있음
- Long Term Scheduler: Job Queue에 할당 될 프로세스 순서 정할 때 사용
- Medium Term Scheduler: 주기적으로 메인 메모리의 프로세스 중 보조 기억 장치로 옮길 프로세스를 찾을 때 사용
- Swapping: 메인 메모리에서 장시간으로 사용하지 않는 프로세스를 하드 디스크로 옮기고, 나중에 이 프로세스가 다시 사용되려고 하면 하드디스크에서 해당 프로세스를 다시 메인 메모리로 할당함
Context Switching
- CPU가 한 프로세스에서 다른 프로세스로 옮겨가는 것
- 어떤 프로세스 하나를 실행시키다가 멈추고 다른 프로세스를 실행 시키는 것
- Dispatcher: CPU의 내부 데이터를 이전 프로세스 데이터에서 새로 실행되는 프로세스로 바꿔주는 역할
- 스케줄러와 디스패처가 컨텍스트 스위칭 때 실행되는데, 이런 작업이 발생 될 때마다 Overhead가 발생하므로, 이 두 가지 역할을 하는 코드들의 효율성이 중요함
참고
'Backend Loadmap > Operating System' 카테고리의 다른 글
[백엔드로드맵][OS] 메모리 관리 (0) | 2023.04.24 |
---|---|
[백엔드로드맵][OS] 기본적인 터미널 명령어 (0) | 2023.04.07 |
[백엔드로드맵][OS] 스레드와 동시성 (0) | 2023.04.06 |
[백엔드 로드맵][OS] OS의 기본적인 작동 방식 (0) | 2023.03.21 |
[백엔드 로드맵][OS] 터미널 사용 방법 (0) | 2023.03.18 |