CPU Scheduling (1)

최동혁·2022년 12월 8일
0

운영체제

목록 보기
10/10
post-custom-banner

CPU and I/O Bursts in Program Execuiton

  • 어떤 프로그램이든 간에 위의 그림같은 path를 실행하면서 진행된다.

  • load store add store 이런것들이 프로그램에서 기계어를 실행하는 인스트럭션이다.

  • 이런 인스트럭션들을 실행하다가 read from file 같은 오래 걸리는 I/O 작업 같은 경우 wait(block) 상태이다가, 작업이 끝나면 다시 ready 상태로 돌아옴.

  • 그러고 다시 CPU를 얻어서 인스트럭션 실행.

  • 그래서 CPU를 연속적으로 쓰면서 인스트럭션을 실행하는 단계를 CPU burst라고 한다.

  • I/O를 실행하는 단계를 I/O burst 라고 부른다.

어떤 프로그램이든 프로그램이 실행된다는 것은 CPU와 I/O burst를 반복하며 실행이 됨

CPU-burst Time의 분포

  • 여러 종류의 job(=process)이 섞여 있기 때문에 CPU 스케줄링이 필요하다.

    • Interactive job에게 적절한 response 제공 요망
    • CPU와 I/O 장치 등 시스템 자원을 골고루 효율적으로 사용
  • 위의 그림에서 CPU를 짧게 쓰고 중간에 I/O가 빈번히 끼어드는 작업을 I/O bound job이라고 부른다.

  • CPU를 오랫동안 자주 쓰는 작업을 CPU bound job이라고 부른다.

  • 위의 그림을 보면 CPU를 많이 쓰는 작업이 I/O bound job이라고 착각할 수 있지만, 실제로는 CPU bound job이 CPU를 많이 쓰고, I/O bound job은 CPU를 짧게 쓰는데, 빈도가 잦은 것임.

  • CPU scheduling이 필요한 이유가 CPU를 공평하게 주기 보다는 사람과 interaction을 많이 하는 job에게 CPU를 우선적으로 주는것이 필요하기 때문이다.

프로세스의 특성 분류

  • 프로세스는 그 특성에 따라 다음 두 가지로 나눔
    • I/O bound process
      • 주로 사람과 소통하는 job
      • CPU를 잡고 계산하는 시간보다 I/O에 많은 시간이 필요한 job
      • 그렇기 때문에 CPU bursts가 빈번하고 짧다.
      • (many short CPU bursts)
    • CPU bound process
      • I/O가 없기 때문에 CPU를 연속적으로 씀.
      • 계산 위주의 job
      • 그렇기 때문에 CPU를 연속적으로 쓰는 시간이 길어지고, 빈번하지 않다.
      • (few very long CPU bursts)

CPU Scheduler & Dispatcher

  • CPU Scheduler
    • CPU Scheduler는 따로 하드웨어이거나 프로그램이 아닌, 운영체제 안에 CPU를 스케줄링 해주는 코드가 따로 있는데 그것을 CPU Scheduler라고 한다.
    • Ready 상태의 프로세스 중에서 이번에 CPU를 줄 프로세스를 고른다.
  • Dispatcher
    • 이것또한 운영체제 안에 코드가 존재함.
    • CPU의 제어권을 CPU scheduler에 의해 선택된 프로세스에게 넘긴다.
    • 이 과정을 context switch라고 한다.
  • CPU 스케줄링이 필요한 경우는 프로세스에게 다음과 같은 상태 변화가 있는 경우이다.
    1. Running -> Blocked (예 : I/O 요청하는 시스템 콜) -> CPU를 잡고 있다가 I/O 작업 같이 오래 걸리는 작업을 하러간 경우. 자진해서 CPU를 내어 놓는다.
    2. Running -> Ready (예 : 할당 시간 만료로 timer interrupt) -> CPU를 쓰고 싶은데 무한정 줄 수 없기 때문에 빼앗는 경우.
    3. Blocked -> Ready (예 : I/O 완료 후 인터럽트) -> 오래 걸리는 작업이 끝나면, device controller가 interrupt를 걸어서 이 프로세스의 상태를 Ready로 바꿔줌. CPU를 얻을 수 있는 권한을 주는 것임. 여기서 보통은 Ready 상태로 보내지만, 곧바로 다시 CPU를 얻어야 하는 경우도 있음. 우선순위가 제일 높은 프로세스라면, 이미 CPU를 쓰고 있는 프로세스가 시간이 남아있다고 하더라도 바로 넘겨줘야 하는 스케줄링도 경우에 따라 있다.
    4. Terminate -> 종료되서 더 이상 할 일이 없어서 새로운 프로세스에게 CPU를 넘김.
  • 1, 4 에서의 스케줄링은 nonpreemptive (=강제로 빼앗지 않고 자진 반납)
  • All otehr scheduling is preemptive (=강제로 빼앗음)
profile
항상 성장하는 개발자 최동혁입니다.
post-custom-banner

0개의 댓글