보글보글 개발일지
article thumbnail
반응형

스케줄러

한정적 메모리를 여러 프로세스가 효율적으로 사용할 수 있도록 다음 실행 시간에 실행할 수 있는 프로세스 중에 하나를 선택하는 역할

  • 프로세스들은 자신이 종료될 때까지 수많은 큐들을 돌아다닌다. OS는 이 큐 안에 있는 프로세스 중 하나를 선택해야 하며, 이러한 일을 스케줄러(Scheduler)가 담당한다.

프로세스 스케줄링 위한 Queue의 종류

  • 작업 큐(Job Queue) : 현재 시스템 내의 모든 프로세스의 집합
  • 준비 큐(Ready Queue) : 현재 메모리 내에 있으면서 CPU를 할당받고 실행되기 위해 기다리는 프로세스의 집합
  • 장치 큐(Device Queue) : 각각의 장치마다 서비스를 기다리며 줄 서 있는 프로세스의 집합

스케줄러의 목적

- CPU나 자원을 효율적으로 사용하기 위함

- 멀티 프로그래밍에서 CPU 효율을 극대화 하기 위함

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

  • 프로세스의 상태 : new -> ready (in memory) / Running(or Ready) -> Terminated
  • 시작 프로세스(Job Queue) 중 어떤 것들을 Ready Queue로 보낼지 결정
  • 프로세스에 memory및 각종 자원을 주는 문제 - 메모리와 디스크 사이의 스케줄링 담당
  • 메모리에 올라가 있는 프로세스의 수를 제어하는 역할 (Degree of Multiprogramming) - 메모리에 프로그램이 너무 적게 들어가거나 너무 많이 들어가는 경우 성능 저하
    • CPU Burst와 I/O Burst 사이의 균형을 유지해야 하므로 스케줄링 실행시간이 상대적으로 길더라도 신중하게 프로세스를 선택해야 함.
    • 한쪽에 지나치게 집중되면 Ready Queue와 Device Queue 중 한쪽에 치우칠 것이고 단기 스케줄러의 균형도 무너질 것
      • I/O bound process : 입출력 많은 프로세스 (이 비율이 높으면 놀고 있는 cpu 많아짐)
      • CPU bound process : CPU가 계산을 해줘야 하는 비중이 큰 프로세스 (이 비율이 높으면 사용자와 상호적이지 못해서 실시간적인 의미 없어짐)
  • 실행을 위해 메모리에 적재. 
  • time sharing system 에는 보통 장기 스케줄러가 없음(무조건 ready)
    • 더보기
      →즉, 보통 우리가 사용하는 시스템에서는 장기 스케줄러가 없다. 프로그램이 시작이 되면 곧바로 메모리로 올라가게 됨→프로그램 100개 실행시 100개가 ready 상태로 가게됨→그럼 보통 우리가 사용하는 프로그램은 어떻게 degree or Multiprogramming 을 제어하냐?→중기 스케줄러가 조절함

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

  • 프로세스의 상태 : ready -> running -> waiting -> ready
  • 어떤 프로세스에게 CPU할당? (준비, 실행, 대기 상태 관리) - 메모리와 CPU 사이의 스케줄링을 관리
  • Ready Queue에서 어떤 프로세스를 다음번에 running 시킬지 결정
  • 10개의 프로세스가 장기 스케줄러에 의해 Ready Queue로 올라왔다고 가정.
    • CPU는 이 중 하나의 프로세스를 선택해서 실행해야 하는데 그것을 스케줄링 해주는 것이 단기 스케줄러
  • 충분히 빨라야 함(millisecond 단위)→즉 잦은 스케줄이 이뤄짐: 사용자에게 여러개의 프로세스를 동시실행되고 있는 것 처럼 보이게 하기위해 아주 짧은 시간으로 쪼개서 스케줄링

Medium-term scheduler(중기 스케줄러 or Swapper)

  • 프로세스의 상태 : ready -> suspended
  • 메모리에 적재된 프로세스 수 관리 (중단된 준비, 대기 상태 관리)
  • 시분할 시스템에서 추가로 사용하며, 메모리에 대한 가중을 완화시켜주기 위해 중기 스케줄러 도입.
  • CPU를 차지하기 위한 경쟁이 심해질 때, 우선순위가 낮은 프로세스들을 잠시 제거한 뒤, 나중에 경쟁이 완화되었을 때 다시 디스크에서 메모리로 불러와 중단되었던 지점부터 실행시킨다. (Swapping)
  • 즉, 프로세스들이 서로 CPU를 차지하려고 경쟁이 심해지면 Swapping 기법을 활용하여 메모리를 관리함으로써 너무 많은 프로그램이 동시에 올라가는 것을 조절한다.

Swap

swap out :

메모리에서 디스크로 잠시 나가는 상태

swap in :

디스크에서 메모리로 다시 들어오는 상태

Suspended 상태

Suspended(stopped)

  • 외부적인 이유로 프로세스의 수행이 정지된 상태
  • 프로세스는 통째로 디스크에 swap out 됨
  • (예)사용자가 프로그램을 일시 정지 시킨 경우 (break key)(메모리에 너무 많은 프로세스가 올라와 있을 때)
  • (예) 시스템이 여러 이유로 프로세스를 잠시 중단시킴

Suspended vs Blocked

  • Blocked: 자신이 요청한 event가 만족되면 Ready 상태로 돌아갈 수 있다. 다른 I/O 작업을 기다리는 상태
  • Suspended :외부적인 이유로 프로세스의 수행이 정지된 상태로 메모리에서 내려간 상태를 의미한다. 프로세스 전부 디스크로 Swap out 된다. 외부적인 이유로 suspending 되었기 때문에 스스로 돌아갈 수 없다. 외부에서 resume 해주어야 Active 될 수 있다. 

중기 스케줄러 좀 더 자세하게

Unix나 Window에서는 장기 스케줄러가 거의 사용되지 않는다고 한다.
왜냐하면 일단 작업이 큐에 들어오면 닥치는대로 메모리에 올린다.
물론 OS 자체적인 제한을 두거나 사용자 스스로 제한을 할 수 있도록 하기도 한다.

이를 시분할 시스템에서 어느정도 시스템적으로 완하하기 위해 중기 스케줄러를 도입한 것 같다.
중기 스케줄러를 사용해 메모리에서 CPU를 쓰기 위해 경쟁하고 있는 프로세스들을 몇 개 제거한다.
그리고 추후에 다시 메모리로 불러와서 중단되었던 지점부터 다시 실행을 재게하게 하는 것이다.
-> 스와핑(Swapping) 기법

중기 스케줄러에 의해 프로세스들이 CPU를 차지하려고 경쟁이 심해지면, 
Swap out 되어 메모리를 떠났다가 다시 Swap in 되어 메모리로 돌아온다는 것이다.

  • 작업(Job)이 도착하면 입력 큐(또는 준비 큐)에서 장기 스케줄러에 의해 메모리에 적재된다.
  • 단기 스케줄러에 의해 선택되어 CPU를 할당받게 된다.
  • Memory Scheduler는 중기 스케줄러의 역할을 하며, 프로세스들이 메모리에서 디스크로 Swap in, Swap out 되는 것을 볼 수 있다.
 

GitHub - WooVictory/Ready-For-Tech-Interview: 💻 신입 개발자로서 준비를 하기 위해 지식을 정리하는 공간

💻 신입 개발자로서 준비를 하기 위해 지식을 정리하는 공간 👨‍💻. Contribute to WooVictory/Ready-For-Tech-Interview development by creating an account on GitHub.

github.com

질문

현대 OS에는 단기, 중기, 장기 스케쥴러를 모두 사용하고 있나요?

더보기

현대의 시분할 시스템에서 사용되는 운영 체제에는 일반적으로 장기 스케줄러를 두지 않는 경우가 대부분 이다. 과거에는 적은 양의 메모리를 많은 프로세스들에게 할당하면 프로세스당 메모리 보유량이 적어져 장기 스케줄러가 이를 조절하는 역할을 했지만 현대의 운영체제 에서는 프로세스가 시작되면 장기 스케줄러 없이 바로 그 프로세스에 메모리를 할당해 준비 큐에 넣어주게 된다.

  • 현대 운영체제에서는 대부분 시분할 방식인 Round Robin을 사용한다. (자원 독점X)
  • 중기 스케줄러는 잘 사용하지 않는다.
    • 가상메모리를 사용하면 프로세스의 전체가 아닌 일부만 실제 메모리에 올라와도 된다.
    • 따라서 실제 메모리 용량보다 큰 프로그램을 실행시킬 수 있고 메모리의 크기에 제약이 없어졌다.
반응형
profile

보글보글 개발일지

@보글

포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!