본문 바로가기
학교 수업/운영체제

운영체제 6 || 스레드(threads)

by Godgil 2021. 4. 17.

 

멀티프로세서 구조는 기본적으로 cost가 높음

-개발이 어렵다.

-속도에 있어서 오버헤드가 있다.

위와 같은 문제들을 스레드가 해결해 줌

 

1. What is Thread?

- 스레드는 CPU이용의 기본 단위

- 스레드는 프로그램에서 일련의 명령들을 실행함.

 

이 스레드는 두 가지 형태로 나뉘는데

 

  a. 싱글 스레드 프로세스

- 스레드가 단일이라서 thread state가 하나만 존재함.

- 이 싱글 스레드가 하나에 코어에만 매핑이 됨

 

  b. 멀티 스레드 프로세스

- 스레드 여러개가 별도의 실행 흐름을 가짐

 

 

1-1. 스레드끼리 공유하는 것

- Code

- Global variable

- Opened files

- Heap

1-2. 스레드 각자 가지고 있는 것

- Set of registers (Program Counter, Stack Pointer..)

- Stack 영역 (하지만, 다른 스레드의 스택에 접근할 수 없는건 아님.)

- Thread ID

 

2. 프로세스와 스레드의 차이

- 프로세스는 멀티 스레드를 가질 수 있음

- 스레드는 하나의 프로세스에 속해있음

- 프로세스는 스레드 실행의 컨테이너 같은 존재

- 모든 스레드들은 같은 주소영역을 참조함

- 스레드는 CPU scheduling의 기본 단위

 

 

 

3. 멀티 스레딩의 장점

- 스레드 사이의 통신은 주소영역을 공유하기 때문에 오버헤드가 적다

- 큰 작업들을 분할해서 스레드별로 동시에 처리가 가능하다. 즉 모듈화가 가능하다.

- I/O operation과 computing연산을 동시에 수행 가능하다

- 사용자 측면에서 반응성이 높다

 

 

4. Concurrency VS Parallelism

 

4-1. Concurrency

하나 이상의 Task가 동시에 수행 될 수 있도록 하는 프로그램적 성질

>> Concurrency는 SW적 성질이며 Logical한 개념임.

>> 스레드가 매우 빠르게 번갈아가면서 작동이 되면서 사용자 입장에서는 마치 여러개의 작업이 동시에 수행되는 것 처럼 보임

 

4-2. Parallelism

하나 이상의 Task가 동시에 수행 될 수 있도록 하는 하드웨어적 성질

>> 스레드가 각각의 코어에 매핑이 되면서 여러개의 스레드가 동시에 실행이 됨

 

Parallelism 없이 Concurrency만 수행도 가능함

 

 

4.2.1 Parallelism의 타입

- Data Parallelism

> 전체 데이터를 작은 subset으로 나누어서 각 코어별로 실행하는 것

>> 예를들면 Array의 합을 구하는데, 한 스레드는 0~n/2까지 더하고, 다른 스레드는 n/2부터 n까지 더해서 두 결과를 합치는 경우

 

- Task parallelism

> 코어 각각 특정한 일을 담당하게 되어있어서 각 스레드마다 다른 operation을 처리하는 것

>> 이 스레드는 I/O operation처리 담당, 이 스레드는 computating담당 이런식으로 역할분담

 

 

5. Amdahl's Law

전체 Task를 1로 잡고, Serial하게 동작하는 부분을 S, Paarallel하게 동작하는 부분을 1-S라고 할 때, N개의 코어를 사용하면 얼마만큼의 성능 향상이 이루어지는지 계산하는 것

 

-ex) 40%가 Serial하게, 60%가 Parallel하게 움직이는 프로그램이 두개의 코어를 가지고 있으면 성능 향상은 1/(0.4 + 0.3)정도

-ex) 이론적으로 코어의 개수가 무한이면 성능은 1/S만큼 향상됨

-ex) 이론적으로 Serial하게 동작하는 부분이 없다면, 성능은 N배 증가함

 

 

 

6. Thread Libraries

6.1 Kernel Thread

-OS에 의해서 스레드가 관리되는것. 이것이 결국 스케쥴링의 단위

-현대의 OS들은 모두 커널스레드를 지원함

 

6.2 User threads

- user-level threads libraries에서 스레드가 만들어지고 관리되는것 

 

이 둘이 각각 매핑되는 방법이있는데, One to One model, Many to Many model, Many to Many model, Two-level Model 등등이 있다.

댓글