CPU 스케줄러가 하는 일 :
CPU 스케줄러는 프로세스가 생성된 후 종료될 때까지 모든 상태 변화를 조정하는 역할을 합니다. 이 말은 스케줄러가 어떤 프로세스를 실행 상태에 놔둘지, 혹은 잠시 대기 상태에 놔둘 지, 아니면 다시 준비 상태로 돌릴지를 결정한다는 말입니다. 이렇게 각각의 프로세스의 상태를 조정하는 역할을 하는 스케줄러는 말 그대로 관리자입니다.
CPU 스케줄러는 우선순위를 고려하기도 한다 :
이 스케줄러가 프로세스의 상태를 조정할 때, 들어온 순서대로 프로세스를 실행상태로 보내고, 단순히 타임슬라이스(프로세스가 실행 상태에서 작업하는 시간)가 끝나면 준비상태로 돌릴 수도 있습니다. 그렇지만 우선순위에 따라서 어떤 프로세스를 먼저 실행시키고, 어떤 프로세스를 나중에 실행시킬 수도 있습니다. 이렇게 하는 것이 시스템 전체적으로 봤을 때 더 효율적이기 때문입니다.
그렇다면 이 스케줄러가 프로세스들에 우선순위를 부여하려 할 때 고려하는 것들에는 무엇이 있을까요?
그 내용들에 대해서 알아봅시다.
1.선점형 스케줄링과 비선점형 스케줄링
2.프로세스 우선순위
3.CPU 집중 프로세스와 입출력 집중 프로세스
4.전면 프로세스와 후면 프로세스
1.선점형 스케줄링(preemptive scheduling)과 비선점형 스케줄링(non-preemptive scheduling) :
우선순위에 대해서 알아보기 앞서, 스케줄링에도 방식이있습니다.
2가지 방식이 있는데, 그것이 바로 선점형 스케줄링과 비선점형 스케줄링입니다.
먼저 각각의 정의에 대해서 알아보겠습니다.
선점형 스케줄링 : 어떤 프로세스가 CPU를 할당받아 실행중이더라도 운영체제가 CPU를 강제로 빼앗을 수 있는 스케줄링 방식
비선정혐 스케줄링 : 어떤 프로세스가 CPU를 점유하면 다른 프로세스가 이를 빼앗을 수 없는 스케줄링 방식
다음은 선점형 스케줄링의 특징입니다.
- 선점형 스케줄링은 실행상태(running state)에서 준비 상태(ready state)로 바꿀때나, 대기 상태(waiting state)에서 준비 상태(ready state)로 바꿀 때 사용됩니다.
- 리소스가(CPU 사이클) 프로세스에 제한된 시간동안만 할당됩니다. 그리고 시간이 다하면 빼앗깁니다. 만약 그 프로세스에 남아있는 CPU 버스트 타임이 있다면 준비큐로 돌아가서 다음 실행 차례가 올 때까지 기다립니다.
- 실행중이던 프로세스가 있어도, 더 높은 우선순위의 프로세스가 들어오면 인터럽트 처리가 됩니다.
- 우선순위가 높은 프로세스가 계속해서 준비상태로 들어오면 더 자주 실행되게 될 테고, 그러면 우선순위가 낮은 프로세스는 기다리는 상태로 오랫동안 지속될 수 있습니다. 이것은 아사현상(starvation)으로 이어질 수 있습니다.
- 문맥교환과 같은 부가적인 작업으로 인해서 낭비가 생긴다는 단점이 있습니다.
- 하나의 프로세스가 CPU를 독점할 수 없기 때문에 대화형 시스템이나 시분할 시스템에 적합합니다.
다음은 비선점형 스케줄링의 특징입니다.
- 비선점형 스케줄링은 프로세스가 종료되거나(terminates), 자발적으로 실행중인 상태(running)에서 대기 상태(waiting)로 옮겨질 때 사용됩니다.
- 이 스케줄링에서는 한번 자원이(CPU 사이클) 할당되고 나면, 프로세스는 그 자원을 자신이 사라질 때까지 혹은 대기 상태에 다다를 때까지 놔주지 않습니다.
- 이 스케줄링은 실행중인 상태의 프로세스를 방해하지 않습니다. 그 프로세스가 자신의 CPU burst time을 다 소진할 때까지 기다렸다가, 그제서야 다른 프로세스에 CPU를 할당해줍니다.
- 이 스케줄링 방식은 스케줄러가 하는 일이 비교적 적습니다. 그리고 문맥교환에 의한 낭비도 적습니다.
- 비선점형에서도 아사현상이 생길 수 있는 가능성이 있는데, burst time이 굉장히 큰 프로세스에게 CPU가 할당된다면 매우 작은 burst time을 가진 프로세스가 아사현상에 빠질 수도 있습니다.
2.프로세스 우선순위와 주의점 :
스케줄러의 2가지 방식에 대해서 알아보았습니다. 그렇다면 본격적으로 프로세스에게 우선순위를 부여한다는 말의 의미를 알아보겠습니다.
레스토랑에 갔습니다. 대기 줄에 서서 자신의 차례가 올 때까지 기다립니다. 그러나 예약손님의 경우에는 다릅니다. 미리 예약을 했기 때문에 대기줄에 선 사람들 보다 '우선순위'가 높습니다. 그래서 다른 손님들보다 더 빨리 매장에 입장할 수 있습니다. 만약 일반손님들과 예약손님들 사이에 '우선순위'의 차이가 없다면 예약을 받는 이유가 없습니다.
이렇듯 특정 대상을 '더 빨리' 입장시켜주는 것을 '우선순위'를 부여한다고 말할 수 있을 것 같습니다.
사실 우선순위를 부여한다는 개념은 매우 간단합니다. 그렇다면 컴퓨터로 돌아가 이야기해보겠습니다. 프로세스는 크게 2가지로 나누어집니다. 커널 프로세스와 일반 프로세스가 그것입니다. 커널 프로세스는 일반 프로세스보다 더 우선순위가 높습니다. 일반 프로세스보다 중요한 내용들이 더 많기 때문에 커널 프로세스의 작업이 끝날 때까지 CPU를 계속 할당합니다.
일반 프로세스에는 유저가 사용하는 프로세스들이 있습니다. 이 프로세스들은 각각 우선순위가 다르고, 이것들은 사용자가 우선순위를 조절할 수 있습니다.
주의점 :
단, 주의해야 할 점이 있는데 하나의 프로세스 우선순위를 높일 때 그것만 고려할 것이 아니라, 다른 프로세스의 실행 속도에도 영향을 미친다는 것을 생각해야 합니다.
만약 특정 프로세스의 우선순위만 너무 높이게 되면 다른 프로세스는 제대로 실행되지 않을 것입니다. 그렇기 때문에 우선순위를 높일 수 있는 권한은 관리자에게 있습니다.
3.CPU 집중 프로세스와 입출력 집중 프로세스 :
프로세스가 작업을 완료하기 위해서 거치는 단계는 총 3가지 입니다.
준비, 실행, 대기.
그러나, 준비 상태는 CPU를 할당 받기 위해서 기다리는 상태입니다.
때문에 실제로 작업이 일어나는 상태는 실행 상태와 대기 상태라고 할 수 있을 것입니다.
이때 CPU를 할당받아 실행하는 작업을 CPU burst라고 부르고,
입출력 작업을 I/O burst 라고 부릅니다.
위에서 설명한 작업의 형태를 프로세스 차원에서 명명한다면,
CPU 집중 프로세스(CPU bound process)와 입출력 집중 프로세스(I/O bound process)로 나눌 수 있습니다.
- CPU 집중 프로세스(cpu bound process) :
- 수학 연산과 같이 CPU를 많이 사용하는 프로세스를 말합니다. 즉, CPU 버스트가 많은 프로세스입니다.
- 이는 테스크 혹은 프로그램이 작업을 하는 동안 CPU에 크게 의존하는 시나리오를 말합니다.
- 입출력 집중 프로세스 (I/O bound process) :
- 저장 장치에서 데이터를 복사하는 일과 같이 입출력을 많이 사용하는 프로세스를 말합니다. 즉, 입출력 버스트가 많은 프로세스입니다.
- 태스크나 프로그램의 실행이 디스크 드라이브나 주변 장치 같은 입출력 시스템과 그 자원에 의존한다면, 그것이 입출력 집중 프로세스 입니다.
저희는 우선순위에 대해서 말하고 있었습니다. 그렇다면 이 CPU bound process 와 I/O bound process 중에서 어떤 process의 우선순위를 높이는 것이 좋을까요?
답은 I/O bound process의 우선순위를 높이는 것입니다.
이유를 알아보겠습니다. 만약 I/O bound process가 먼저 실행상태(running status)로 가게 된다면, 입출력의 요구에 의해서 곧바로 wait status로 가게 될 것입니다. 때문에 그 동안 다른 프로세스가 CPU를 사용할 수 있게 됩니다.
하지만, 만약 CPU bound process가 먼저 running status로 가게 된다면, 자신의 타임 슬라이스를 다 사용할 때까지 다른 프로세스를 실행하지 못하게 될 것입니다.
이런 이유로 CPU bound process와 I/O bound process 둘 중 우선순위를 고려할 때는 I/O bound process의 우선순위를 높이는 것으로 결정됩니다. 이렇게 하는 것이 시스템의 효율이 더 높아지기 때문입니다.
4.전면 프로세스와 후면 프로세스 :
마지막으로 전면 프로세스와 후면 프로세스의 우선순위에 대해서 알아봅시다.
- 전면 프로세스 : GUI를 사용하는 운영체제에서 화면의 맨 앞에 놓인 프로세스를 말합니다. 현재 입력과 출력을 사용하는 프로세스이며, 사용자와 상호작용이 가능하여 상호작용 프로세스라고도 부릅니다.
- 후면 프로세스 : 사용자와 상호작용이 없는 프로세스입니다. 압축 프로그램처럼 사용자의 입력 없이 작동하기 때문에 일괄 작업 프로세스라고도 합니다.
쉽게 말하면, 사용자의 입장인 저희가 현재 사용하고 있는 프로세스의 경우 전면 프로세스라고 할 수 있습니다. 그런데, 여러분이 다른 프로그램을 다운로드 받으면서 이 블로그 글을 보고 있다면, 그 프로그램을 다운받는 프로세스를 후면 프로세스라고 할 수 있을 것 같습니다.
정리 :
다음은 대표적인 프로세스들의 우선순위를 정리하여 나타낸 것입니다.
커널 프로세스 > 일반 프로세스
전면 프로세스 > 후면 프로세스
대화형 프로세스 > 일괄처리 프로세스
입출력 집중 프로세스 > CPU 집중 프로세스
참고 :
쉽게 배우는 운영체제 - 한빛아카데미
https://www.guru99.com/cpu-scheduling-algorithms.html#2
https://www.baeldung.com/cs/cpu-io-bound
https://www.geeksforgeeks.org/preemptive-and-non-preemptive-scheduling/