
멀티태스킹이란?
평소 우리는 컴퓨터를 사용하면서 웹서핑을 하면서, 친구와 카카오톡으로 채팅하고, 음악을 듣는다.
우리는 이렇게 여러 프로그램들을 동시에 실행하면서 작업을 수행한다.
이를 '멀티태스킹(MultiTasking)'이라고 한다.
근데 과연 진짜 수많은 프로그램들이 동시에 실행되는 것일까?
멀티태스킹 실행원리에 대해 자세하게 알아보자.
컴퓨터를 구매할때, 성능을 비교하면서 "코어와 쓰레드 수"를 보았을 것이다.

먼저 CPU란 컴퓨터의 뇌 역할을 담당하는 하드웨어이다.
주로 기억, 연산, 제어 등 컴퓨터의 논리적 사고를 담당하는 '뇌'와 같은 역할을 한다.
그리고 Core란 실제로 작업을 담당하는 유닛이다.
메인메모리에 올라가있는 프로세스를 해석하고 실행하고, 물리적 계산을 진행하는 '일꾼'같은 역할을 한다.
이 CPU가 Core 가지고 있으면서 작업을 수행한다.
옛날에는 싱글코어만 존재하여, CPU 하나에 Core 한개만 가질 수 있었지만,
요즘은 기술의 발전으로 듀얼큐어(2코어), 쿼드코어(4코어), 옥타코어(8코어)와 같이
하나의 CPU내에 여러 개의 Core를 가지고, 여러 작업을 동시에 진행할 수 있게 되었다.
이를 '하이퍼스레딩(Hyper-Threading)' 기술이라고 한다.
예를 들어 4코어 8쓰레드라면,
하나의 코어가 두개 이상의 스레드를 동시에 실행할 수 있다는 의미이다.
즉 4코어는 동시에 총 8개의 작업을 동시에 실행할 수 있다.

CPU의 작업 처리 방식
자, 우리가 계속 "동시에" 작업을 수행한다고 하는데, 자세하게 들어가기 전에 이에 대해 명확하게 알고 넘어가야한다.
동시에 작업을 진행하는 것은 크게 두가지로, 병렬성(Parallelism), 동시성(Concurrency)의 특성을 통해 실행된다.
병렬성(Parallelism)
메인메모리에 올라가 있는 여러 프로세스들을 CPU가 가지고 있는 코어 갯수만큼 가져와서 동시에 수행하는 것을 말한다.
이것이야말로 우리가 생각한, 실제로 동시에 작업들이 실행되는 것이다.

동시성(Concurrency)
동시성은 두개 이상의 작업을 동시에 실행하는 것으로, 정확하게 말하면 동시에 실행되는 것처럼 하는 것이다.
병렬성에서 말하는 "동시" 와는 다른 의미인 것이다.
4코어 8쓰레드에서 하나의 코어가 동시에 두개 이상의 작업을 동시에 실행할 수 있다는 것이
사실 정확하게 이야기하면,
하나의 코어가 2개 이상의 작업을 동시에 실행하는 것처럼 보이게 하는 것이다.
이것은 어떻게 가능할까?
바로 아래 그림과 같이 해야할 여러 프로세스들을 계속 번갈아가면서 처리하는 것이다.
그리고 이것을 매우매우매우 빠르게 수행하기 때문에 마치 동시에 여러 작업을 수행하는 것처럼 보이는 것이다.

이것이 가능하게 하기 위해 프로세스의 작업을 아주 잘게 나누고,
코어는 작게 나뉜 단위를 수행하고 다음 프로세스의 잘게 나뉜 단위를 수행하는 식으로 작업을 수행한다.
이렇게 작업하는 프로세스를 변경하는 행위를 "Context Switching" 이라고 표현한다.

동시성(Concurrency)이 왜 필요할까?
생각해보면, 동시성은 총 실행 시간 측면에서 득이 될게 없다. 동시에 여러 작업을 하는 것처럼 하는 건 좋은데
전부 다 병렬성으로 처리하면 실제로 동시에 작업을 진행하게되고 결국 총 실행시간이 줄어들지않겠는가?
하지만 이것은 두가지 이유로 불가능하다.
첫번째 이유는 하드웨어적 한계이다.
듀얼코어, 쿼드코어, 옥타코어처럼 코어 수를 늘려서 수많은 코어가 여러 작업을 병렬로 처리하고싶어도
만약 50개의 프로그램을 수행하는데, 코어를 50개 넣을 순 없으니 말이다... 결국 코어 수는 한정이 될수밖에 없고,
이렇게 한정된 수의 코어로 여러 개의 작업을 수행하는 동시성이 필요한 것이다.
두번째 이유는 논리적 효율 때문이다.
4코어 8쓰레드. 즉, 하나의 코어가 2개의 작업을 동시에 하여 총 4개의 코어가 동시에 8개의 작업을 하는 상황을 생각해보자.
이 상황에 총 16개의 프로세스 작업이 있고, 이 중 8개는 무거운 작업, 8개는 가벼운 작업이라고 해보자.
이때 동시성이 존재하지 않는 상황에서 만약 코어들이 무거운 8개의 작업을 동시에 먼저 수행한다면,
나머지 가벼운 8개의 작업은 금방 끝날 일인데, 굳이 오래 기다리고 나중에 수행하게되는 비효율적인 상황이 발생한다.
따라서 이런 효율성 측면에서 해야하는 모든 작업들을 잘게 나누고, 빠르게 번갈아가면서 실행하는 동시성이 필요한 것이다.
정리하자면, CPU는 병렬성을 이용하여 동시에 여러 작업들을 빠르게 수행하면서, 동시성을 이용하여 동시에 수많은 작업들을 효율적으로 처리할 수 있다.
References
https://inpa.tistory.com/entry/👩%E2%80%8D💻-프로세스-⚔%EF%B8%8F-쓰레드-차이#프로세스__스레드의_동시_실행_원리
https://iosdevlime.tistory.com/entry/iOSCombine-CPU와-코어-그리고-프로세스와-스레드의-개념
'운영체제' 카테고리의 다른 글
| 자바의 T 메모리 구조에 대해 알아보자. (0) | 2024.10.24 |
|---|---|
| Process 와 Thread의 자원 공유 (0) | 2024.02.26 |
| Process의 구조는 어떻게 되어있을까 (0) | 2024.02.23 |
| Process와 Thread란 무엇일까? (0) | 2024.01.31 |