Multithread
각종 독립적인 일을 동시에 수행하기 위해 Thread를 사용한다.
Process Creation이 무거운 작업이라면 그에 비해 Thread Creation은 가벼운 축에 속한다.
현대의 Kernel들은 거의 MultiThread를 사용한다.
thread마다 고유의 Register, Stack, PC를 가지고 있어서 다른 실행 경로를 가진다. 다만 코드와 파일 들은 공유하여 가볍게 실행될수 있다.
서버에서 Multithread를 사용할는 경우 Server에 request가 들어오면 그에 응하는 작업을 실행해야 하는데 이때 새로운 Thread를 생성하고 본인은 지속적으로 Request가 들어오는 지 확인한다.
Thread의 장점
- 응답성이 좋다: 프로세스가 부분적으로 Blocking이 되더라도 기존에 하던일을 유지할수 있다.
- 자원 공유: 지원을 공유하며 가성비 있게 자원을 사용할수 있다.
- 저렴한 비용: 기존에 사용 중인 데이터가 있기 때문에 새로운 Thread를 사용하기에 비용이 덜든다.
- Scalability: 멀티코어의 장점을 십분 활용할 수 있다.
MultiCore Programming이 프로그래머에게 어려운 이유
- 작동 행위를 구분 해야함: 여러 가지 공정에 대한 확실한 이해와 순서를 고려해야함(Care about Sequential event)
- 자원 벨런스
- 데이터 분할
- 데이터 종속성 고려
Parallelism VS Concurrency
Parallelism(병렬성): 동시간대에 동시에 일을 수행해 나감
Concurrency(병행): 시간을 나누어 여러가지 일을 빠르게 순차적으로 수행함
Data Parallelism VS Task Parallelism
Data Parallelism : 데이터를 분할하여 여러개의 코어가 같은 일을 수행하게 함 ex) 각 코어가 같은 계산
Task Parallelism : 코어를 나누어 각각의 코어가 서로 다른 일을 수행하게 함 ex) 각 코어가 다른 계산
Amdahl's Law
Task가 진행될 때 Sequential한 Task의 비율에 따라 Multithred로 진행되는 부분으로 얻을수 있는 성능향상을 나타낸 공식
만일 N이 0이 되면 (1-p)에 비례함으로 Serial Porpotion에 비례한다는 법칙이다.
Kernel Thread VS User Thread
User Thread: User-level의 라이브러리에서 Thread를 지원함
Kernel Thread: 현대의 커널들도 Kernel-Level에서 Thread를 지원함
Multithreading Models
Many to one
User thread를 하나의 kernel thread에 매핑되는 방식
하나의 thread가 막히면 모든 block이 막혀버림
본 모델의 경우 하나의 코어에 엮여있어서 병렬 수행이 불가능함, 멀티코어 이용이 불가능함
사용자가 원하는 만큼 Thread를 생성할수 있다는 장점이 있다
거의 쓰이지 않는 방식이다.
One to one
- User thread와 Kernel thread를 하나씩 매핑
- User thread 를 생성하는 것은 Kernel thread를 사용하는 것과 마찬가지의 효과를 가지며 이로서 진짜 병렬처리가 가능해진다.
- 한개의 thread가 blocking되어도 다른 Thread는 상관없이 돌아감
- 사용자 thread를 무한정 생성할 수는 없음
- 가장 일반적인 방식의 모델이다.
Many to Many
- 중간에 Multiplexing을 이용하여 임의의 User thread와 Kernel thread를 매핑 시켜줌
- 굉장히 구현하기 어렵다.
- 사용자가 thread를 많이 생성하면서도 병렬처리 또한 가능함
Two Level Model
One to One과 Many to Many를 섞어서 사용하는 방식
Thread library
User space에서 Kernel-level의 library를 사용할수 있는 API이다.
- Asynchronous threading: 부모와 자식 thread가 독립적으로 병렬적 실행
- Synchronous threading: 부모가 자식 Thread가 종료될때까지 기다림
Pthreads
POSIX Standard인 Thread Programming에 대한 성능 요구 사항을 정리한것이다. 관련된 OS들은 모두 Pthread방식을 준수하고 있다.
각 Thead에 대한 Programming Code를 써보고 실행시켜보기
'공부 학습' 카테고리의 다른 글
운영체제 4주차 - 2 (0) | 2021.03.29 |
---|---|
시스템프로그래밍 - 함수정리 (0) | 2021.03.24 |
운영체제 3주차 - 2 (1) | 2021.03.16 |
시스템프로그래밍 2주차 (0) | 2021.03.15 |
운영체제 3주차 - 1 (0) | 2021.03.15 |