tlov

[스터디] 3-3. 스레드 본문

개발/운영체제

[스터디] 3-3. 스레드

nowitzki 2024. 8. 15. 15:07

스레드(thread)는 프로세스를 구성하는 실행 흐름의 단위이다. 하나의 프로세스는 하나 이상의 스레드를 가질 수 있다.

 

메모리 속 프로세스와 스레드

 

지금까지는 단일 스레드 프로세스를 상정하고 설명하였다. 하지만 현재 존재하는 프로그램은 대부분 여러 스레드를 가지는 멀티 스레드 프로세스이다. 스레드가 여러 개라면 프로세스를 이루는 여러 명령어를 동시에 실행이 가능하다.

 

그럼, 어떻게 스레드가 별도로 실행될 수 있을까? 어떻게 실행흐름 단위를 스레드로 나누어 실행할 수 있을까?

 

스레드의 구성요소

스레드 ID, 레지스터 값, 스택 등

실행에 필요한 최소 정보

 

스레드는 각각 스택, 레지스터 값들을 따로 갖고는 있지만 프로세스의 자원을 공유하면서 실행된다. 즉, 스레드 별로 어떤 메모리 공간이 할당되는 것이 아니라 프로세스에게 할당된 메모리 공간을 서로 공유하며 실행된다.

 

요즘 운영체제는 CPU에게 처리해야 할 작업을 전달할 때 프로세스 전체를 전달하지 않고 스레드를 전달하는 경우가 많다.

 

 

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

멀티 프로세스 : 동일한 작업을 수행하는 단일 스레드 프로세스 여러 개를 실행

멀티 스레드 : 하나의 프로세스를 여러 스레드로 실행

 

멀티 프로세스는 서로 남남처럼 자원을 공유하지 않고 통째로 동일한 프로세스가 실행되지만, 멀티 스레드는 하나의 프로세스 내에서 자원을 공유하며 실행 됨. 그래서 멀티 스레드가 협력과 통신에 좀 더 유리하나 하나의 스레드에 문제가 생기면 전체 스레드가 그 영향을 받을 수 있다는 단점이 있다. 그리고 프로세스끼리 자원을 공유하지 못하는 것도 아니다. 이를 프로세스 간 통신(IPC)라고 한다.

 

참고)

fork 시에 같은 프로세스를 중복 저장하지 않으면서, 동시에 서로 다른 프로세스처럼 자원을 공유하지 않도록 하는 기법도 있다.

이를 쓰기 시 복사 기법이라고 함.