[운영체제] 3. 프로세스의 관리 (3) - 스케줄러~프로세스 상태

jyleever·2023년 2월 19일
0

운영체제

목록 보기
7/9
post-thumbnail

http://www.kocw.net/home/cview.do?lid=e0f8d59c1069b035

스케줄러

운영체제에서 스케줄링하는 코드

Long-term scheduler (장기 스케줄러, job scheduler)

  • 시작 프로세스 중 어떤 것들을 Ready Queue로 보낼지 결정
  • 프로세스에 memory(및 각종 자원)을 주는 문제

    프로세스가 상태도에서, 프로세스가 처음에 만들어질 때 바로 ready 상태가 되는 게 아니라 admitted 상태가 되면 넘어감
    그리고 이 Long-term scheduler가 admitted 상태가 되게 해줌

  • degree of Multiprogramming을 제어
    • 메모리에 올라갈 프로그램이 몇 개인지 조절하는 역할
  • time sharing system에는 보통 장기 스케줄러가 없음 (무조건 ready)

    우리가 다루는 일반적인 운영체제는 장기 스케줄러가 없어, 프로그램이 실행되면 무조건 메모리에 진입하여 곧바로 ready 상태로 들어감

장기 스케줄러가 없는데 메모리 관리를 어떻게 할까?
이렇게 time sharing system이 장기 스케줄러가 없는 대신 Medium-Term Scheduler을 둔다.

Short-term scheduler (단기 스케줄러 or CPU Scheduler)

  • 어떤 프로세스를 다음번에 running시킬지 결정
  • 프로세스에 CPU를 주는 문제
  • 타이머 인터럽트가 걸릴 때마다 호출되므로 자주 호출됨
    충분히 빨라야 함 (ms 단위)

Medium-Term Scheduler (중기 스케줄러 or Swapper)

  • 여유 공간 마련을 위해 일부 프로세스를 통째로 메모리에서 디스크로 쫓아냄
  • 프로세스에게서 memory를 뺏는 문제
  • degree of Multiprogramming을 제어

프로세스의 상태 (Process State)


Running

  • CPU를 잡고 instruction을 수행 중인 상태

Ready

  • CPU를 기다리는 상태(메모리 등 다른 조건을 모두 만족하고)

Blocked(wait, sleep)

  • I/O 등의 event를 (스스로) 기다리는 상태
  • (예) 디스크에서 file을 읽어와야 하는 경우

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 를 제외한 상태가 프로세스의 상태로 인지하는 것을 추천

0개의 댓글