1. Thread(스레드)
- 프로세스를 왜 만들었지?? : 프로그램 돌릴라고 ㅋㅋㅋ 프로그램 돌리는 데 필요한 개념임
=> 그래서 상태 천이가 생김
=> 근데 Thread를 왜 따로 빼서 구분함???
=> 프로세스가 가지는 두 의미(자원 소유자, 스케줄링의 대상 단위) 를 분리한 것 뿐
=> 여기서 스케줄링의 대상을 Thread가 맡기로 함.
- 장점: 빠른 응답, 스레드 간 자원공유, multi-processor 환경에 적합
- 하나의 스레드는 각각의 레지스터(PCB)와 스택을 가짐(코드, 데이터, 파일 등은 공유한다)
- 종류: user level thread(내가 만든거 ㅋㅋ), kernel level thread(system call 등 커널 안에 있으면 그냥 커널스레드임)
* 스레드가 살아가는 공간(T,D,B,S)에서 어디에 사니???
=> 흩어져서 산다 ㅋㅋㅋㅋ Data는 공유하고 나머지 Text, BSS, Stack에 여기저기 퍼져있음
2. Multi-threading Models
- 다대일: 여러개의 user스레드가 하나의 kernel 스레드에 매핑된다. (경쟁함, 스케줄러가 정해줌)
- 일대일: 한 user 스레드에 한 kernel 스레드
- 다대다: 여러개의 user 스레드가 여러개의 kernel 스레드에 매핑됨. OS가 여러개 커널스레드 만들게 해줌
* Mulilevel Model
user thread =>LWP에 매핑됨 : 스케줄러에 의해, 경쟁해서 매핑됨
LWG =>Kernel thread : OS가 정의하는듯..
Kernel thread = > CPU : System Call로 이루어짐
* Thread의 Context Switching이 왜 빠르지? LWP만 교체하니까..
3. Threading Issues
- Pthread Unix에서 쓰임
- 스레드의 PCB 중.. 스레드 집에 줄줄 매달려 있는 LWP들..
Thread마다 PCB가 존재한다. 스레드는 각각 ID를 가진다(그래야 스케줄링 가능)
pc, reg, stack등을 각각 따로 가지고 있다.. 그런데!
파일 같은건 공유 가능(a가 연 파일을 b 가 수정 가능)
- Linux Thread: =task라고 함, clone()으로 생성함. fork 아님. clone()은 부모 자식간 주소공간을 공유한다.
- 4가지 상태 : new, runnable, blocked, dead
댓글남기기