먼저, 간단한 개념을 먼저 잡고 넘어가자!
✔️ 프로세스
- 컴퓨터에서 실행 중인 프로그램
- 각각의 프로세스는 독립된 메모리 공간을 할당받음
✔️ CPU
- 명령어를 실행하는 연산 장치
✔️ 메인메모리
- 프로세스가 CPU 실행되기 위해 대기하는 곳
🤔 그렇다면 먼저 가장 초장기의 프로그램 시스템은 어땠을까?
일단 처음에 프로그램 시스템은 단일 프로세스 시스템이었다.
- 한 번에 하나의 프로그램만 실행 ( 따라서 한 개의 작업이 끝나야 다른 작업을 실행시킬 수 있음 )
- CPU 사용률이 좋지 않음
- 프로세스가 IO 작업을 만나게 되면 아무것도 하지 않고 놀고 있는 상태가 됨
✨ 이에 대한 해결책으로 멀티프로그래밍이 나왔다.
여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시키는 방법이 나오게 됨
IO 작업이 발생하면 다른 프로세스가 CPU에서 실행됨
이 방법은 CPU 사용률을 극대화시키는 게 목적이다.
단점으로는 CPU 사용시간이 길어지면 다른 프로세스는 계속 대기해야 한다.
✨ 이에 대한 해결책으로 나오게 된 방법론이 멀티태스킹이다.
프로세스는 한 번 CPU를 사용할 때 아주 짧은 시간(=quantum)만 CPU에서 실행되도록 하자!
멀티프로그래밍과 유사하지만 차이점은 각 프로세스의 CPU 타임을 잘게 쪼개서 서로 번갈아서 실행될 수 있도록 하는 것
프로세스의 응답 시간을 최소화시키는 게 목적이다. 동시에 여러 프로그램이 실행되는 듯한 느낌을 주는 것이다.
😵 하지만 이러한 시스템도 단점이 있다.
한 개의 프로세스가 한 가지의 일 밖에 못한다는 것이다.
이게 왜? 프로세스를 여러 개 늘리면 되는 거 아닌가?라는 생각이 들 수 있겠지만 문제점은 이러하다.
- 프로세스 간 *컨텍스트 스위칭은 비용이 크다. 즉 무거운 작업이라고 볼 수 있다.
- 프로세스 간 데이터 공유가 까다롭다. 프로세스는 각각의 독립적인 메모리 공간을 가지고 있기 때문.
- 마지막 아쉬운 점은 2000년대 초반 *듀얼 코어가 등장했는데 이것을 잘 사용하고 싶은 것이다.
🧐 하나의 프로세스가 동시에 여러 작업을 수행하기 위해서는 어떻게 해야 할까? 여기서 나온 개념이 스레드이다.
- 프로세스는 한 개 이상의 스레드를 가질 수 있다.
- CPU에서 실행되는 단위 ( 이전에는 프로세스가 CPU 에서 실행되는 단위였다면, 이제는 스레드가 됨 )
- 자신들이 속한 프로세스의 메모리 영역을 공유
- 컨텍스트 스위칭이 가벼워짐
- 데이터 공유가 쉬워짐
그림에서 보다시피 멀티스레드에선 Stack 영역을 Thread 가 나눠가진다.
하지만 각각의 스레드 모두 Heap 메모리는 공통으로 가져간다.
즉, 스레드가 나눠가지는 부분은 Stack 영역이다.
멀티스레딩
- 하나의 프로세스가 동시에 여러 작업(thread)을 실행하는데 목적
확장된 멀티태스킹 개념
- 여러 프로세스와 여러 스레드가 아주 짧게 쪼개진 cpu time을 나눠 갖는 것
멀티프로세싱
- 두 개 이상의 프로세서나 코어를 활용하는 시스템
📖 예제를 통해 알아보자
예제 1) 싱글코어 CPU에 싱글-스레드 프로세스 두 개
- 프로세스 2개가 CPU 1 개를 나눠 써야 하는 상황
멀티태스킹 MultiTasking | O |
멀티스레딩 | X |
멀티프로세싱 | X |
예제 2) 싱글코어 CPU에 듀얼-스레드 프로세스 1개
- CPU 가 1개이기 때문에 멀티 프로세싱은 아니다.
멀티태스킹 | O |
멀티스레딩 | O |
멀티프로세싱 | X |
예제 3) 듀얼코어 CPU에 싱글-스레드 프로세스 2개
- CPU 1개당 프로세스 1개이기 때문에 멀티태스킹이 아니다.
- 듀얼코어이기 때문에 멀티프로세싱임
멀티태스킹 | X |
멀티스레딩 | X |
멀티프로세싱 | O |
예제 4) 듀얼코어 CPU에 듀얼-스레드 프로세스 1개
- 코어: 프로세스 = 1: 1 이기 때문에 경합하고 있는 작업이 없음
멀티태스킹 | X |
멀티스레딩 | O |
멀티프로세싱 | O |
예제 5) 듀얼코어 CPU에 듀얼-스레드 프로세스 두 개
- 오늘날 우리가 쓰는 컴퓨터에서 보여주는 가장 근접한 예제
멀티태스킹 | O |
멀티스레딩 | O |
멀티프로세싱 | O |
두 가지 경우가 있을 수 있다.
두 가지 경우 모두 멀티태스킹, 멀티스레딩, 멀티프로세싱이다.
📌 용어정리
*컨텍스트 스위칭: CPU에서 실행되기 위해서 어느 한 프로세스에서 다른 프로세스로 교체되는 것
* 듀얼코어: 한 개의 CPU에서 성능을 계속해서 끌어올리기 위해서는 발열 작업등으로 작업이 쉽지 않았음.
따라서 하나의 성능을 계속 개선시키기보다는 한 CPU 안에 두 개의 코어를 두어서
전체적인 성능을 향상하는 방법으로 개선함
📚참고
https://www.youtube.com/watch?v=QmtYKZC0lMU&t=958s
'CS' 카테고리의 다른 글
[AWS] File Storage vs Object Storage(S3) | LIM (0) | 2024.05.18 |
---|
댓글