hmk run dev

스레드란? 본문

OS

스레드란?

hmk run dev 2024. 3. 5. 21:39

스레드란?


스레드는 프로세스를 구성하는 실행 흐름의 단위

하나의 프로세스는 최소 하나 이상의 스레드를 가지고 있다.

 

단일 스레드 프로세스

실행 흐름이 하나인 프로세스

 

 

 

멀티 스레드 프로세스

실행 흐름이 여러 개인 프로세스

 

=> 프로세스를 이루는 여러 명령어 동시 실행 가능

 

스레드의 구성요소

 

스레드 ID, 프로그램 카운터를 비롯한 레지스터 값, 스택 등

실행에 필요한 최소한의 정보를 가지고 있고, 스레드는 프로세스 내에 같은 자원을 공유한다.

 

 

프로세스와 스레드의 경계는 모호하다?

 

리눅스 운영체제 창시자(리누스 베네딕트 토르발스)는 프로세스와 스레드를 구분할 필요가 없다고 한다

 

 

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

 

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

vs

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

 

 

 

프로세스끼리는 기본적으로 자원을 공유하지 않지만,

스레드는 같은 프로세스 내에서 자원을 공유할 수 있다.

 

 

단일 스레드 여러 프로세스(멀티 프로세스)

 

- 프로세스를 fork하면 코드/데이터/힙 영역 등 모든 자원이 복제되어 저장됨

- 저장된 메모리 주소를 제외하면 모든 것이 동일한 프로레스 두 개가 통째로 메모리에 적재된다.

- fork를 세 번 네 번하면 메모리에는 같은 프로세스가 통째로 세 개 네 개 적재된다.

 

 

참고로,

fork 직후 같은 프로세스를 통째로 메모리에 중복 저장하지 않으면서

동시에 프로세스끼리 자원을 공유하지 않는 방법도 있다. (copy write 기법)

 

 

단일 프로세스 여러 스레드(멀티 스레드)

 

- 스레드들은 각기 다른 스레드 ID, (별도의 실행을 위해 꼭 필요한)

프로그램 카운터 값을 포함한 레지스터 값, 스택을 가질 뿐

프로세스가 가지는 자원을 공유

 

 

요약

프로세스끼리는 자원을 공유하지 않는다 => 남남처럼 독립적으로 실행된다. (IPC를 이용해 자원을 공유할 수 있긴함)

하나의 프로세스에 문제가 생겨도 자원을 공유하지 않아 다른 프로세스의 실행에 거의 지장이 없거나 적다.

 

 

 

스레드는 프로세스의 자원을 공유한다 => 협력과 통신에 유리하다.

 

But, 때로는 문제가 될 수도 있음, 

자원을 공유하기 때문에 다른 스레드의 실행에 영향이 갈수도 있다.

 

'OS' 카테고리의 다른 글

교착 상태 해결 방법  (0) 2024.03.16
교착상태(Dead lock)  (0) 2024.03.15
CPU 스케줄링  (0) 2024.03.05
프로세스의 개요  (0) 2024.03.03
운영체제의 큰 그림  (0) 2024.03.02
Comments