alt
Home 프로세스의 상태변화
Post
Cancel

프로세스의 상태변화


img


  • new -> ready : 장기 스케줄러에 의해 Ready Queue에 올라감
    • ready -> running : 단기 스케줄러에 의해 CPU에 할당된 상태.(dispatch)
  • running -> ready : 다른 프로세스에 의해 선점당하면(interrupt) 다시 Ready Queue로 이동
    • 스케줄링 알고리즘이 우선순위 스케줄링인 경우
  • running -> waiting : 입출력(I/O) 이벤트 발생시 block
  • waiting -> ready : 입출력(I/O) 이벤트 종료 시 다시 Ready
  • running -> terminate : 프로세스 종료


ready, waiting 상태에는 여러 프로세스 존재할 수 있으나, 싱글 코어CPU라고 가정했을 때 running 상태의 프로세스는 단 하나 존재


이외에도, suspend라는 state가 있다.

  • 중기 스케줄러에 의해 디스크로 swap out 된 상태
  • waiting(blocked) 상태는 I/O 작업을 기다리는 상태이기 때문에 스스로 ready 상태로 돌아가지만, suspend는 다른 이유로 직접 swap된 것이기 때문에 스스로 ready가 되지 못한다.


context switch 에 소요되는 시간을 측정하는 방법

: 프로세스를 일부러 wait로 보내는 방식을 사용하면 된다.

  1. P1, P2 두개의 프로세스를 실행하는 환경이라고 가정하자.
  2. 먼저 P1에서 타임스탬프를 기록하고 곧바로 P1이 P2에게 데이터 토큰을 요청한다.
    • 이 때 IPC(I/O) 발생으로 P1은 waiting 상태가 된다.
  3. P2가 CPU 제어권을 받고, P2는 바로 다시 P1에게 데이터 토큰을 보내도록 한다.
  4. 다시 제어권은 P1에게 넘어오고, 타임스탬프를 확인한다.
  5. 두 타임스탬프 차이는 “2 * (보내는 시간 + 받는 시간 + Context switch 시간)“이 된다.
    • P1이 자기 자신에게 데이터를 보내고 받는 시간을 측정해서 위의 시간에서 빼면 오차를 제외한 근사 값의 context switch 시간을 알 수 있다.
    • 보다 정확하게 하기 위해 여러번 반복해서 평균을 구하면 된다.



Reference)

코딩인터뷰 완전분석

https://blockdmask.tistory.com/22

https://github.com/uzzzzzin

This post is licensed under CC BY 4.0 by the author.