Scheduling
과거 배치 시스템과 TimeSharing 방식의 컴퓨터가 있었을 때는 CPU가 매우 희귀한 자원이었다.
그래서 이 비싸고 귀중한 CPU 자원을 최대한 많은 프로세스를 처리하는데 효율적으로 쓰기 위해서 여러가지 고민이 필요했다.
시간이 지나면서 CPU 성능이 증가하고 개인용 컴퓨터 시대가 온 뒤에는 과거만큼 CPU를 효율적으로 사용하기 위한 스케줄링 알고리즘의 고민 필요성이 낮아졌지만, 그럼에도 불구하고 서버 컴퓨터와 같은 고성능 컴퓨터에서는 스케줄링 알고리즘에 대한 고민이 필요하다.
(보통 서버컴퓨터는 접속하는 클라이언트마다 프로세스를 생성하기 때문이다.)
그리고 프로세스는 계속 상태가 변하면서 번갈아 실행이 되는데,
이렇게 실행하는 프로세스를 교체하는 것을 가리켜 프로세스 스위칭 또는 컨텍스트 스위칭이라고 한다.
그런데 이 프로세스 스위칭은 상대적으로 시간이 오래 걸리는 작업이기 때문에 스위칭을 최소화하는 것이 중요하다.
(프로세스의 상태를 저장하고, 저장했던 프로세스 상태를 다시 가져오는 과정이 필요하다.)
Process Behavior
프로세스는 서로 행동 패턴이 다르다.
어떤 프로세스는 CPU를 사용하는 시간이 길고 I/O는 상대적으로 적게 일어나는 반면, (CPU bound process, compute-bound process)
어떤 프로세스는 CPU를 쓰는 시간이 짧고, 상대적으로 I/O 가 빈번하게 발생한다. (I/O-bound process)
여기에서 중요한 점,
CPU bound process 는 CPU burst가 길고, I/O-Bound process 는 CPU burst가 짧다.
I/O-bound process 에 대해, I/O burst가 길다고 말하면 틀린 말이다.
스케줄링이 발생하는 상황
1. 프로세스 생성
새로 생성된 프로세스를 앞으로 언제 실행할 것인지 결정해야 하므로 스케줄링이 필요하다.
예를 들어 부모 프로세스에서 자식 프로세스를 생성했을 때, 계속 부모 프로세스를 실행할 지, 자식 프로세스를 실행할 지 결정해야 한다.
2. 프로세스 종료
프로세스가 종료되면, 그 이후에 다른 프로세스를 running 상태로 올려야 한다.
이때 어떤 프로세스를 올릴 지 결정하려면 역시 스케줄링이 필요하다.
3. 프로세스 Blcoked
프로세스가 blocked 상태가 되었을 때도 마찬가지로 현재 running 이 비게 되었으니 어떤 프로세스를 running 으로 올릴지 결정해야 한다.
4. I/O 인터럽트
어떤 프로세스가 I/O 요청을 보내서 Blocked 상태가 되었다고 하자.
이때 I/O 작업이 끝나면 I/O 인터럽트가 발생할 것이다.
인터럽트가 발생하면 인터럽트를 처리하기 위해 인터럽트 핸들러가 실행되면서 기존의 running 상태인 프로세스가 잠시 내려오게 된다.
이후 인터럽트 핸들러의 실행이 종료되고 나면 running에 올릴 프로세스를 3가지 중에 골라야 한다.
1. 억울하게 끌어내려진 기존의 프로세스를 다시 올린다.
2. I/O 를 요청했던 그 프로세스를 올린다.
3. 제 3의 프로세스를 올린다.
보통은 1번을 선택할 것이지만, 어쨌든 이 과정에서도 스케줄링이 발생한다.
스케줄링 알고리즘의 분류
선점형과 비선점형
- 선점형 스케줄링 (Preemptive Scheduling)
각 프로세스가 CPU를 사용할 수 있는 최대 시간을 정해놓고, 그 시간이 지나도 여전히 CPU를 사용한다면 ready 상태로 내려보낸 뒤, 다른 프로세스를 running 상태로 올리는 것 (CPU 자원을 빼앗아 다른 프로세스에게 주는 것)
- 비선점형 스케줄링 (Nonpreemptive Scheduling)
한 프로세스가 CPU를 점유하면, 그 프로세스가 blocked 상태에 빠지거나 CPU자원을 모두 사용할 때까지 실행하는 것
시스템 종류
모든 시스템은 각각의 프로세스가 공평하게 CPU를 할당받는 '공정성 (Fairness)' 이 지켜지기를 원한다.
또 현재 실행중인 프로세스의 상태를 확인하고 (Policy Enforecement),
시스템을 구성하는 모든 프로세스가 균형있게 모두 활용되기를 원한다. (Balance)
이에 더해 각각의 시스템은 그 시스템의 목적에 따라 사용하는 스케줄링 알고리즘의 특징이 달라진다.
- batch system
배치 시스템을 구성하는 프로세스들을 스케줄링할 때는 선점형, 비선점형 모두 사용한다.
선점형 알고리즘을 사용할 때는 프로세스가 사용할 수 있는 시간을 길게 준다.
배치 시스템은 모아놨다가 한번에 처리하는 시스템이므로 실행시간이 길고 사용자와의 interaction은 없기 때문이다.
그래서 배치 시스템은 process switching 을 최소화하여 성능을 높이는 것에 중점을 둔다.
단위 시간당 처리하는 job의 개수인 Throughput 을 최대한 높이고,
이전 프로세스가 끝나고 현재 프로세스가 종료될 때까지의 시간인 Turnaround Time 을 최대한 줄이며,
항상 CPU를 높은 활용율로 사용하는 CPU Utilization을 높이는 것을 목표로 한다.
- interactive system
인터렉티브 시스템을 구성하는 프로세스들은 각 프로세스가 클라이언트(유저)를 상대할 수 있다.
이때 각 유저 입장에서는 자신을 상대하는 프로세스들이 빠르게 동작하기를 원하므로, 선점형 알고리즘을 사용하고 할당 시간을 짧게 주어서 여러 프로세스가 빠르게 돌아가면서 CPU를 점유하도록 한다.
이처럼 인터렉티브 시스템에서는 반응시간을 높이는 것에 중점을 둔다.
클라이언트의 요청에 응답하는 시간인 Response Time을 줄이고, 사용자의 기대를 만족시키기는 것을 목표로한다.
사용자의 기대라고 한다면, 가령 클라우드 서버에 500MB 크기의 비디오를 업로드할 때, 사용자는 당연히 시간이 걸릴 것을 기대하므로 조금 오래 걸려도 괜찮지만, 업로드가 끝난 뒤 클라우드 서버와 연결을 종료하려고 할 때는 빠르게 끝나기를 기대하므로 시간이 오래걸리면 불만이 생길 것이다.
따라서 이런 사용자의 기대에 맞추어 프로세스의 시간이 적절히 배분되도록 하는 것 역시 인터렉티브 시스템의 목표이다.
- real-time system
실시간 시스템을 구성하는 프로세스는 자신이 수행하는 일에 대해 deadline이 있어서 그 시간 안에 작업을 끝마쳐야 한다.
(예를 들면 미사일 발사 시스템, 비행기 착륙 시스템의 경우, 실시간으로 상황에 따라 즉각적으로 반응하며 상태를 조정해야 한다.)
이때 각각의 프로세스가 해야할 일은 정해져있고, 그 작업 단위 역시 길지 않기 때문에 보통 선점형보다는 비선점형 스케줄링 알고리즘을 사용한다.
'CS > 운영체제' 카테고리의 다른 글
[운영체제] 9. 스케줄링 (3) - Interactive System 스케줄링 (0) | 2024.10.20 |
---|---|
[운영체제] 8. 스케줄링 (2) - Batch System 스케줄링 (2) | 2024.10.20 |
[운영체제] 6. 프로세스 동기화 (4) - 식사하는 철학자 문제 (2) | 2024.10.19 |
[운영체제] 5. 프로세스 동기화 (3) - Message Passing, Barrier (0) | 2024.10.19 |
[운영체제] 4. 프로세스 동기화 (2) - 세마포, 뮤텍스, 모니터 (0) | 2024.10.19 |