Process Control Block
PCB
운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보이다
다음의 구성 요소를 가진다(구조체로 유지)
1. OS 관리상 사용하는 정보
- Process state, Process ID
- scheduling information, priority
2 CPU 수행 관련 하드웨어 값
- Program counter, registers
3 메모리 관련
- Code, data, stack
4. 파일 관련
문맥 교환(Context switch)
Cpu를 한 프로세스에서 다른 프로세스로 넘겨주는 과정이다
프로세스 A -> 프로세스 B
CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행한다
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장한다
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어온다
**System call이나 interrupt 발생시 반드시 문맥교환이 일어나는 것은 아니다
문맥 교환이 일어나지 않는 경우
사용자 프로세스 A (User mode) -> ISR or system call함수 (Kernal mode)
interrupt or system call
(이어서) ISR or system call함수 (Kernal mode) -> 사용자 프로세스 A (User mode)
문맥 교환 없이 user mode 복귀
문맥 교환이 일어나는 경우
사용자 프로세스 A (User mode) -> Kernal mode
timer interrupt or I/O 요청 system call
(이어서) Kernal mode -> 사용자 프로세스 B (User mode)
문맥 교환이 일어난다
문맥교환이 일어나지 않는 경우에도 CPU 수행 정보 등 문맥의 일부를 PCB에 저장해야 하지만
문맥 교환이 일어나는 경우에 비하면 작은 규모이다
문맥 교환을 하는 2의 경우 그 부담이 훨씬 크다
프로세스를 스케줄링하기 위한 큐
- Job Queue
현재 시스템내에 있는 모든 프로세스의 집합 - Ready Queue
현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합 - Device queues
I/O data의 처리를 기다리는 프로세스의 집합
-> 프로세스들은 각 큐들을 오가며 수행된다
스케줄러
순서를 정해주는 것을 말한다
스케줄러의 종류
Short-term scheduler(단기 스케줄러 or CPU scheduler)
어떤 프로세스를 다음번에 running 시킬지 결정한다
프로세스에 CPU를 주는 문제이다
충분히 빨라야 한다(milisecond 단위이다)
Long-term scheduler(장기 스케줄러 or job scheduler)
시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정한다
프로세스에 memory 및 각종 자원을 주는 문제이다
degree of Multiprogramming을 제어한다
time sharing system에는 보통 장기 스케줄러가 없다(무조건 ready)
-> 메모리에 올라가있는 프로세스의 수를 조절한다
메모리에 프로그램이 너무 많거나 적어도 성능이 안좋아지기 때문이다
***실제 시스템에서는 장기 스케줄러가 실행되는 단계가 없다
시작과 동시에 메모리를 할당하기 때문이다
실제로 메모리에 올라가있는 수를 조절하는 스케줄러
Medium-Term scheduler(중기 스케줄러 or Swapper)
여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫒아낸다
프로세스에게서 memory를 뺏는 문제이다
degree of Multiprogramming을 제어한다
이 중기 스케줄러로 인해 프로세스의 상태가 추가되었다
Suspended (stopped)
외부적인 이유로 프로세스의 수행이 정지된 상태를 말한다 //중기 스케줄러로 강제 정지
프로세스는 통째로 디스트에 swap out 된다
예) 사용자가 프로그램을 일시 정지시킨 경우 시스템이 여러 이유로 프로세스를 잠시 중단시킨다 //메모리에 너무 많은 프로세스가 올라와 있을 때
Blocked : 자신이 요청한 event가 만족되면 Ready 상태로 돌아갈 수 있다
Suspended : 외부에서 재개해주어야 동작할 수 있다