오래 못 할 짓 하지 않기

[ 운영체제 ] 7. Thread 본문

3학년 1학기/운영체제 (OS)

[ 운영체제 ] 7. Thread

쫑알bot 2024. 4. 2. 17:38
728x90

Thread

 

- Process : 실행중인 프로그램

 

- Thread : 하나의 프로그램에서 2개 이상으로 나뉘어져 동시에 실행되는 하나의 단위

             = 그냥 프로그램이라는 옷에 있는 한 가닥 실 이라는 표현이 정확할 것 같다.

 

   스레드 특징 )  하나의 프로세스 안에 있는 Thread끼리는  Resources를 공유한다.

 

 

Process가 공장

Thread가 일꾼이라고 생각하면 된다.

 

 

 

Thread Control Blcok (TCB)

: Thread에 관련된 정보를 담아둔다.

 

● 정보 :

- Thread id

- Thread 상태

- Stack pointer

- Prograrm counter

- Pointer to PCB ( 자기가 속해있는 프로세스의 PCB 를 가리킨다. )

 


 

근데 Thread를 쓰는 이유는?

 

하나의 작업을 하자고 Process를 새로 만드는 것은 시간/자원 측면에서 비효율적이다.

 

● Thread의 장점

 

1. 반응성

: Process가 막혀도(Blocked) 그 안에서 Thread가 계속 움직이기 때문에, user에 대한 반응성을 높여준다.

 

 

2. 자원 공유

: Thread는 (자신이 속한) Process에 있는 자원을 공유하기 때문에,  Shared memory 혹은 Message passing보다 낫다.

 

3. 경제적

: Process 만드는 것보다 싸다, Context switching이 상대적으로 덜 일어나므로 overhead도 적다.

 

4. Scalability

: Process는 multiprocessor의 장점도 가져갈 수 있음

 ( Processor = Thread 로 생각하는 것 같음.)


 

Multicore Programming

Process가 공장

Thread가 일꾼이라고 생각했을 때

 

공장이 여러 개 있다.

 

 

Multicore Programming에는 2가지가 있다.

 

Concurrency ( 동시성 ) 와 Parrallelism ( 병렬성 ) 이 있음.

▲ Single-core                    ▲ Multi-core  

● Concurrency

 

: 동시에 실행되는 것처럼 보이지만, 여러 작업을 번갈아가면서 실행

 

- 작업은 짧은 시간동안 실행 - 중단을 반복한다.

https://yunchan97.tistory.com/61

 

 



 

● Parallelism

 

: 여러 프로세서가 동시에 작업을 처리하는 것 ( 실제로 동시에 실행됨)

 

- 작업이 독립적으로 실행

- 각각의 프로세서에서 병렬로 처리된다.

 

https://yunchan97.tistory.com/61



https://yunchan97.tistory.com/61

 

Type of Parallelism

 

- Data Parallelism 

   : Data를 여러 core를 통해 subset data를 만들고, 모두 똑같은 작업을 한다.

 

ex) 투표 개표 (10만 표가 있음)

core가 4개 있다고 가정했을 때, 각 core당 2.5만개씩 나눈다면 모두가 할 일은 똑같다.

동시에 가능하고, 같은 일을 한다.

- Task Parallelism 

   : Thread들을 각각의 코어에 넣고, 각각 Thread가 자기 할 일을 수행한다.

 

동시에 가능하고(=독립적), 각자 고유의 일을 한다.

 

ex) Task = 교실 청소

1분단 : 창문닦기

2분단 : 바닥쓸기

3분단 : 칠판닦기

...

 

 

 



Multithreading Models

 

Process가 공장

Thread가 일꾼이라고 생각하면

 

이건 일꾼이 많은 공장 1개이다.

 

우선 일꾼도 다 같은 일꾼이 아니듯이

Thread도 다 같은 Thread가 아니다.

 

유저모드 커널모드가 있듯이

User Thread , Kernel Thread가 있다.

 

 

 

 

(출처)

한동대학교 고윤민교수님 - OS

 

(참고)

https://yunchan97.tistory.com/61