스레드

2023. 11. 11. 14:55스터디/OS 스터디

728x90

 

프로세스는 자원과 제어로 구분할 수 있다.

이 중 제어만 분리한 실행 단위를 스레드라고 한다.

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

스레드는 프로세스의 직접 실행 정보를 제외하고 나머지 관리 정보를 공유한다.

 

아래 이미지와 같이 스레스 실행 정보 블록(TCB)을 독립적으로 가지며, 프로세스의 전역데이터와 힙, 코드 등을 다른 스레드와 공유한다.

 

 

스레드는 보통 다른 프로시저를 호출하고, 다른 실행 기록을 기록하는데,

프로시저 : 업무를 실행하기 위한 절차

스레드 중 프로세스의 속성 중 일부가 들어 있는 것을 경량 프로세스, 반대로 스레드 하나에 프로세스가 하나인 경우를 중량 프로세스라고 한다.

 

프로세스 하나에 포함된 스레드들은 공동의 목적을 달성하려고 병렬로 수행한다.

즉, 프로세스가 하나인 다른 프로세서에서 프로그램의 다른 부분을 동시에 실행한다.

 

스래드를 이용하면 병렬로 처리가 가능하고, 오버헤드가 줄어들어 성능이 향상할 수 있다. 또한, 비동기 요소를 구현하는데도 사용할 수 있다.

오버헤드 : 특정 기능을 수행하는데 들어가는 간접적인 시간

 

단일 스레드와 멀티 스레드

 

스레드의 구성 요소에 따라 프로세스와 스레드를 다음과 같이 나눌 수 있다.

 

 

모든 스레드가 프로세스의 자원을 공유하고, 같은 주소 공간에 있기 떄문에 스레드 간 교환이나 종료 속도가 빠르다.(프로세스 보다 Context switching이 빠르다)

또한, 프로세스보다 스레드를 생성하는 것이 더 빠르다.

 

스레드의 상태 변화도 프로세스와 비슷하다. 

보통 프로세스를 생성하면 해당 프로세스의 스레드도 함꼐 생성한다. 단, 스레드 생성에서는 OS가 부모 프로세스와 공유할 자원을 초기화 할 필요가 없다. 해당 프로세스가 스택과 레지스터를 제공하기 때문이다.

 

스레드 제어 블록(TCB)

스레드도 제어 블록을 가지고 있다.

실행 상태, 스케줄링 정보, 계정정보 등을 가지고 있다.

 

스레드의 구현

스레드는 대부분 3가지 형태로 구현한다.

1. 사용자 수준 스레드 (n : 1) 매핑

2. 커널 수준 스레드 (1 : 1) 매핑

3. 혼합형 스레드 (n:m) 매핑

 

사용자 수준 스레드

사용자 영역에 스레드 라이브러리를 구현하는 것을 의미한다.

커널은 스레드의 존재를 모른다.

스레드 라이브러리에는 스래드 생성과 종료, 스레드간 메시지, 스케줄링 정보 등을 공유한다.

이식성이 높고, 오버헤드가 적으며 유연한 스케줄링이 가능하지만,

동시성을 지원하지 않고, 확장에 제약이 따르며, 스레드 간 보호가 불가능하다는 단점이 있다.

 

커널 수준 스레드

사용자 수준의 스레드 한계를 극복하는 방법으로, 커널이 스레드 관련 모든 작업을 관리한다.

 

커널이 직접 스케줄링하고 실행하기에 사용자 수준 스레드의 단점을 극복할 수 있으나, 커널 영역으로 전환하면서 오버해드가 발생하고, 스케줄링 동기화를 하려면 더 많은 자원이 필요하는 문제가 발생했다.

 

혼합형 스레드

사용자 수준 스레드와 커널 수준 스레드를 혼합한 구조이다. 

 

프로세스 하나에는 경량 프로세스가 하나 이상 있고, 경량 프로세스에는 커널 스레드가 한 개 있다.

 

스레드를 효율적으로 사용할 수 있으며, 작업량이 증가할 수 있다는 장점이 있다.

 

참조 : 한빛아카데미 - 그림으로 배우는 구조와 원리 운영체제 - 구현회 저

728x90

'스터디 > OS 스터디' 카테고리의 다른 글

교착 상태와 기아 상태  (0) 2023.11.11
병행 프로세스와 상호배제  (0) 2023.11.11
프로세스 관리  (0) 2023.11.11
프로세스 상태 변화와 상태 정보  (0) 2023.11.11
프로세스의 개념과 상태 변화  (0) 2023.11.11