멀티태스킹(Multitasking), 멀티프로세싱(Multiprocessing), 그리고 스케줄링(Scheduling)은 컴퓨터 운영체제에서 중요한 개념들로, 시스템 자원을 효율적으로 사용하기 위해 다양한 작업을 동시에 처리하는 방식을 의미합니다. 이 개념들은 각기 다르지만 상호 연관되어 있으며, CPU 자원 관리에 중요한 역할을 합니다.
멀티태스킹은 하나의 CPU에서 여러 작업(프로세스나 스레드)을 번갈아 가며 처리하는 방식을 말합니다. CPU가 매우 빠른 속도로 여러 작업을 교차 처리하기 때문에, 사용자 입장에서는 여러 작업이 동시에 수행되는 것처럼 보입니다.
종류
협동적 멀티태스킹 (Cooperative Multitasking): 각 작업(프로세스)이 스스로 CPU 제어권을 양보할 때까지 운영체제가 기다리는 방식입니다. 한 작업이 CPU를 오래 점유할 경우, 다른 작업이 실행되지 못해 시스템이 멈출 수 있습니다.
선점형 멀티태스킹 (Preemptive Multitasking): 운영체제가 일정 시간 동안 각 작업에게 CPU를 할당하고, 일정 시간이 지나면 강제로 제어권을 회수하여 다른 작업에 할당하는 방식입니다. 이 방식은 더 안정적이며, 대부분의 현대 운영체제에서 사용됩니다 (예: Windows, Linux, macOS).
예시
사용자가 한 컴퓨터에서 음악을 들으면서 웹 서핑을 하고, 동시에 문서 작업을 할 수 있는 것은 멀티태스킹 덕분입니다. CPU가 빠르게 작업을 전환하여 여러 작업이 동시에 수행되는 것처럼 보이게 합니다.
멀티프로세싱은 두 개 이상의 CPU(혹은 CPU 코어)를 사용하여 여러 작업을 동시에 처리하는 방식입니다. 멀티태스킹은 하나의 CPU에서 작업을 교차 처리하는 것이지만, 멀티프로세싱은 여러 CPU에서 실제로 동시에 작업을 실행할 수 있습니다.
특징
종류
예시
멀티코어 프로세서(예: 듀얼코어, 쿼드코어)는 하나의 칩에 여러 개의 CPU 코어가 있는 구조로, 각 코어가 독립적으로 작업을 수행합니다. 멀티코어 CPU는 실제로 병렬 작업을 가능하게 합니다.
스케줄링은 운영체제가 여러 작업(프로세스 또는 스레드)을 어떻게, 언제 CPU에 할당할지 결정하는 알고리즘과 과정을 의미합니다. CPU 자원은 제한적이므로, 여러 작업이 동시에 요청될 때 어떤 작업을 먼저 실행할지 운영체제가 결정하는 것이 스케줄링입니다.
주요 스케줄링 방식
FCFS(First-Come, First-Served): 먼저 요청된 작업을 먼저 처리하는 방식입니다. 간단하지만 긴 작업이 먼저 처리되면 짧은 작업이 오랫동안 대기할 수 있는 단점이 있습니다.
SJF(Shortest Job First): 실행 시간이 짧은 작업을 먼저 처리하는 방식입니다. 평균 대기 시간을 줄이는 데 유리하지만, 실행 시간이 긴 작업은 계속 대기할 가능성이 있습니다.
RR(Round Robin): 각 작업에게 동일한 시간 할당(타임 슬라이스)을 주고, 그 시간 동안만 작업을 실행한 후 다른 작업으로 넘어가는 방식입니다. 모든 작업에 공정하게 CPU가 할당됩니다.
Priority Scheduling: 작업에 우선순위를 부여하고, 우선순위가 높은 작업부터 처리하는 방식입니다. 긴급한 작업을 빠르게 처리할 수 있지만, 우선순위가 낮은 작업이 오래 대기하는 문제(Starvation)가 발생할 수 있습니다.
Multilevel Queue Scheduling: 작업을 여러 큐로 나누고, 각 큐에 대해 서로 다른 스케줄링 알고리즘을 적용하는 방식입니다. 예를 들어, 상위 큐에는 짧은 작업이나 실시간 작업을, 하위 큐에는 덜 중요한 작업을 배치할 수 있습니다.
예시
운영체제가 동시에 실행되는 여러 프로세스를 관리할 때, 어떤 프로세스가 언제 CPU를 사용할지 결정하는 것이 스케줄링입니다. 예를 들어, 사용자 프로그램이 CPU를 사용하다가, 시스템 프로그램(백그라운드 작업)이 CPU를 잠시 차지할 수 있도록 스케줄링하는 것이죠.
멀티태스킹과 멀티프로세싱은 서로 다르지만, 동시에 사용될 수 있습니다. 예를 들어, 멀티코어 시스템에서 멀티태스킹을 실행하면, 여러 코어에서 작업이 병렬로 실행되면서도 각 코어에서 작업들이 교차 처리될 수 있습니다. 스케줄링은 이러한 멀티태스킹과 멀티프로세싱 환경에서 CPU가 각 작업에 자원을 어떻게 할당할지 결정하는 중요한 역할을 합니다.
멀티코어 CPU와 멀티프로세싱은 밀접한 관계가 있습니다. 멀티코어 CPU는 하나의 CPU에 여러 개의 코어(CPU 코어)가 있는 구조로, 각 코어가 독립적으로 작업을 처리할 수 있습니다. 멀티프로세싱은 이러한 여러 코어를 사용하여 실제로 병렬로 작업을 실행하는 방식입니다.
즉, 멀티코어 CPU는 멀티프로세싱을 지원하는 하드웨어적 구조라고 볼 수 있으며, 이를 통해 여러 프로세스가 물리적으로 동시에 실행될 수 있습니다.
예시로, 4코어 CPU를 가진 컴퓨터에서는 최대 4개의 프로세스가 동시에 실행될 수 있으며, 이는 멀티태스킹보다 성능 향상에 큰 기여를 합니다. 멀티태스킹은 단일 코어에서 여러 작업을 번갈아 처리하는 것이지만, 멀티프로세싱은 물리적인 코어 여러 개에서 각 작업을 병렬로 처리할 수 있다는 차이점이 있습니다.
선점형 멀티태스킹이 협동적 멀티태스킹보다 안정적인 이유는, 운영체제가 작업 간의 CPU 자원 할당을 제어하기 때문입니다. 선점형 멀티태스킹에서는 운영체제가 일정 시간마다 각 작업에게 CPU를 강제로 회수하여 다른 작업에 할당하는데, 이로 인해 특정 작업이 지나치게 오래 CPU를 점유하지 않도록 보장됩니다.
반면, 협동적 멀티태스킹에서는 각 작업이 스스로 CPU를 양보할 때까지 운영체제가 기다리기 때문에, 한 작업이 너무 오래 CPU를 점유하거나 무한 루프에 빠지면 다른 작업이 실행되지 못하고 시스템 전체가 정지될 가능성이 있습니다.
따라서 선점형 멀티태스킹은 시스템의 안정성을 유지하고, 사용자가 여러 작업을 동시에 실행할 때 응답성을 보장하는 데 더 유리합니다.
우선순위 스케줄링의 주요 문제점 중 하나는 Starvation(기아 현상)입니다. 우선순위가 낮은 작업들이 계속해서 우선순위가 높은 작업들에 밀려 오랜 시간 동안 실행되지 못할 수 있는 문제가 발생할 수 있습니다.
이 문제를 해결할 수 있는 방법 중 하나는 에이징(Aging) 기법입니다. 에이징은 시간이 지남에 따라 우선순위가 낮은 작업의 우선순위를 점진적으로 높이는 방식입니다. 이로 인해, 일정 시간이 지나면 우선순위가 낮았던 작업도 CPU를 할당받을 가능성이 높아집니다.
예를 들어, 우선순위가 낮은 작업이 오랜 시간 대기하면 그 우선순위를 조금씩 높여주어 결국에는 실행되도록 보장하는 방식입니다. 이 방법을 통해 우선순위가 낮은 작업이 완전히 무시되는 것을 방지할 수 있습니다.