참고: tech-interview-for-developer
Process Management
운영체제는 여러 개의 프로세스의 실행 순서를 관리하고, CPU 등 자원을 배분하고 관리해야 한다.
이때 각 프로세스를 구분할 수 있어야 관리가 가능하다. 각 프로세스의 정보를 Process metadata라고 한다.
- Process Metadata
- Process ID (PID) : 프로세스를 식별하기 위한 고유 번호
- Process State
- Process Priority
- CPU Register
- Owner
- CPU Usage
- Memory Usage
Process Metadata는 프로세스가 생성되면 PCB에 저장된다.
PCB (Process Control Block)
Process metadata를 저장하는 블록
- 한 PCB 안에는 한 프로세스의 정보가 담긴다.
- 프로세스 생성 시 커널 영역에 생성되어 프로세스를 식별하는 정보로 사용한다. 프로세스가 종료되면 폐기된다.
프로그램 실행 → 프로세스 생성 → 프로세스 주소 공간 생성 (코드, 데이터, 스택) → 해당 프로세스의 메타데이터가 PCB에 저장
PCB가 필요한 이유?
- CPU는 프로세스의 상태에 따라 교체 작업이 이뤄진다. (인터럽트가 발생해 할당받은 프로세스가 waiting 상태가 되고 다른 프로세스를 running으로 바꿔 실행할 때)
- 이때 현재 waiting 상태로 변한 프로세스에 관한 저장 값을 PCB에 저장해둔다.
PCB 관리 방법
- Linked List 방식으로 관리
- PCB List Head에 PCB들이 생성될 때마다 붙게 된다. = 프로세스가 생성되면 해당 PCB가 생성되어 리스트에 붙게 되고, 프로세스 완료 시 리스트에서 제거한다.
- 주소값으로 연결되어 있는 연결 리스트로 삽입, 삭제가 용이하다.
Context Switching
CPU가 수행 중인 프로세스를 변경할 때 이전 프로세스 상태(context)를 PCB에 보관하고, 새로운 프로세스의 정보를 PCB에서 읽어 레지스터에 적재하는 과정
- 보통 인터럽트 발생, 실행 중인 CPU 사용 허가 시간을 모두 소모, 입출력을 위해 대기해야 하는 경우 발생한다.
- 즉, 프로세스가 Ready → Running, Running → Ready, Running → Waiting 상태 변경 시 발생
- Multi Processing을 위해 필수
Context Switching OverHead
Context Switching 동안에는 CPU가 작업을 할 수 없다. 때문에 잦은 context switching은 성능에 좋지 않다.
- 프로세스의 레지스터 개수, 데이터의 종류 등에 영향을 받는다.
- 성능 개선을 위해 Conext의 데이터 양을 줄여야 한다.
- thread 간에는 공유하는 메모리 영역이 있기 때문에 프로세스에 비해 context switching 비용이 적다.
'CS' 카테고리의 다른 글
[CS 스터디] 스택 오버플로우 (Stack Overflow), 힙 오버플로우 (Head Overflow) (0) | 2023.07.21 |
---|---|
[CS 스터디] 시스템 콜, fork() wait() exec() (0) | 2023.07.21 |
[Java] HashMap (0) | 2023.07.20 |
[알고리즘] 최대 공약수 구하기 - 유클리드 호제법 (0) | 2023.07.18 |
[CS 스터디] 프로세스 주소 공간 (0) | 2023.07.17 |