[운영체제] 프로세스 스케줄링

hi·2023년 1월 20일
0

운영체제

목록 보기
9/9

✔️ 다중 프로그래밍

다중프로그래밍에서는 여러 프로세스를 동시에 메모리에 올려놓고 실행 중인 프로세스가 입출력을 요청하면 운영체제가 프로세스에 할당된 프로세서를 회수하여 다른 프로세서에 할당함

다중 프로그래밍의 장점

  • 프로세서 이용률을 높일 수 있음
  • 프로세서 처리율 (주어진 시간에만 처리하는 작업량)이 증가

다중 프로그래밍에서 프로세서를 할당할 프로세스를 선택할 때 스케줄링의 개념이 사용됨



✔️ 스케줄링

스케줄링은 여러 프로세스가 번갈아 사용하는 자원을 어떤 시점에서 어떤 프로세스에 할당할 지 결정하는 것을 뜻함. 그리고 이 자원이 프로세서인 경우 프로세서 스케줄링이라고 하는데 대부분의 스케줄링은 프로세서 스케줄링을 의미함. 인터럽트 처리, 오류 처리, 사용자의 시스템 호출 등의 사전 처리는 스케줄링이 필요없음. 반면 사용자 프로세스와 시스템 호출로 발생하는 시스템 프로세스는 스케줄링이 필요. 따라서 자원의 공유 순서나 일정을 조정하는 스케줄링에선 사용자 프로세스와 시스템 프로세스를 다룬다.

✏️ TIP: 여러 프로세스를 동시에 실행하는 것을 다중 작업 (Multi-Tasking)이라 한다.



✔️ 스케줄링의 목적

⭐ 자원 할당의 공정성 보장

모든 프로세스를 공평하게 취급하며, 어떤 프로세스도 실행을 무한 연기해선 안됨.

⭐ 단위시간당 처리량 최대화

단위시간당 유효 시간을 줄이고 프로세서의 처리량을 최대화하여 가능한 많은 프로세스에 서비스를 제공함

⭐ 적절한 반환시간 보장

적절한 시간 안에 응답(프로세스 완료)를 해야 함. 대화식 시스템에선 사용자에게 늦어도 2~3초 이내에 응답해야 함

⭐ 예측 가능성 보장

작업 (프로세스)을 시스템 부하와 상관없이 거의 같은 시간에 거의 같은 비용으로 실행할 수 있어야 함.

⭐ 오버헤드 최소화

일반적으로 오버헤드가 발생하면 자원이 낭비되므로 오버헤드를 줄여야 한다. 하지만 오버헤드가 시스템 전반의 성능을 높일 수 있음

⭐ 자원 사용의 균형 유지

시스템 자원을 가능한 쉬지 않고 사용할 수 있도록 스케줄링 해야함. 유휴 상태의 자원을 사용하려는 프로세스에 특별한 혜택을 줄 수 있다

⭐ 반환시간과 자원의 활용 간에 균형 유지

반환시간을 빠르게 하는 방법은 충분한 자원을 확보하는 것이지만 한 프로세스가 너무 많은 자원을 차지하면 시스템의 자원 활용도가 떨어짐. 실시간 시스템은 빠른 응답이 필요하므로 자원 활용이 상대적으로 덜 중요하지만 다른 형태의 시스템에서는 효과적인 자원 활용이 더 중요

⭐ 실행 대기 방식

실행을 무한 연기하지 않도록 해야 함. 실행의 무한 연기는 교착 상태만큼 나쁜 영향을 줄 때가 많다. 무한 연기 문제는 자원을 오래 기다릴수록 높은 우선순위를 부여하여 언젠가 자원을 확보할 수 있도록 하는 노화방법으로 해결할 수 있다

⭐ 우선순위

우선순위를 부여한 후 스케줄링 방법을 이용하여 우선순위가 높은 프로세스를 먼저 실행하도록 함. 비선점 자원이라면, 스케줄링 방법은 프로세스에 주요 자원을 넘겨주기보단 우선순위에 따라 처리해야 함

⭐ 서비스 사용 기회 확대

프로세스에 더 자주 서비스 사용 기회를 주어야 함. 특히 페이지 부재율이 적은 프로세스에는 더 자주 서비스 사용 기회를 제공해야 함

⭐ 서비스 수 감소 방지

서비스 수가 갑자기 감소해선 안된다. 시스템에 부하가 많이 걸릴 때 갑자기 서비스 수가 감소해선 인된다. 과부하를 방지하거나 프로세스들의 서비스를 줄여 과부하에 대처햐야 한다. 이러한 모순점은 스케줄링을 어렵게 만드는 원인 중 하나


✔️ 프로세서의 동작

프로세스를 프로세서에서 실행할 때를 프로세서 🐒버스트(Burst)🐒 라고 한다.
🐒입출력 버스트🐒는 프로세스가 추가로 실행하려고 입출력을 기다리고 있을 때이다. (파일을 읽어온 뒤 모니터가 출력하길 기다린다든지..)
프로세스는 입출력 버스트 후 다음 프로세서 버스트를 위해 준비 큐(Ready Queue)로 이동한다. 그러므로 프로세스의 실행은 프로세서 버스트와 입출력 버스트는 순환 형태로 구성된다.

프로세세 버스트는 입출력 대기시간에 따라 사용량이 결정된다.

긴 프로세서 버스트는 프로세서를 점유한 상태로 화면에서 모든 입력과 출력을 처리하거나 파일에서 입력과 출력을 하지 않고 메모리와 레지스터에서 오랫동안 하는 작업이다. 그러나 모든 프로그램은 적어도 하나의 입출력 작업을 수행한다. 예를 들어 화면에 나타나지 않는 백그라운드 프로그램은 일반적으로 파일 읽기와 쓰기를 한다.

아래는 입출력 대기시간이 긴 예와 짧은 예인데 입출력 대기시간이 짧으면 프로세서를 오래 차지하여 프로세서 버스트가 길고, 입출력 대기시간이 길면 오히려 입출력을 하려고 프로세서 버스트가 짧다.

따라서 입출력 중심 프로세스는 보통 프로세서 버스트가 매우 짧고, 프로세스 중심 프로세스는 프로세서 버스트가 매우 길다. 이는 대부분의 계산 작업에 해당하며, 완료 시간은 일반적으로 할당받은 프로세서 시간으로 결정한다. 그리고 프로세서 버스트가 짧은 프로세스를 입출력 중심 작업이라 하는데, 짧은 프로세서 버스트는 입출력을 처리하고 다음 입출력을 요청하므로 입출력을 완료하려고 기다리느라 대부분의 시간을 보낸다. 주로 입출력 요청 시간으로 프로세스 완료 시간을 결정하므로, 프로세서 중심 작업과 입출력 중심 작업의 적절한 혼합이 필요함.



✔️ 스케줄링의 단계

⭐ 1단계 작업 스케줄링: 작업 선택

시스템 자원을 사용할 작업을 결정하는 것을 작업 스케줄링이라고 한다. 디스크에 있는 작업 중 프로세스화할 작업과 시스템에 들어갈 작업을 결정하므로 승인 스케줄링이라고도 한다.

⭐ 2단계 작업 승인과 프로세서 결정 스케줄링: 사용 권한 부여


2단계는 프로세서를 사용할 권한을 부여할 프로세서를 결정하는 작업 승인이 일어난다. 또 시스템의 오버헤드에 따라 연기할 프로세스를 잠정적으로 결정함. 이를 통해 메모리 사용성을 높이고 작업의 효율성을 향상시키는 스와핑 기능을 수행한다.

⭐ 3단계 프로세서 할당 스케줄링: 준비 상태의 프로세스에 프로세서 할당 (디스패칭)

프로세서 할당 스케줄링은는 디스패처(분배기)가 준비 상태에 있는 프로세스 중 프로세서를 할당할 프로세스를 결정하는 단계이다.



✔️ 스케줄링 큐

스케줄링에선 크게 Ready 큐와 기타 IO Device 큐가 사용된다. Ready Queue는 일반적으로 시스템에 하나 존재하며 프로세서를 할당받아 실행하려고 기다리는 프로세스들이 대기한다. 그리고 IO Queue에는 입출력 장치를 사용하려는 프로세스들이 대기한다.

Queue는 PCB (Process Control Block)을 연결 리스트로 연결하고 있는 형태이다. Queue에는 Head와 Tail이 있고 각각 연결된 첫 번째 PCB와 마지막 PCB의 포인터 필드를 가리킨다. IO Queue는 필요에 따라 다양하게 추가할 수 있는데 프린터, 디스크, 단말기 등 다양한 장치로 구성되어 있다. 장치가 테이프 드라이브나 시분할 단말기 같은 전용장치일 때 IO Queue는 하나만 가질 수 있으나 디스크와 같이 공유할 수 있는 장치는 IO Queue에 여러 프로세스가 대기할 수 있다.



✔️ 스케줄링과 스케줄러

운영체제는 다양한 스케줄러를 이용하여 스케줄링을 지원한다. 스케줄러의 종류와 프로세스 변화 과정에서 스케줄러가 어떤 역할을 하는지 알아보자!

스케줄러는 스케줄링을 하기 위해 Queueing Diragram 개념을 사용한다.

⭐ Queueing Diagram (큐잉 도표)

Queueing Diagram은 프로세스 스케줄링을 표현하는 방법으로 큐(Ready, IO)는 사각형으로, 자원은 원으로, 프로세스의 흐름은 화살표로 표시한다.

작업이 시스템에 들어오면 PCB를 생성하는데 이는 Task를 종료할때까지 갱신된다. 따라서 실행 준비 상태가 된 프로세스가 Ready Queue에 들어가고 프로세서를 할당받을 때까지 대기한다. 프로세스에 프로세서가 할당되면 다음 중 하나의 작업을 한다.

1. 프로세스가 입출력 요청을 보내고 입출력 큐에 들어간다.
2. 프로세스가 새로운 프로세스를 생성(fork)하고 생성한 프로세스의 종료를 기다린다.
3. 프로세스가 시간 할당량을 초과(시간 종료)하면 Ready Queue에 들어간다.
4. 인터럽트로 프로세서에서 제거된 프로세스는 다시 Ready Queue에 들어간다.

1, 2의 경우 프로세스는 대기 상태에서 준비 상태로 전환디고 다시 Ready Queue에 들어간다. 프로세스는 종료할 때까지 이 순환을 반복한다.



✔️ 스케줄러의 종류와 역할

스케줄링으로 프로세스를 선택할 때는 스케줄러를 사용한다. 운영체제는 스케줄링을 다양한 스케줄러를 통해 지원하고, 주로 장기(Task) 스케줄러와 단기 스케줄러를 사용한다. IO 장치와 IO Ready Queue를 하나씩 갖는 Queueing Diagram을 기준으로 장기 스케줄러와 단기 스케줄러의 역할을 살펴보면 다음과 같다.

⭐ 장기(Task) Scheduler

Task Scheduler는 스케줄링에 따라 작업을 디스크에서 메모리로 가져와 처리할 순서를 결정한다. Task Scheduling에 필요한 정보론 제출 시간, 작업 이름, 작업 길이(용량) 등이 있다. 그리고 선택한 작업에 PCB를 부착시켜 메모리에 적재한 것을 프로세스라고 한다.

⭐ 단기 Scheduler

단기 스케줄러는 메모리에 적재된 프로세스 중 프로세서를 할당하여 실행 상태가 되도록 결정하는 프로세스 스케줄링을 한다.


일괄 처리 시스템을 예로 들면, 일괄 처리 시스템에서는 일반적으로 즉시 처리할 수 있는 양보다 많은 작업이 들어온다. 이 작업들은 디스크 같은 큰 저장장치에 저장되어 있는데, 장기 스케줄러 (Task Scheduler)가 이 중 실행할 작업을 Ready Queue에서 꺼내 메모리에 적재한다. 단기 스케줄러 (프로세서 스케줄러)가 메모리의 준비 상태에 있는 프로세스 중 실행할 프로세스를 선택하여 프로세서를 할당한다.

장기 스케줄러와 단기 스케줄러의 가장 큰 차이는 실행 빈도이며, 단기 스케줄러는 실행할 프로세스를 수시로 선택한다. 장기 스케줄러는 작업이 분 단위로 들어온다. 장기 스케줄러는 다중 프로그래밍의 정도 (degree of multiprogramming, 메모리에 있는 프로세스 수)를 결정한다. 작업이 시스템에 들어오는 정도가 일정하다면 작업의 도착률과 작업을 마치고 나가는 정도가 같다. 그러면 장기 스케줄러는 작업이 시스템을 나갈 때만 실행하여 실행 간격이 상대적으로 길어지므로 실행 시간이 좀 더 길어도 영향을 받지 않음.

0개의 댓글