운영체제 정리 (4)
Process (#1)
프로세스란?
- 프로그램의 실행 단위를 프로세스라 함.
프로세스의 상태
- 위 그림은 프로세스 상태도이다.
- New: 프로세스가 생성중인 상태
- Ready: CPU가 할당되기를 기다리는 상태
- Running : CPU를 잡고 명령을 실행중인 상태
- Blocked(wait, sleep): CPU가 할당 되어도 당장 명령을 수행할 수 없는 상태 (e.g: I/O)
- Terminated: 실행이 끝난 상태
Suspended: 외부에서 resume해주어야 Active
- 외부적인 이유로 프로세스의 수행이 정지됨.
- 프로세스는 통째로 디스크에 swap out됨.
Suspend와 Blocked의 차이 Suspend는 외부에서 재개를 해주어야 활성화되고, Blocked 는 자신이 요청한 event가 완료/만족되면 Ready 상태가 된다.
프로세스 상태도
- 위 그림은 프로세스가 실행되는 과정을 도식화한 그림이다.
- CPU 아래에 있는 박스는 Ready 상태의 Queue 이다.
- CPU는 Queue에서 순차적으로 프로세스를 할당해서 처리한다.
- CPU에서 disk I/O가 발생하면 device controller는 disk I/O queue 할당하고, Disk I/O는 순서대로 이를 처리한다. 이때 프로세스의 상태는
Blocked
상태이며, CPU는 다음 Queue를 처리한다.
PCB (Process Controll Block)
- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 블록단위로 유지하는 정보이다.
- 위 그림은 PCB의 정보들이다.
1
. OS 가 관리상 사용- 프로세스상태, 프로세스 아이디, 스케줄 정보, 우선순위
2
. CPU 수행 관련 하드웨어 값 (PC (program counter), 레지스터)3
. 메모리 관련 (code, data, stack), 메모리 limit, 열려있는 파일 리스트
- 위 PCB가 Process단위로 커널 스택공간에 저장되어 있음.
-
문맥 교환 (context switching)
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때 아래 작업을 수행한다.
- CPU를 주는 프로세스의 상태를 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴.
- 문맥교환 시
cache flush
가 되며 주소공간(code, data, stack)을 비우고, 해당 정보를 저장하거나 불러와야 하기 때문에(위의 PCB에 저장하거나 읽어오는 작업) 오버헤드가 심함. - System Call 이나 Interrupt 발생 시 반드시 문맥교환이 발생하는 건 아님.
- I/O 작업이나 timer Interrupt 같은 경우에는 프로세스가 변경되기 때문에 문맥교환이 발생.
- 프로세스가 변경되지 않으면 문맥교환은 발생하지 않음.
스케줄러
- Long-Term Scheduler
- Short-Term Scheduler (CPU 스케줄러)
- 어떤 프로세스를 다음에 수행할지(running) 결정
- 프로세스에게 CPU를 주는 문제
- Medium-Term Scheduler (Swapper)
- 여유공간을 마련하기 위해 프로세스를 통째로 메모리에서 디스크로 쫒아냄.(swap area)
- 프로세스에게서 메모리를 뺏는 문제