1. Thread
1. Thread의 개념
- 실행의 가장 작은 단위
- stack과 register는 분리해서 가짐 : thread마다 독립적으로 실행 흐름을 갖기 위해서
- 메모리는 공유하고 있어서 process간 통신이 많은 경우 유리한 구조
2. Thread를 사용하는 이유
1) 병렬성을 높일 때 효율적
- process 생성은 memory to memory copy라서 thread 생성이 더 빠르고, 가벼워서 많이 생성 가능
- 처리 가능한 동시 접속자 수 증가
2) 자원을 효율적으로 사용 : thread는 process의 메모리 안에서 해결
3) IPC를 사용하지 않고 data 공유 가능
2. Multicore Programming
1. 개념
- core 1개에 thread 1개 mapping 가능 => 병렬성 없음
- 싱글 코어 CPU에서 멀티스레드로하면 성능에 큰 차이가 없다. => multicore로
2. 문제점
1) 어떤 부분을 병렬화할 수 있는지 잘 파악해야 함
2) 복잡한 부분과 간단한 부분을 동시에 실행하면 한쪽이 놀기 때문에 규모를 비슷하게 나눈다.
3) 자원을 잘 분배해주어야 한다. 프로그램 내용에 비해 많이 받은 쪽이 빨리 끝내고 논다.
4) Data dependency : 한 thread의 결과값이 다음 thread에 영향을 주면 기다려야 한다.
5) 병렬적으로 수행되기 때문에 Test & Debug가 어렵다.
3. Concurrency VS Parallelism
1. Concurrency (동시성)
- 여러 일을 번갈아 가면서 수행 => 시간을 두고 보면 모든 일이 진전된 것처럼 보임
2. Parallelism
- 동시에 task를 수행할 수 있는 능력
+) Hyper - threading : CPU가 더 많은 것처럼 속인다. 하나의 thread가 CPU를 안 쓰는 시간이 있으니까 다른 곳에 쉬고 있는 CPU를 사용
4. Multithreading Model
1. User-level thread
1) 개념
- thread의 상태 정보(TCB)가 user-level process 메모리 영역에 저장됨
- thread 관련 함수들(생성, 삭제, thread scheduling)이 library형태로 프로그램 내에 존재 (OS와 관련 X)
2) 장점
- 간단한 library 함수(systemcall X)를 사용해서 빠르고 가볍다.
3) 단점
- kernel이 thread에 대한 정보가 없으니까 맞춰서 scheduling을 하지 못한다. (=scheduling 대상은 process)
- 한 process 내에 thread 중 하나가 disk I/O가 필요하면 다 같이 wait queue로 간다.
2. Kernel-level thread
1) 개념
- TCB와 함수가 kernel에 존재한다.
- scheduling의 대상 = thread
2) 장점
- 하나의 thread가 block 되면 다른 thread에게 줄 수 있다.
3) 단점
- 생성할 때 시간이 많이 걸림
- process에서 thread 생성할 때 context switching 발생 : system call => kernel mode로 => user mode로
- TCB에 담을 정보도 커짐 : 어느 process의 thread인지에 대한 정보 필요
5. Thread Pool
- 요청이 오면 처리하기 위한 thread들의 모음
- request가 오면 thread pool에서 하나를 꺼내서 해당 요청을 수행하도록 한다.
- Dispatcher(request queue) : 여유 있는 thread에게 request를 연결시켜준다.
'CS > 운영체제' 카테고리의 다른 글
CH3) Process (0) | 2021.09.05 |
---|---|
CH2) Operating System Structure (0) | 2021.09.01 |
CH1) Introduction (0) | 2021.08.31 |