<운영체제> Process 2
본 게시물은 영남대학교 곽종욱 교수님의 강의를 기반으로 작성되었습니다.
<CPU Switch From Process to Process>
- Context Switching : process가 전환되는 과정
- 예를 들어 time-sharing을 위한 Timer-Interrupt 발생
- 현재 실행중인 P0의 PCB를 저장,P1의 PCB를 Reload
- 이제부터 P1 실행
- 이러한 과정을 context-switch라고하며, 프로세스가 바뀌는 과정이다.
<PCB In UNIX>
- PCB 구성요소 : PID, Priority, Waiting Event, State, Location of image in disk...etc
- PCB의 수많은 구성요소들 + 동시에 실행되는 수많은 Process의 수 => PCB의 용량이 kernel영역을 넘어서 user영역까지 넘어가는 문제점이 발생!
- 그래서 모든 PCB를 Memory에서 Disk로 swap-out(쫒아내자!)하려고 시도
- 그러면 해당 process의 상태 및 저장공간을 몰라서 다시 process를 실행 시키지 못한다...
- 그래서 PCB를 두 영역으로 나누는 해결방법 고안! -> proc과 user로 나눠보자
- 쉽게 말해 proc에는 해당 process를 다시 실행시키기 위한 중요한 정보들이 포함!
- user에는 disk로 swap-out해도 되는 내용들을 포함
- sturct proc :
- 1.PID, 2.Priority, 3.Waiting Event, 4.State, 5.Location of image in disk
- one per process
- data needed even when process is not active
- struct user :
- data needed only when process is active
- called 'u block'
<Process Scheduling Queues>
- Job queue : set of all processes in the system -> 시스템의 모든 process가 존재
- Swap out되어서 disk 상에 있을 수도, main memory상에 남아 있을 수도 있다.
- Ready queue : set of all processes residing in main memory, ready and waiting to execute -> CPU로 Dispatch되기전의 ready상태에 있는 모든 process 존재
- Device queues : set of processes waiting for an I/O device -> 디바이스마다 해당 큐 존재
- Processes migrate among the various queues
<Schedulers>
- Long-term scheduler(job-scheduler)
- Ready queue contains all processes which redise in main memory
- 간단하게 Job큐에서 Ready큐로 보내는 일을 진행
- Short-term scheduler(CPU-scheduler)
- Ready큐에서 CPU로 보내는 일을 진행
- Medium-term scheduler(Swapper)
- Key idea : someeetimes, it can be advantageous to remove processes from memory and thus reduce the degree of multiprogramming(멀티 프로그래밍의 정도)
- 왜 멀티 프로그래밍의 정도를 낮춰야 하는가? -> Thrashing!
- This scheme is also called as Swapping
- Short-term scheduler is invoked very frequently(굉장히 자주 사용됨,milliseconds)
- Long-term scheduler is in invoked very infrequently -> 가끔식 사용됨
- Process can be described as either :
- I/O-bound process -> spends more time doing I/O than computation, many short CPU bursts(여러개의 짧은 CPU활용) -> 입출력을 열심히하는 프로그램
- CPU-bound process -> spends more time doing computaions, a few very long CPU bursts(드물지만 긴 CPU활용) -> 계산을 열심히하는 프로그램