http://www.kocw.net/home/cview.do?lid=e0f8d59c1069b035
운영체제에서 스케줄링하는 코드
프로세스에 memory(및 각종 자원)을 주는 문제
프로세스가 상태도에서, 프로세스가 처음에 만들어질 때 바로 ready 상태가 되는 게 아니라 admitted 상태가 되면 넘어감
그리고 이 Long-term scheduler가 admitted 상태가 되게 해줌
우리가 다루는 일반적인 운영체제는 장기 스케줄러가 없어, 프로그램이 실행되면 무조건 메모리에 진입하여 곧바로 ready 상태로 들어감
장기 스케줄러가 없는데 메모리 관리를 어떻게 할까?
이렇게 time sharing system이 장기 스케줄러가 없는 대신 Medium-Term Scheduler을 둔다.
Running
Ready
Blocked(wait, sleep)
Suspended, stopped
메모리가 통째로 빼앗긴 상태
- 외부적인 이유로 프로세스의 수행이 정지된 상태
- 프로세스가 운영체제의 중기 스케줄러로 인해 메모리에서 쫓겨난 상태
- 사람이 프로그램을 일시 정지 시킨 겨우
ex) 사용자가 프로그램을 일시 정지 시킨 경우 (break key) 시스템이 여러 이유로 프로세스를 잠시 중단 시킴 (메모리에 너무 많은 프로세스가 올라와 있을 때)- 프로세스는 통째로 디스크에 swap-out 된다
Blocked : 자신이 요청한 event가 만족되면 Ready
Suspended : 외부에서 resume해 주어야 Active
프로세스의 일생은 CPU뿐만 아니라 디스크에서 I/O를 수행하는 경우에도 계속 일을 하는 것.. 따라서 Blocked 상태와 Suspended 상태는 다름. Suspended 상태는 진짜 정지된 상태!
즉, Blocked에서 Ready로 갈 수 있지만, Suspended 상태에서 Ready로 올라가려면 외부에서 resume해주어야 함!
Running
, Ready
, Blocked
: active status
Suspended Blocked(Blocked -> Suspended)
,
Suspended Ready(Ready -> Suspended)
: inactive status
Wakeup
: suspended 상태에서 메모리를 통쨰로 빼앗겼으므로 cpu 작업은 할 수 없는 게 맞지만,
만약 I/O 작업을 하면서 Blocked 상태가 되었는데, 메모리까지 빼앗겨 suspended 상태가 됐으면 I/O 작업이 종료됐을 때 Suspended Ready로 돌아올 수는 있음
Swap out
: 메모리에서 통째로 쫓겨나는 것
Swap in
: 다시 메모리로 돌아오는 것
운영체제가 본인의 상태를 표현하는 게 아니라 프로세스의 상태를 표현! 즉 운영체제가 Running 됐다, Blocked 됐다 하는 것이 아님.
프로세스 입장에서는 user mode, kernel mode 가 다 running되고 있는 상태
user mode running
: 자기 코드 수행
kernel mode running
: 커널 모드의 코드가 수행, 커널이 running이 아니라 이 프로세스가 커널 모드에서 running 한다는 뜻 (system call)
인터럽트 발생 시 운영체제가 running한다는 말이 아니라 직전에 돌던 프로세스가 여전히 커널 모드에서 running한다고 간주하는 것
디스크 I/O와 관련된 인터럽트는 하드웨어, 소프트웨어 인터럽트
인터럽트 코드 수행 시 우선순위가 더 높은 인터럽트가 들어왔을 때에는 그 인터럽트를 수행하다가 종료되면 이전 코드로 돌아오는 것
New, Exit 를 제외한 상태가 프로세스의 상태로 인지하는 것을 추천