IT/컴퓨터구조와 운영체제

[Thread] 스레드 사용의 목적, 스레드 vs 프로세스, 스레드의 자원, 스레드 API

kykyky 2024. 3. 28. 11:42

💡스레드란

 

✅목적

프로세스 간에는 서로의 데이터를 읽을 수 없다. 

반면, 스레드끼리는 공유된 메모리를 통해 적은 비용의 커뮤니케이션이 가능하다.

 

이러한 스레드의 사용으로써,

- 리소스가 절약된다.

- 여러 request가 감당 가능해진다.

- Input/Output 작동과 computation 작동이 동시에 일어날 수 있다.

- context switching의 비용이 비교적 덜 든다.

- multiprocessor에 더 잘 매핑된다.

 

✅스레드는 "함수"의 형태로 instruction stream을 실행한다.

 

✅Process vs. Thread

아래는 한 프로세스에 여러 스레드가 있는 예시이다.

 

반면 아래는 "프로세스"가 두 개인 것이고, 스레드는 활용되지 않았다.

출처: 고려대학교 CSL

 

 

 

💡스레드와 Address space

 

각각의 스레드는 주소 공간 상에서 자원을 독점하기도 하고 공유하기도 한다.

 

 

✅독점

🚩

: CPU context

→ registers, stack(지역 변수들), stack pointer, program counter, scheduling properties

 

✅공유

: 실행 프로그램 상, instance와 관련된 것들

🚩

→ UID, GID, PID, Address space 중 text/data/heap, locks, open files, sockets

 

- concurrency problem → 다른 글에서 다룰 겁니다

 

 

 

👈Single Thread의 경우

 

 

 

 

 

 

 

 

 

 

 

 

 

👈multiple threads의 경우

:thread 1, 2는 각자 routine1(), routine2()를 실행한다.

 

 

 

 

 

 

 

출처: 고려대학교 CSL

 

 

 

💡스레드 API: Pthreads

 

✅pthread_create (thread, attr, start_routine, arg)

여기서 arg는 start_routine에 넘겨진다.

 

✅pthread_exit (status)

 

✅pthread_join (threadid,status)

 

✅pthread_yield ()

 

출처: 고려대학교 CSL



User level thread vs. Kernel level thread

 

✅User level thread

thread-switching code가 User space(: Application의 영역. ↔ Kernel space: OS의 영역)에 있다.

따라서 OS는 어떤 thread도 볼 수 없다.

 

- 옛날옛적의 thread 구현 방식이다.

출처: 고려대학교 CSL

 

✅Kernel level thread

thread-switching code가 kernel에 있다.

출처: 고려대학교 CSL