💡스레드란
✅목적
프로세스 간에는 서로의 데이터를 읽을 수 없다.
반면, 스레드끼리는 공유된 메모리를 통해 적은 비용의 커뮤니케이션이 가능하다.
이러한 스레드의 사용으로써,
- 리소스가 절약된다.
- 여러 request가 감당 가능해진다.
- Input/Output 작동과 computation 작동이 동시에 일어날 수 있다.
- context switching의 비용이 비교적 덜 든다.
- multiprocessor에 더 잘 매핑된다.
✅스레드는 "함수"의 형태로 instruction stream을 실행한다.
✅Process vs. Thread
아래는 한 프로세스에 여러 스레드가 있는 예시이다.
반면 아래는 "프로세스"가 두 개인 것이고, 스레드는 활용되지 않았다.
💡스레드와 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 ()
User level thread vs. Kernel level thread
✅User level thread
thread-switching code가 User space(: Application의 영역. ↔ Kernel space: OS의 영역)에 있다.
따라서 OS는 어떤 thread도 볼 수 없다.
- 옛날옛적의 thread 구현 방식이다.
✅Kernel level thread
thread-switching code가 kernel에 있다.
'IT > 컴퓨터구조와 운영체제' 카테고리의 다른 글
[Synchronization] Condition Variables (0) | 2024.04.05 |
---|---|
[Synchronization] Locks(Mutex) (0) | 2024.04.05 |
[Process] Process의 개념, Address Space, State, Context switch, API (4) | 2024.03.27 |
[Pipeline CPU] in RV32I CPU microarchitecture (4) | 2023.12.23 |
Virtual Machine (0) | 2023.04.30 |