사실 CPU는 시분할 뿐만이 아닌 다양한 우선순위와 최적화 기법을 사용하여 멀티태스킹을 수행한다. (스케쥴링)
참고. 뭔가 설명이 잘 와닿지 않아 ChatGPT 통해 얻어낸 답변
멀티태스킹과 멀티프로세싱은 모두 컴퓨터 시스템에서 작업을 병렬로 수행하는 방법론을 의미하며, 각기 다른 특성과 응용을 갖고 있습니다. 다음은 이 두 개념에 대한 전공자 수준의 상세한 설명입니다.
¶ 멀티태스킹(Multitasking)
멀티태스킹은 하나의 CPU에서 여러 작업(task)이 번갈아 가며 실행되는 기법입니다. 여기서 중요한 개념은 시간 분할(time slicing)입니다. CPU는 빠르게 작업을 전환하며 각 작업이 동시에 실행되는 것처럼 보이게 합니다. 멀티태스킹에는 두 가지 주요 유형이 있습니다: 협동적 멀티태스킹(cooperative multitasking)과 선점형 멀티태스킹(preemptive multitasking).
¶ 협동적 멀티태스킹
협동적 멀티태스킹에서는 각 작업이 스스로 CPU를 다른 작업에 넘겨줄 때까지 실행됩니다. 이는 작업이 CPU를 계속 차지하고 있으면 다른 작업들이 실행될 수 없다는 단점을 갖고 있습니다. 과거의 Windows 3.x와 같은 운영체제에서 사용되었습니다.
¶ 선점형 멀티태스킹
선점형 멀티태스킹에서는 운영체제가 주기적으로 CPU 제어권을 강제로 회수하고 다른 작업에 배분합니다. 이는 작업이 잘못되거나 무한 루프에 빠지더라도 다른 작업들이 계속 실행될 수 있게 합니다. 대부분의 현대 운영체제(예: Windows, Linux, macOS)에서 사용됩니다.
¶ 멀티태스킹의 주요 개념
프로세스와 스레드: 멀티태스킹에서 주로 다루는 단위는 프로세스와 스레드입니다. 프로세스는 실행 중인 프로그램의 인스턴스이며, 스레드는 프로세스 내에서 실행되는 경량 프로세스입니다. 하나의 프로세스는 여러 스레드를 가질 수 있습니다.
컨텍스트 스위칭(Context Switching): CPU가 한 작업에서 다른 작업으로 전환될 때, 현재 작업의 상태를 저장하고 새 작업의 상태를 복원하는 과정을 말합니다. 컨텍스트 스위칭은 시스템 자원을 소모하므로 최적화가 중요합니다.
스케줄링(Scheduling): 운영체제는 작업을 효율적으로 배분하기 위해 스케줄링 알고리즘을 사용합니다. 예를 들어, 라운드 로빈(Round Robin), 우선순위 스케줄링(Priority Scheduling) 등이 있습니다.
¶ 멀티프로세싱(Multiprocessing)
멀티프로세싱은 여러 개의 CPU 코어 혹은 여러 개의 CPU를 활용하여 작업을 병렬로 수행하는 기법입니다. 이는 진정한 병렬 처리를 가능하게 하며, 여러 프로세스가 동시에 실행될 수 있습니다.
¶ 멀티프로세싱의 주요 유형
대칭 멀티프로세싱(Symmetric Multiprocessing, SMP): 모든 프로세서가 메모리와 I/O 장치를 동일하게 접근할 수 있는 구조입니다. 각 프로세서는 동일한 운영체제를 실행하며, 작업은 프로세서 간에 균등하게 배분됩니다. 대부분의 현대 멀티코어 시스템이 이 구조를 따릅니다.
비대칭 멀티프로세싱(Asymmetric Multiprocessing, AMP): 하나의 메인 프로세서가 시스템을 제어하며, 나머지 프로세서는 특정 작업만을 수행합니다. 메인 프로세서가 모든 작업을 분배하고 관리합니다.
¶ 멀티프로세싱의 주요 개념
프로세스 통신(Inter-Process Communication, IPC): 멀티프로세싱 시스템에서 여러 프로세스 간에 데이터를 교환하는 방법입니다. 파이프(pipe), 메시지 큐(message queue), 공유 메모리(shared memory), 소켓(socket) 등이 IPC의 예입니다.
데드락(Deadlock)과 경합(Concurrency): 여러 프로세스가 자원을 동시에 접근하려고 할 때 발생하는 문제들입니다. 데드락은 프로세스들이 서로 자원을 기다리며 무한 대기에 빠지는 상황이고, 경합은 자원 접근 순서에 따라 결과가 달라질 수 있는 상황입니다. 이를 해결하기 위해 동기화 기법(예: 세마포어, 뮤텍스)이 사용됩니다.
로드 밸런싱(Load Balancing): 멀티프로세싱 시스템에서 작업을 균등하게 배분하여 각 프로세서가 최적으로 활용되도록 하는 기법입니다. 이는 성능 향상과 자원 활용도를 높이는 데 중요합니다.
¶ 비교와 응용
멀티태스킹은 주로 단일 프로세서 시스템에서 작업의 효율성을 높이는 데 사용되며, 사용자 경험을 향상시키기 위해 중요합니다. 예를 들어, 한 사용자가 웹 브라우징을 하면서 음악을 듣는 경우, 멀티태스킹은 이러한 작업들이 부드럽게 전환될 수 있도록 합니다.
멀티프로세싱은 대규모 데이터 처리나 고성능 연산이 필요한 경우 사용됩니다. 예를 들어, 과학 계산, 대규모 데이터베이스 서버, 영상 렌더링 등의 작업에서 멀티프로세싱은 필수적입니다.
결론적으로, 멀티태스킹과 멀티프로세싱은 각각의 장단점과 최적의 활용 사례를 가지고 있으며, 현대 컴퓨팅 환경에서는 두 기법이 상호 보완적으로 사용되어 시스템의 성능과 효율성을 극대화합니다.