개요
현대 컴퓨터는 여러 가지 작업을 동시에 수행할 수 있습니다.
유튜브로 음악을 들으면서 코딩을 하고 동시에 카톡을 확인할 수도 있습니다.
CS를 공부하다보면 이처럼 여러 프로그램을 동시에 실행하는 방법에 대해 배우게 되는데요.
하지만 비슷한 용어들이 여러 개 존재해서 이번 포스팅에는 헷갈리기 쉬운 개념 5가지에 대해 정리해보려고 합니다.
- Multi Programming
- Multi Tasking
- Multi Processing
- Multi Threading
- Multi Core
이번 포스팅에서는 조금 비슷한 개념들이 많은데 이름이 비슷해서 개념을 정리해보겠습니다.
- CPU: 기억, 연산, 제어를 수행하는 컴퓨터 장치
- 프로세서(processor): 신호 전송, 사칙 연산, 논리 연산 등을 수행하는 전기 부품, 즉 하드웨어
- 코어(core): CPU 내부에서 각종 연산을 수행하는 요소
- 단일 코어 프로세서: 코어가 하나인 프로세서, 실질적으로 여러 프로세스를 실행할 수 없다.
- 멀티 코어 프로세서: 코어가 여러 개인 프로세서, 실질적으로 여러 프로세를 실행할 수 있다.
- 프로세스(process): 메모리에 올라와 실행 중인 프로그램
- 동시성(concurrentcy): 여러 프로세스를 동시에 수행하는 것처럼 보이는 개념
- 병렬성(parallelism): 여러 프로세스를 실질적으로 동시에 수행하는 개념
CPU와 프로세서는 같은 개념으로 보는 경우도 있다고 합니다.
프로세서에는 명령을 수행하는 CPU 프로세서와 CPU를 보조하는 보조 프로세서로 분류되기도 합니다.
Multi Programming
단일 CPU에서 여러 프로그램을 메인 메모리에 동시에 적재하여 실행 준비 상태로 유지하는 방식입니다.
컴퓨터의 여러 프로세스들은 모두 CPU가 할당되어야 본인의 작업을 실행할 수 있습니다.
그런데 프로세스는 CPU 작업만 수행하는 것이 아니라 I/O 작업을 수행하기도 합니다.
만약 멀티 프로그래밍이 없었다면 하나의 프로세스에 할당된 CPU는 프로세스가 I/O 작업에 들어가게 되면 I/O 작업이 끝날 때까지 대기해야 합니다.
이렇게 CPU를 사용하지 않고 대기하는 시간을 유휴 시간이라고 하고 유휴 시간이 늘어날수록 당연히 효율 또한 떨어지게 됩니다.
멀티 프로그래밍은 이러한 CPU 유휴 시간을 줄이고 CPU 활용을 극대화하는 것이 목표입니다.
멀티 프로그래밍에서 프로세스가 I/O 작업을 수행하게 되면 운영체제는 해당 작업을 멈추고 대기 큐에서 대기 중인 다른 프로세스를 선택하여 CPU를 할당합니다.
기존 프로세스의 I/O 작업이 끝나게 되면 이제 CPU를 할당받을 준비가 되었다는 것을 의미하기 때문에 대기 큐에 들어가게 되고 자신의 차례가 되었을 때 CPU를 다시 할당받아 작업을 수행하게 됩니다.

이렇게 수행할 프로세스를 계속 전환하는 것을 context switching이라고 합니다.
Multi Tasking
멀티 태스킹은 멀티 프로그래밍과 굉장히 유사한 개념입니다.
멀티 프로그래밍처럼 context switching이 발생한다는 점은 동일하지만 여기에 time slicing이라는 개념이 추가됩니다.
각 프로세스는 각자 time quantum을 할당받고 해당 시간 동안 작업을 수행합니다.
P1, P2, P3라는 세 프로세스가 있고 time quantum이 2ms라면 다음과 같이 동작하게 됩니다.

멀티 프로세싱과 멀티 태스킹은 단일 코어 프로세서에서 여러 프로세스를 동시에 수행하는 방법을 의미합니다.
단일 코어 프로세서이기 때문에 실질적으로는 동시에 여러 프로세스를 실행하지는 않습니다.
다만 time slicing 기법처럼 한 번에 실행할 수 있는 프로세스는 단 하나이지만 context switching이 굉장히 빨라 사용자는 마치 여러 프로세스가 동시에 실행되는 것처럼 느끼게 됩니다.
Multi Core
지금까지는 단일 코어 프로세서에 대해 다루었고 프로세스를 실행하는 주체인 프로세서가 하나일 때 운영체제가 여러 프로세스를 동시에 수행하는 두 가지 방법에 대해 알아보았습니다.
하지만 이러한 방식은 작업을 수행하는 하드웨어가 하나이기 때문에 실질적으로 여러 프로세스를 동시에 실행한다고 보기는 어렵습니다.
그래서 최신 컴퓨터 시스템에는 단일 코어 프로세서로 이루어진 경우는 드물고 멀티 코어 프로세서를 가지고 있는 경우가 대부분입니다.
이렇게 하나의 칩 안에 여러 개의
Multi Processing
멀티 프로그래밍과 멀티 태스킹에서는 한 번에 하나의 프로세스만 실행된다고 배웠습니다.
하지만 멀티 프로세싱은 단일 컴퓨터 자체가 멀티 코어 프로세서로 이루어져 있기 때문에 실질적으로 여러 프로세스를 동시에 실행하는 것이 가능합니다.
코어를 4개 가지고 있는 쿼드 코어 프로세서를 생각해봅시다.
그리고 실행 대기 중인 프로세스 4개가 있습니다.
단일 코어 프로세서에서는 time slicing과 같은 기법을 사용하여 동시에 실행되는 것처럼 보이게 합니다.
쿼드 코어 프로세서의 경우 애초에 독립적인 연산을 수행하는 코어가 4개이기 때문에 프로세스 4개를 동시에 실행합니다.
멀티 프로그래밍, 멀티 태스킹 개념은 동시성, 멀티 프로세싱 개념은 병렬성에 가깝습니다.

출처
https://blog.naver.com/techref/222254273021
https://blog.naver.com/cypher9715/221573355472https://www.geeksforgeeks.org/operating-systems/difference-between-multiprocessing-and-multiprogramming/