new -> ready
: 장기 스케줄러에 의해Ready Queue
에 올라감ready -> running
: 단기 스케줄러에 의해 CPU에 할당된 상태.(dispatch)
running -> ready
: 다른 프로세스에 의해 선점당하면(interrupt) 다시 Ready Queue로 이동- 스케줄링 알고리즘이 우선순위 스케줄링인 경우
running -> waiting
: 입출력(I/O) 이벤트 발생시 blockwaiting -> ready
: 입출력(I/O) 이벤트 종료 시 다시 Readyrunning -> terminate
: 프로세스 종료
ready
, waiting
상태에는 여러 프로세스 존재할 수 있으나, 싱글 코어CPU라고 가정했을 때 running
상태의 프로세스는 단 하나 존재
이외에도, suspend
라는 state가 있다.
- 중기 스케줄러에 의해 디스크로 swap out 된 상태
waiting(blocked)
상태는 I/O 작업을 기다리는 상태이기 때문에 스스로ready
상태로 돌아가지만,suspend
는 다른 이유로 직접 swap된 것이기 때문에 스스로ready
가 되지 못한다.
context switch 에 소요되는 시간을 측정하는 방법
: 프로세스를 일부러 wait로 보내는 방식을 사용하면 된다.
- P1, P2 두개의 프로세스를 실행하는 환경이라고 가정하자.
- 먼저 P1에서 타임스탬프를 기록하고 곧바로 P1이 P2에게 데이터 토큰을 요청한다.
- 이 때 IPC(I/O) 발생으로 P1은 waiting 상태가 된다.
- P2가 CPU 제어권을 받고, P2는 바로 다시 P1에게 데이터 토큰을 보내도록 한다.
- 다시 제어권은 P1에게 넘어오고, 타임스탬프를 확인한다.
- 두 타임스탬프 차이는 “2 * (보내는 시간 + 받는 시간 + Context switch 시간)“이 된다.
- P1이 자기 자신에게 데이터를 보내고 받는 시간을 측정해서 위의 시간에서 빼면 오차를 제외한 근사 값의 context switch 시간을 알 수 있다.
- 보다 정확하게 하기 위해 여러번 반복해서 평균을 구하면 된다.
Reference)
코딩인터뷰 완전분석
https://blockdmask.tistory.com/22
https://github.com/uzzzzzin