Process State

June Lee·2021년 2월 12일
0

운영체제

목록 보기
9/25

프로세스(Process)

  • 프로세스(Process): 돌고 있는 프로그램
  • 프로세스마다 process ID(PID)가 존재. 커널은 PID를 이용해 프로세스를 관리

프로세스의 상태

  1. Running: CPU를 받아서 돌고 있는 상태
  2. Ready: time slice가 끝났거나 프로세스 간의 우선 순위에서 밀려서 CPU를 받을 때까지 기다리고 있는 상태
  3. Blocked: time slice가 다 되기 전에 CPU가 필요 없기 때문에 내어놓은 상태. => 블락 상태의 프로세스가 많다는 것은 CPU 스케쥴링을 효율적으로 해서 시스템이 전체적으로 바쁘게 돌아가고 있다는 의미

Blocked State

  • 블락 상태의 예시
  • I/O가 요청되었을 때 그 I/O가 끝날 때까지
  • lock(mutex)를 기다리는 상황
  • 통신에서 message를 기다리는 상황
  • shared resource(메모리의 page, printer 등..)를 차지하기 위해 기다리는 상황
  • 블락 상태는 스케줄링의 대상이 아니므로, CPU를 받기 위한 queue(Scheduling queue-Run Queue)에 서있어서는 안됨.(I/O request queue에는 있을 수 있음)

Point! 🧩
블락 상태가 있기 때문에 CPU/IO overlap이 가능한 것


Process State Transition

Scheduling Queue
Run Queue: Ready, Run 상태를 통틀어서 Run 상태라고도 부르고, Ready 상태의 프로세스들이 기다리는 곳이 Run Queue이다. 그런데 실제 구현을 살펴보면 이 Run Queue에는 프로세스가 아닌 PCB가 줄 서있다. 즉 Run Queue는 PCB의 링크드 리스트이다.(Sleep Queue도 동일)
Sleep Queue: Blocked 상태의 프로세스들이 기다리는 곳
Disk I/O Queue: Disk I/O를 하기 위해 기다리는 곳

유저 모드에서 돌고 있는 프로세스에서 standard I/O library function을 call하면 이 function은 내부적으로 system call(read() 등)을 하고, 커널 속으로 trap하게 된다. 그리고 해당 프로세스는 I/O가 끝날 때까지 CPU를 내놓고 blocked 상태가 되며, I/O가 끝나면 ready 상태가 되어 scheduling queue에서 차례를 기다린다. 그러다 scheduled되면 커널모드에서 유저모드로 돌아간다.(이때 blocked 상태의 프로세스를 다시 ready로 깨워주는 것은 interrupt handler이다.)

다음 경우는 유저 모드에서 프로세스가 돌고 있는데 I/O가 끝났다는 interrupt가 들어온 경우이다. interrupt가 들어오면 CPU는 I/O가 끝났을 때 해야할 작업들을 한 후(데이터 전달, 디바이스 컨트롤러에게 새로운 I/O 시작 명령 등) interrupt handler로 가서 다른 급한 작업이 있는지 확인 후 원래의 프로세스를 마저 진행한다.

profile
📝 dev wiki

0개의 댓글