본문 바로가기

짜투리

[운영체제론] CPU 스케줄링을 알아보자~^^

728x90

[출처] 쉽게 배우는 운영체제론

 

 

1. CPU 스케줄링?

: 여러 프로세스의 상황을 고려하여 CPU와 시스템 자원을 어떻게 배정할지 결정하는 일. 

: CPU 스케줄러가 담당함

 


2. 스케줄링의 단계

: CPU 관리의 범주

 

 1) 고수준 스케줄링(=장기 스케줄링, 작업 스케줄링, 승인 스케줄링)

  • 많은 작업을 동시에 하면 시스템에 과부하가 걸려 작업이 원할해지지 않음
  • (프로세스를 활성화할지 말지 결정하는 방식으로)시스템 내의 전체 작업 수 조절
  • 어떤 작업을 시스템이 받아들일지 OR 거부할지 결정 
  • 고수준 스케줄링에 따라 시스템 내에서 동시 실행 가능한 프로세스의 총 개수가 정해짐=> 멀티프로그래밍 정도(degree of multiprogramming) 

 

 2) 저수준 스케줄링((=단기 스케줄링)

  • 가장 작은 단위의 스케줄링(프로세스 단위)
  • 어떤 프로세스에 CPU를 할당할지 결정(준비상태=>실행상태)
  • 어떤 프로세스를 대기상태(I/O 작업을 위함)로 보낼지 결정
  • 실제 작업이 이루어짐

 

 3) 중간 수준 스케줄링

  • 고수준 스케줄링과 저수준 스케줄링 사이에서 일어나는 스케줄링
  • (고수준 스케줄링 이후) 프로세스가 활성화된 후에도 여러 가지 사정으로 시스템에 과부하가 걸릴 수 있음
  • 중지(suspend)와 활성화(active), 전체 시스템의 활성화된 프로세스 수를 조절하여 과부하를 막음
  • => 일부 프로세스를 중지 상태로 옮겨 나머지 프로세스가 원만하게 작동하도록 지원(보류 상태)
  • 저수준 스케줄링이 원만하게 이루어지도록 완충하는 역할
  • 시스템 부하 조절

 

(+) 오늘날의 cpu 스케줄링은 대부분 저수준 스케줄링 + 중간 수준 스케줄링으로 이루어짐. 고수준은 메인프레임과 같은 큰 시스템에서 규모가 큰 일괄작업을 처리할 때 사용함.

(+) 앞으로 말하는 스케줄러는 별다른 명시가 없으면 저수준 스케줄링임.

 


3. 스케줄링의 목적: 모든 프로세스가 공평하게 작업하도록 하는 것

  • 공평성: 모든 프로세스가 자원을 공평하게 배정받아야 함
  • 효율성: 시스템 자원이 유휴 시간없이 사용되도록 스케줄링. 유휴 자원을 사용하려는 프로세스에는 우선권을 주어야 함.
  • 안정성: 시스템 자원을 점유하거나 파괴하려는 프로세스로부터 자원을 보호해야 함
  • 확장성: 프로세스가 증가해도 시스템이 안정적으로 작동하도록 조치해야 함
  • 반응 시간 보장: 시스템은 적절한 시간 안에 프로세스의 요구에 반응해야 함
  • 무한 연기 방지
  • BUT, 운영체제 프로세스는 일반 프로세스보다 우선적으로 CPU를 배정받아야 함(시스템의 안정성과 효율성을 높이기 위함)

 


4. 선점형 스케줄링 VS 비선점형 스케줄링

 1) 선점형 스케줄링

  • (어떤 프로세스가 CPU를 할당받아 실행 중이더라도) 운영체제가 CPU를 강제로 빼앗을 수 있는 스케줄링
  • EX) 인터럽트 처리- I/O작업을 위해 실행 상태=> 대기 상태로 이동
  • 단점: 부가적인 작업(EX, 문맥교환)으로 인한 낭비 발생
  • 하나의 프로세스가 CPU 독점 불가능=> 빠른 응답시간을 요구하는 대화형 시스템 OR 시분할 시스템에 적합
  • 대부분의 저수준 스케줄러는 선점형 스케줄링 방식 사용

 

 2) 비선점형 스케줄링

  • 어떤 프로세스가 CPU를 점유하면 다른 프로세스가 이를 빼앗을 수 없는 스케줄링 방식
  • 어떤 프로세스가 실행 상태에 들어가 CPU를 사용하면 그 프로세스가 종료되거난 자발적으로 대기 상태에 들어가기 전까지는 계속 실행 됨
  • 장점: 선점형 스케줄링보다 스케줄러의 작업량이 적고 문맥 교환에 의한 낭비도 적음
  • 단점: CPU 사용 시간이 긴 프로세스 때문에 CPU 사용 시간이 짧은 여러 프로세스가 오랫동안 기다리게 되어 전체 시스템의 처리율이 떨어짐
  • 과거 일괄 작업 시스템에세 사용하던 방식

 

 


5. 프로세스 우선순위

  • 커널 프로세스>일반 프로세스
  • 일반 프로세스의 우선순위는 사용자가 조절할 수 있음
  • 관리자만 우선순위를 높일 수 있고 일반 계정은 우선순위를 낮누는 것만 가능

 


6. CPU 집중 프로세스와 입출력 집중 프로세스

  • CPU 버스트: CPU를 할당받아 실행하는 작업
  • 입출력 버스트: 입출력 작업
  • CPU 집중 프로세스: CPU 버스트가 많은 프로세스
  • 입출력 집중 프로세스: 입출력 버스트가 많은 프로세스
  • => 입출력 집중 프로세스를 CPU 집중 프로세스보다 먼저 실행 상태로 옮기는 것이 효율적(다른 프로세스가 CPU를 사용할 수 있기 때문)
  • => 사이클 훔치기(cycle sealing): 입출력 프로세스가가 CPU 집중 프로세스보다 실행 상태에 먼저 들어가는 경우  

 


7. 전면 프로세스 VS 후면 프로세스

 1) 전면 프로세스

  • GUI를 사용하는 운영체제에서 화면의 맨 앞에 높인 프로세스
  • 현재 입출력을 사용하는 프로세스
  • 사용자와 상호작영이 가능- 상호작용 프로세스

 2) 후면 프로세스

  • 사용자와 상호작용이 없는 프로세스
  • 사용자의 입력 없이 작동- 일괄 작업 프로세스

=> 전면 프로세스는 사용자의 요구에 즉각 반응해야 하기 때문에, 전면 프로세스의 우선순위가 후면 프로세스보다 높음

 

BUT, 프로세스에 따라 대화형인지, 입출력 집중인지 명확한지 구분할 수 없는 경우도 존재. 이때는 우선순위 고려가 어려울 지도..

 


8. 다중큐

 1) 왜 필요함? 프로세스의 중요도는 프로세스 제어 블록(PCB)에 표시된다. CPU 스케줄러는 모든 PCB를 뒤져서 가장 높은 우선순위의 프로세스에 CPU를 할당하는데, 매번 PCB를 검색하는 것은 번거로움. 

 

8-1. 준비상태의 다중 큐

 - 프로세스의 우선순위를 배정하는 방식

  • 고정 우선순위 방식: 운영체제가 프로세스에 우선순위를 부여하면 프로세스가 끝날때까지 바뀌지 않는 방식(구현 쉬움, 시스템 변화에 대응 어려움)
  • 변동 우선순위 방식: 프로세스 생성 시 부여받은 우선순위가 프로세스 작업 중간에 변하는 방식(구현 어려움, 시스템의 효율성 높일 수 있음)
  • (+) 반전 우선순위: 프로세스의 낮은 우선순위를 높은 우선순위로 바꾸는 것=> 시스템 효율 향상

우선순위가 가장 높은 6번부터 실행

 

8-2. 대기상태의 다중 큐

  • 시스템 내에 있는 다양한 종류의 입출력 장치가 존재. 대시 상태의 프로세스를 한 곳에 모아놓으면 관리가 불편함. 
  • => 같은 입출력을 기다리는 프로세스끼리 모여있는 대기 큐를 나타낸 것

인터럽트 벡터: 동ㅇ시에 완료된 입출력 정보 처리 방법

 

8-3. 준비 상태 다중 큐 VS 대기 상태의 다중 큐

  • 준비 큐- 한 번에 하나의 프로세스를 꺼내어 CPU 할당
  • 대기 큐- 여러 개의 PCB를 동시에 꺼내 준비 상태로 옮김

 


9. 스케줄링 알고리즘


10. 스케줄링 알고리즘 선택 기준

  • CPU 사용률: 전체 시스템의 동작 시간 중 CPU가 사용된 시간을 측정하는 방법
  • 처리량: 단위 시간당 작업을 마친 프로세스 수
  • 대기시간: 작업을 요청한 프로세스가 작업을 시작하기 전까지 대기하는 시간
  • 응답시간: 프로세스 시작 후 첫 번째 출력 OR 반응이 나올때까지 걸리는 시간
  • 반환시간: 프로세스가 생성된 후 종료되어 사용하던 자원을 모두 반환하는 데까지 걸리는 시간

=> 스케줄링 알고리즘 성능 비교할 때 주로 평균 대기 시간을 봄

 

 


11. FCFS(First Come First Served) 스케줄링(=선입선출 스케줄링)

  • 준비큐에 도착한 순서대로 CPU 할당
  • 비선점형

- 단점

  • 비선점형- 한 번 실행되면 그 프로세스가 끝내야만 다음 프로세스 실행 가능
  • 큐가 하나라 모든 프로세스의 우선순위가 동일 함. 
  • 콘보이 효과 OR 호위 효과: 처리 시간이 긴 프로세스가 CPU를 차지하여 다른 프로세스들이 하염없이 기다려 시스템의 효율성이 떨어지는 문제
  • 현재 작업 중인 프로세스가 입출력 작업을 요청하는 경우 CPU가 작업하지 않고 쉬는 시간이 많아져 작업 효율이 떨어지는 것=> 일괄작업시스템

 


12. SJF(Shortest Job First) 스케줄링(=최단작업 우선 스케줄링)

  • 준비 큐에 있는 프로세스 중에서 실행 시간이 가장 짧은 작업부터 CPU를 할당
  • 비선점형

- 단점

  • 운영체제가 프로세스의 종료 시간을 정확하게 예측하기 어려움=> WHY? 사용자와의 상호작용(입출력 등)이 빈번하게 발생하기 때문.
  • 공평하지 못함=> 아사현상 OR 무한 봉쇄 현상: 작업 시간이 길다는 이유로 계속 뒤로 밀림

- 해결 방법?

  • 프로세스가 자신의 작업 시간을 운영체제에 알려주어 해결 BUT, 프로세스가 자신의 작업 시간을 정확히 알기 어려움 + 일부 악의적인 프로세스가 작업 시간을 속이면 시스템의 효율성이 나빠짐
  • 에이징(나이먹기): 프로세스가 양보할 수 있는 상한선을 정하는 방식

(+) SJF는 프로세스 종료시간 파악 어려움 + 아사현상 발생 때문에 잘 사용하지 않음

 

 


13. HRN(Highest Response Ratio Next) 스케줄링(=최고 응답률 우선 스케줄링)

  • 대기시간과 CPU 사용시간을 고려하여 스케줄링 하는 방식=> 아사현상 완화
  • 비선점형

(+) SJF와 비교했을 때 대기 시간이 긴 프로세스의 우선순위를 높여 CPU 할당받을 확률을 높였지만, 여전히 공평성이 위배되어 많이 사용되지 않음

 

 


14. 라운드 로빈(Round Robin) 스케줄링

  • 한 프로세스가 할당받은 시간(타임 슬라이스) 동안 작업을 하다가 작업을 완료하지 못하면 준비 큐의 맨 뒤로 가서 자기 차례를 기다리는 방식
  • 선점형
  • FCFS와 유사한데 타임슬라이스(CPU를 사용할 수 있는 최대시간)가 있음
  • 우선순위가 적용되지 않은 가장 단순한 선점형 스케줄링 방식

- 장점

  • 선점형- 프로세스가 CPU를 일정 시간 동안 사용한 후 다른 프로세스에 주어야 하기 때문에 앞의 긴 작업을 무작정 기다리는 콘베이 효과가 감소함

- 단점

  • 라운드 로빈과 FCFS의 평균 대기 시간이 같다면 라운드 로빈이 더 비효율적인 알고리즘임=> WHY? 선점형이라 문맥 교환 시간이 추가되기 때문

- 타임 슬라이스의 크기는 프로세스의 반응 시간에 영향을 미칠 뿐 아니라 시스템 전체의 성능에도 영향을 미침.

  • 타임 슬라이스가 큰 경우: 하나의 작업이 끝난 뒤 다음 작업 시작되는 것처럼 보임. EX) 비디오-워드 작업 시, 비디오가 끊겨보이고 워드프로세서의 반응 속도가 매우 느릴 것임.
  • 타임 슬라이스가 작은 경우: 여러 프로그램이 동시에 실행되는 것처럼 느낌. BUT, 너무 작게 설정할 경우 문맥 교환이 너무 자주 일어나 문맥교환에 낭비되는 시간이 많아짐.=> 시스템의 전반적인 성능이 떨어짐.

 


15. SRT(Shortest Remaining Time) 스케줄링(=최소 잔류 시간 우선 스케줄링)

  • SJF 스케줄링 + 라운드 로빈 스케줄링, SJF 스케줄링의 선점형 버전
  • 선점형
  • 기본적으로 라운드 로빈 스케줄링을 사용하지만, CPU를 할당받을 프로세스를 선택할 때 남아 있는 작업 시간이 가장 적은 프로세스를 선택함

 


16. 우선순위 스케줄링

  • 우선순위를 반영한 스케줄링 알고리즘
  • 선점형 OR 비선점형 방식으로 구현 가능
  • 고정 우선순위 알고리즘, 변동 우선순위 알고리즘

- 단점

  • 공평성 위배, 아사 현상을 일으킴
  • 프로세스의 우선순위를 매번 바꿔야 하기 때문에 오버헤드가 발생하여 시스템의 효율성을 떨어뜨림

 


17. 다단계 큐(Multilevel Queue) 스케줄링

  • 우선순위에 따라 준비 큐를 여러 개 사용하는 방식
  • 프로세스는 운영체제로부터 부여받은 우선순위에 따라 해당 우선순위의 큐에 삽입 됨
  • 고정형 우선순위 사용
  • 상단의 큐에 있는 모든 프로세스의 작업이 끝나야 다음 우선순위 큐의 작업이 시작 됨

 


18. 다단계 피드백 큐(Multilevel Feedback Queue) 스케줄링

  • CPU를 사용하고 난 프로세스의 우선순위는 낮아짐
  • 우선순위가 낮아진다고 해도 커널 프로세스가 일반 프로세스의 큐에 삽입되지 않음
  • 우선순위에 따라 타임 슬라이스 크기가 다름=> 우선순위가 낮은 프로세스가 어렵게 얻은 CPU를 좀 더 오랫동안 사용할 수 있도록 타임슬라이스를 크게 설정
  • 마지막 큐에 있는 프로세스는 무한대의 타임 슬라이스를 얻음
  • 마지막 큐는 FCFS 스케줄링 방식으로 움직임