본문 바로가기
CS

[CS] 프로세스와 스레드 그리고 멀티작업들 | LIM

by forestlim 2023. 2. 11.
728x90
반응형

먼저, 간단한 개념을 먼저 잡고 넘어가자!

 

✔️ 프로세스

- 컴퓨터에서 실행 중인 프로그램

- 각각의 프로세스는 독립된 메모리 공간을 할당받음

 

✔️ CPU

- 명령어를 실행하는 연산 장치

 

✔️ 메인메모리

- 프로세스가 CPU 실행되기 위해 대기하는 곳


🤔 그렇다면 먼저 가장 초장기의 프로그램 시스템은 어땠을까?

 

일단 처음에 프로그램 시스템은 단일 프로세스 시스템이었다. 

- 한 번에 하나의 프로그램만 실행 ( 따라서 한 개의 작업이 끝나야 다른 작업을 실행시킬 수 있음 )
- CPU 사용률이 좋지 않음

 - 프로세스가 IO 작업을 만나게 되면 아무것도 하지 않고 놀고 있는 상태가 됨

 

 

 

 

✨ 이에 대한 해결책으로 멀티프로그래밍이 나왔다. 

여러 개의 프로그램을 메모리에 올려놓고 동시에 실행시키는 방법이 나오게 됨
IO 작업이 발생하면 다른 프로세스가 CPU에서 실행됨

 

 

 

 

이 방법은 CPU 사용률을 극대화시키는 게 목적이다. 

단점으로는 CPU 사용시간이 길어지면 다른 프로세스는 계속 대기해야 한다. 

 

P2는 P1의 작업이 끝날때까지 실행되지 못한다.

 

 

✨ 이에 대한 해결책으로 나오게 된 방법론이 멀티태스킹이다. 

 

프로세스는 한 번 CPU를 사용할 때 아주 짧은 시간(=quantum)만 CPU에서 실행되도록 하자!
 

 

멀티프로그래밍과 유사하지만 차이점은 각 프로세스의 CPU 타임을 잘게 쪼개서 서로 번갈아서 실행될 수 있도록 하는 것

프로세스의 응답 시간을 최소화시키는 게 목적이다. 동시에 여러 프로그램이 실행되는 듯한 느낌을 주는 것이다. 

 

 

 

😵 하지만 이러한 시스템도 단점이 있다. 

한 개의 프로세스가 한 가지의 일 밖에 못한다는 것이다.

이게 왜? 프로세스를 여러 개 늘리면 되는 거 아닌가?라는 생각이 들 수 있겠지만 문제점은 이러하다. 

 

- 프로세스 간 *컨텍스트 스위칭은 비용이 크다. 즉 무거운 작업이라고 볼 수 있다.  

- 프로세스 간 데이터 공유가 까다롭다. 프로세스는 각각의 독립적인 메모리 공간을 가지고 있기 때문.

- 마지막 아쉬운 점은 2000년대 초반 *듀얼 코어가 등장했는데 이것을 잘 사용하고 싶은 것이다. 

 


🧐 하나의 프로세스가 동시에 여러 작업을 수행하기 위해서는 어떻게 해야 할까? 여기서 나온 개념이 스레드이다. 

 

- 프로세스는 한 개 이상의 스레드를 가질 수 있다. 

- CPU에서 실행되는 단위 ( 이전에는 프로세스가 CPU 에서 실행되는 단위였다면, 이제는 스레드가 됨 )

- 자신들이 속한 프로세스의 메모리 영역을 공유

    - 컨텍스트 스위칭이 가벼워짐

    - 데이터 공유가 쉬워짐

 

 

Single Thread vs Mutli Thread

 

 

그림에서 보다시피 멀티스레드에선 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 

 

728x90
반응형

'CS' 카테고리의 다른 글

[AWS] File Storage vs Object Storage(S3) | LIM  (0) 2024.05.18

댓글