OS-3.Process
Process Concept
- Process is a program in execution
- 프로세스의 문맥 (context)
- CPU 수행 상태를 나타내는 하드웨어 문맥
- Program Counter(PC)
- 각종 register
- 프로세스의 주소 공간
- code, data, stack
- 프로세스 관련 커널 자료 구조
- PCB (Process Control Block)
- Kernel stack
- CPU 수행 상태를 나타내는 하드웨어 문맥
Process State
프로세스는 상태(state)가 변경되며 수행됩니다
Running : CPU를 잡고 instruction을 수행중인 상태
Ready : CPU를 기다리는 상태(CPU만 얻으면 실행할 수 있는 상태)
Blocked(wait, sleep)
- CPU를 주어도 당장 instruction을 실행할 수 없는 상태
- Process 자신이 요청한 event(I/O)가 즉시 만족되지 않아 이를 기다리는 상태
- 디스크에서 file을 읽어와야 하는 경우
New: 프로세스가 생성중인 상태
Terminated: 수행이 끝난 상태
각 작업의 큐는 Kernel의 Data영역에서 관리되어집니다
PCB
운영체제가 각 프로세스를 관리하기 위해 프로세스당 유지하는 정보
다음의 구성 요소를 가집니다 (구조체로 유지)
OS가 관리상 사용하는 정보
- Process state, Process ID
- scheduling information, priority
CPU 수행 관련 하드웨어 값
- program counter(PC), registers
메모리 관련
- code, data, stack의 위치 정보
파일 관련
- Open file descriptiors…
문맥 교환 (Context Switching)
CPU를 한 프로세스에서 다른 프로세스로 넘겨주는 과정
CPU가 다른 프로세스에게 넘어갈 때 운영체제는 운영체제는 다음을 수행합니다
CPU를 내어주는 프로세스의 상태를 그 프로세스의 PCB에 저장
CPU를 새롭게 얻는 프로세스의 상태를 PCB에서 읽어옴
System Call이나 Interrupt 발생시 반드시 Context switching이 일어나는 것은 아닙니다
- 1번의 경우에도 CPU 수행 정보 등 context의 일부를 PCB에 save해야 하지만 문맥교환을 하는 2번의 경우 cache memory flush가 발생하기 때문에 성능 부담이 훨씬 큽니다
프로세스를 스케줄링하기 위한 큐
Job Queue: 현재 시스템 내에 있는 모든 프로세스의 집합 (Process Queue + Device Queue)
Ready Queue: 현재 메모리 내에 있으면서 CPU를 잡아서 실행되기를 기다리는 프로세스의 집합
Device Queue: I/O device의 처리를 기다리는 프로세스의 집합
프로세스들은 각 큐를 오가며 수행됩니다
스케줄러
장기 스케줄러 (job scheduler)
- 시작 프로세스 중 어떤 것들을 ready queue로 보낼지 결정합니다
- 프로세스에 memory(및 각종 자원)을 주는 문제
- degree of multiprogramming을 제어
- time sharing system에는 보통 장기 스케줄러 없이 무조건 ready 상태가 됩니다
단기 스케줄러 (cpu scheduler)
- 어떤 프로세스를 다음번에 running 시킬 지 결정합니다
- 프로세스에 CPU를 주는 문제
중기 스케줄러 (swapper)
여유 공간 마련을 위해 프로세스를 통째로 메모레에서 디스크로 쫓아냅니다
프로세스에게서 memory를 뺏는 문제
degree of multiprogramming을 제어
현재 시스템은 프로그램을 무조건 메모리에 올리고 swapper를 이용해서 메모리에서 쫓아낸다 (장기 스케줄러대신 중기 스케줄러를 사용한다)
중기 스케줄러로 인해서 Suspended라는 프로세스의 상태가 추가됩니다
새로운 프로세스 상태
- Running
- Ready
- Blocked
- Suspended (stopped)
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스는 통째로 디스크에서 swap out 됩니다
- (예) 메모리에 너무 많은 프로세스가 올라와서 성능이 저하되었을 때 사용자가 직접 process를 중단시거나 시스템이 중단시킵니다
Block은 자신이 요청한 event가 만족되면 Ready 상태가 되어집니다
Suspended는 외부에서 다시 resume해 주어야 Activce됩니다
참고
- 반효경 교수님 운영체제 강의