본문 바로가기
Study/OS & Network

[OS] (멀티)프로세스와 (멀티)스레드, 그리고 동시성

by DawIT 2021. 12. 10.
320x100

프로세스

 

프로세스란, 실행된(실행되고 있는) 프로그램을 의미한다. 이 프로세스 단위로 OS에서 시스템 자원을 할당받게 된다. 구체적으로 프로세스는 각각 Code영역, Data영역, Stack영역, Heap영역을 할당받는다. 이 프로세스들은 서로 독립된 메모리 영역에 있기 때문에 다른 프로세스에 접근하기 위해서 IPC(Inter-process communication)를 사용해야 한다.

 

 

프로그램은 단지 짜여진 코드일 뿐이다. 프로그램이 프로세스가 되기 위해서는 메모리에 필요한 자원들과 함께 자리를 할당받아야 한다. 그때부터 프로그램은 비로소 프로세스가 될 수 있다. 또한 운영체제는 PCB(Process Control Block)에

해당 프로세스의 정보들을 저장한다. 이 정보들에는 PID, Pointer, Program Counter, Register 등등이 존재한다.

스레드

 

스레드란, 프로세스 내에서 즉 하나의 프로그램 내에서 나뉘어진 작업의 단위, 흐름(스레드는 '실'이라는 뜻을 가지고 있다)이다. 프로세스 내에서 스레드는 각각 Stack영역만을 할당받고, 나머지 Code, Data, Heap영역은 프로세스 내에서 서로 공유한다.

 

동시성

 

일반적으로 컴퓨터의 CPU는 한번에 하나의 일만 수행할 수 있다. 그래서 동시에 여러개의 프로세스를 작동하는건 불가능하다. 컴퓨터 과학에서 말하는 동시성은 CPU가 엄청나게 빠른 속도로 프로세스를 바꾸어 가면서 마치 사용자에게는 동시에 작동하는 것처럼 보이게 하는 것을 말한다. 여기서 CPU가 프로세스를 바꾸는 작업을 컨텍스트 스위칭(Context Switching) 이라고 한다.

 

여기서 스레드를 사용하는 이점이 드러난다. 기존 컨텍스트 스위칭은 프로세스 자체를 바꾸어야 하기 때문에 Code, Data, Heap, Stack영역을 모두 초기화하고 다시 불러오는 작업을 수행해야 하고 이는 오버헤드가 발생하는 작업이다. 스레드는 Stack을 제외하고 다른 영역을 공유하기 때문에 이러한 작업이 최소화되어 훨씬 빠른 속도로 동작할 수 있는 것이다.

멀티 프로세스와 멀티 스레드

여기서 이야기하는 멀티 프로세스는 프로그램을 동시에 띄워놓는 멀티 프로세스가 아니라, 한 응용프로그램을 다수의 프로세스로 운용하는 것을 이야기한다.

 

 

 

한 프로그램을 실행한다고 해도, 그 프로그램 내에서 다양한 작업을 수행해야 한다면 당연히 다수의 스레드가 필요할 것이다. 이렇게 하나의 응용프로그램을 실행할때, 하나의 프로세스 안에서 다수의 스레드를 사용하는 방법을 멀티 스레드라고 이야기한다. 멀티 스레드는 Code, Data, Heap영역을 공유하기 때문에 메모리를 효율적으로 사용할 수 있다.

 

멀티 프로세스는 하나의 응용프로그램을 실행할때 다수의 프로세스를 사용하는 방법이다. 아까 컨텍스트 스위칭에서 프로세스를 교체하는데 오버헤드가 많이 발생한다고 했는데 왜 굳이 멀티 프로세스를 사용하는가 하면, 이는 안정성 때문이다. 하나의 프로그램에서 하나의 프로세스만을 사용한다면 속도는 빨라질 수 있겠지만 만약 그 프로세스에서 오류가 난다면 전체 프로그램이 죽어버리게 된다. 그러나 멀티 프로세스로 하나의 프로그램을 다수의 프로세스로 돌리게 된다면 그중 하나의 프로세스에서 오류가 발생한다고 하더라도 다른 모든 부분이 죽는 상황은 피할 수 있는 것이다.

'Study > OS & Network' 카테고리의 다른 글

[OS] 뮤텍스와 세마포어  (0) 2021.12.23
[Network] TCP/IP와 Handshaking  (0) 2021.12.14
[Network] 대칭/비대칭 암호화와 HTTPS  (0) 2021.12.11
[Network] OSI 7계층  (0) 2021.12.08

댓글