프로세스의 문맥
CPU 수행 상태를 나타내는 하드웨어 문맥
- Program Counter
- 각종 register
프로세스의 주소 공간
프로세스 관련 커널 자료 구조
프로세스는 상태가 변경되며 수행된다
Running
- CPU를 잡고 instrucetion 을 수행중인 상태
Ready
- CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)
Blocked (wait, sleep)
- CPU를 주어도 당장 instruction을 수행할 수 없는 상태
- Process 자신이 요청한 event(ex: I/O)가 즉시 만족되지 않아 이를 기다리는 상태
- ex) 디스크에서 file을 읽어와야 하는 경우
Suspended (stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통쨰로 디스크에서 swap out 된다
- ex) 사용자가 프로그램을 일시 정지시킨 경우 시스템이 여러 이유로 프로세스를 잠 시 중단시킴 (메모리에 너무 많은 프로세스가 올라와 있을 때)
Blocked : 자신이 요청한 event가 만족되면 Ready
Suspended : 외부에서 resume해 주어야 Active
New : 프로세스가 생성중인 상태
Terminated: 수행이 끝난 상태
PCB
- 운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
- 다음의 구성 요소를 가진다
(1) OS가 관리상 사용하는 정보
- Process state, Process ID
- scheduling information , priority
(2) CPU 수행 관련 하드웨어 값
- Program counter, registers
(3) 메모리 관련
(4) 파일 관련
문맥 교환(context switch)
- CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
- CPU가 다른 프로세스에게 넘어갈 때 운영체제는 다음을 수행
- CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
- CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
System call 이나 interrupt 발생시 반드시 문맥 교환(context switch)이 일어나는 것은 아님
1번의 경우 사용자 프로세스 A에서 timer interrupt나 system call을 하면 운영체제로 CPU가 넘어가서 커널모드로 왔다가 다시 사용자 프로세서 A로 준경우는 문맥교환이 되지않은 것 이다.
2번의 경우는 사용자 프로세스 A가 timer interrupt가 들어와 CPU 사용의 시간이 끝났으므로 커널모드에서 Ready상태인 사용자 프로세스B 로 CPU가 가서 문맥교환이 일어남
Long-term scheduler
- 시작 프로세스중 어떤 것들을 ready aueue로 보낼지 결정
- 프로세스에 memory을 주는 문제
- 메모리에 올라와있는 프로세서의 수(degree of Muliprogramming) 를 제어
- time sharing system 에는 보통 장기 스케쥴러가 없음(무조건 ready)
Short-term scheduler
- 어떤 프로세스를 다음번에 running 시킬지 결정
- 프로세스에 CPU를 주는 문제
- 충분히 빨라야함
Medium-term scheduler
(메모리에 다올리고 적당히 조절하면서 많으면 메모리프로그램 조절)
- 여유 공간 마련을 위해 프로세스를 통째로 메모리에서 디스크로 쫓아냄
- 프로세스에서 memory를 뺏는 문제
- degree of Muliprogramming을 제어