5. 쓰레드

김현우·2024년 5월 7일
0

운영체제

목록 보기
5/11
post-thumbnail

💻 프로세스 그리고 쓰레드

앞서 살펴본 프로세스는 2가지 특성으로 요약이 가능하다.

1. 자원의 소유권
2. 스케줄링/수행 단계

이 두가지 특성은 서로 독립적이며 이중 스케줄링/수행 단계를 떼어놓은 것이 스레드다.

정리하자면
프로세스 - 자원소유권의 단위
스레드 - 디스패칭(실행)의 단위

📖 멀티스레딩

OS가 한 프로세스 내에서 여러 개의 쓰레드를 지원하는 기능
멀티 쓰레드 환경에서 프로세스는 보호와 자원할당의 단위로 정의된다.

위 사진에서 볼수 있듯이
멀티 프로세스모델에서는 PCB와 TCB가 존재한다.

각각하나씩 설명을 해보자면

<공유자원>
user address space - 데이터,코드,힙,파일 등 스택을 제외한 사용자 영역
PCB - 이전에 살펴봤던 PCB중 자원의 소유권에 대한 정보 담당

<개인자원>
User Stack - 각 스레드마다 지역변수 등을 저장할수 있는 스택이 존재
Kernel Stack - 프로세스 내에서 OS가 실행되는 경우에는 커널 스택 또한 스레드별로 관리
TCB - 스케줄링, 레지스터 값 등 실행과 관련된 정보들은 TCB에 저장됌.

📖 스레드 상태

프로세스의 상태처럼 스레드에도 상태가 존재한다.

생성, 블록 , 비블록 , 종료로 구성되어있으며
프로세스의 상태와 비슷하다.

한가지 차이점은 스레드에서도 보류 상태가 존재하는 데 
이때 보류는 하드웨어의 swapping area에 스와핑되는 것이 아닌 모종의 다른 이유로 
보류 된 것을 의미한다.

프로세스가 스왑 아웃이 된다면 해당 프로세스 내의 모든 스레드도 멈춰야 하기에 이를 구분한다.

📖 스레드를 쓰는 이유

멀티 프로세싱이 있음에도 멀티 스레딩도 쓰는 이유는 뭘까?

스레드의 장점은 다음과 같다.

1. 스레드의 생성과 제거 시간은 프로세스의 생성과 제거 시간 보다 빠르다.
2. 스레드의 문맥교환은 프로세스의 문맥교환보다 빠르다.
3. 자원과 상태를 공유하여 더욱 효율적인 운영이 가능하다.

스레드는 자원과 상태를 공유하기 때문에 문맥교환 및 생성시에 스택과 TCB만 고려하면된다.
그렇기에 프로세스 보다 효율적인 생성과 문맥교환이 가능하다.

또한 프로세스 간의 통신(IPC) 보다 같은 프로세스 내에서 자원을 공유하는
스레드 간의 통신이 더욱 효율적이다.

📖 스레드의 유형

쓰레드 구현에는 사용자 수준 쓰레드와 커널 수준 쓰레드가 존재한다.
편의를 위해 전자를 ULT(user level thread) 후자를 KLT(kernel level tread)라고 하자.

📖 ULT

ULT의 경우 커널이 스레드의 존재를 알지 못하고 
스레드 라이브러리를 통해 스레드를 관리한다.

스레드 라이브러리는 스레드 생성,제거 등을 비롯한 다양한 내용의 코드를 가지고 있다.
처음에는 하나의 스레드로 시작하여 수행을 하는 과정에서 스레드의 개수가 증가한다.

스레드 생성시 스레드 라이브러리를 통해 만들어지며 라이브러리를 통해 관리된다.

<문맥교환>
스레드의 문맥은 
1. 사용자 레지스터 2. PC(program counter) 3. 스택 포인터 등으로 구성된다.

스레드를 사용하다가 라이브러리로 제어를 넘겨주고 
다시 라이브러리에서 다음에 사용할 스레드에게 제어를 넘겨주며 문맥을 복구시켜준다.

커널의 역할을 라이브러리가 한다고 보면된다.

<장점>
1. 사용자 영역에서 문맥교환이 발생하기에 모드 스위칭이 발생하지 않아 속도가 빠르다.
2. 라이브러리를 사용하기에 어떤 운영체제에도 쉽게 적용이 가능하다.

<단점>
1. 한 쓰레드가 블록될시 해당 프로세스의 모든 프로세스가 블록된다.
   커널이 스레드를 모르고 프로세스 단위로 관리를 하기 때문이다.
2. 프로세스 별로 프로세서의 시간을 할당 받기 때문에 
   각 프로세스 내의 스레드 개수는 고려되지 않음
   
ex) a 프로세스의 스레드가 3개 b의 프로세스의 스레드가 2개라도 1:1로 시간배분

📖 KLT

KLT의 경우 커널이 스레드를 관리한다.

커널 수준에서 문맥 정보를 관리하며 스케줄링이 스레드를 기준으로 이루어진다.

<장점>
1. 여러 프로세서에게 같은 프로세스 내의 여러 스레드를 동시에 스케줄링이 가능하다.
2. 한 스레드가 블록 되더라도 프로세스 내의 다른 스레드들은 정상작동이 가능하다.

<단점>
1. 스레드를 교환할때 커널모드가 반드시 실행되야 하기에 속도가 상대적으로 느리다.

대표적인 운영체제로 Windows가 존재한다.

📖 혼합

위 두 방식의 장점을 취하기 위해서 혼합된 방식도 존재한다.

커널이 관리하는 스레드 + 라이브러리가 추가적으로 생성한 스레드가 존재한다.

대표적인 운영체제로는 Solaris가 존재한다.
profile
학생

0개의 댓글