[프로세스]
프로세스란 실행 중에 있는 프로그램을 의미합니다. 프로그램을 실행하면 메모리에 프로그램의 데이터가 연속적으로 올라가게 됩니다. 각 프로세스는 각자만의 코드, 데이터, 힙, 스택 영역을 가지게 됩니다.

[프로세스 여러 개로 작업하는 것에 대한 부담]
프로세스는 기본적으로 main 스레드 하나의 실행만을 가지기 때문에, 하나의 일만을 처리할 수 있는 상태가 됩니다. 그러나 종종 하나의 실행 흐름을 갖는 프로세스에 두 가지 이상의 작업을 부여하고 싶은 경우가 있는데, 먼저 프로세스를 하나 추가하는 방법을 생각해보겠습니다.
프로세스를 추가하는 것은 추가적인 메모리 공간을 요구하며, 각자의 프로세스는 코드, 데이터, 힙, 스택 영역을 공유하지 않기 때문에 상호간 데이터 교환 및 공유를 위해서는 별도의 기능 추가(보통 IPC)를 필요로 합니다. 또한 프로세스 마다 크기가 크기 때문에, 캐시 메모리에 모든 프로세스 정보를 담아두긴 어려워 필연적으로 컨텍스트 스위칭이 발생하게 됩니다. 프로세스 자체의 크기가 크면 클수록, 교체에 시간이 더욱 발생(오버헤드)하게 되겠죠.

[스레드]
그렇다면 멀티 프로세스를 활용하는 방식 외에는 방도가 없을까요? 당연히 있습니다. 바로 스레드를 여러 개 활용하는 것입니다. 완전 별개의 프로세스 간 통신보다는 하나의 프로세스에 두 가지 이상의 실행 흐름을 만드는 것입니다. 이를 활용하면 스택을 제외한 데이터 영역을 스레드 간에 공유할 수 있게 되므로, 데이터 교환 및 공유가 수월해지고, 거의 필연적으로 발생하는 컨텍스트 스위칭에서도, 스택 영역 정도만 교체해주면 되기 때문에 멀티 프로세스 작업보다는 오버헤드가 적게 발생합니다.

+) OS 입장에서 본다면 프로세스는 단순히 스레드를 담는 상자에 불과합니다. 실제로 프로그램의 흐름을 형성하는 것은 스레드이기 때문입니다. 보통의 스케쥴링 알고리즘에서 OS가 프로세스의 Running, Ready, Blocked을 통해 스케쥴링을 실시하지만, 실제로는 스레드의 Running, Ready, Blocked을 확인한다는 것입니다.
[멀티 프로세스와 멀티 스레드]
보통 프로세스와 스레드가 나오면 멀티 프로세스, 멀티 스레드라는 주제가 자연스럽게 나옵니다. 이는 아래의 문장들로 정리할 수 있을 것 같습니다.
--------------------------------------------------------------------------------------------------------------------
멀티 스레드는 하나의 프로세스에서 여러 스레드를 사용하는 것을 말하며, 멀티 프로세스는 동시에 여러 프로세스를 실행하는 것을 말합니다.
프로세스는 각각 별도의 메모리 공간을 보유하고 있기 때문에, 하나의 프로세스에 문제가 발생하더라도 다른 프로세스에는 영향을 주지 않지만, 스레드는 스택 영역을 제외한 모든 메모리를 공유하기 때문에 하나의 스레드에서 문제가 발생하면 프로세스 전체에 영향을 줄 수 있게 됩니다.
또한, 프로세스는 모든 메모리 영역이 독립되어있는 만큼 컨텍스트 스위칭의 비용이 크지만, 스택 영역만을 독립적으로 보유하고 있는 스레드의 컨텍스트 스위칭은 상대적으로 가볍다는 차이가 있습니다.
--------------------------------------------------------------------------------------------------------------------
'컴퓨터과학 > 시스템' 카테고리의 다른 글
| [CS] 시스템 콜(System Call) (0) | 2025.03.21 |
|---|---|
| [CS] 컨텍스트 스위칭(Context Switching) (0) | 2025.03.21 |
| [CS] 메모리 단편화 (0) | 2025.03.21 |
| [CS] 캐시 적중률 (0) | 2025.03.17 |
| [CS] 바이트 순서(Byte Order) (0) | 2025.03.17 |