MultiThreading
Server Architecture
- iterative server : 서버가 깨어나서 Message Queue의 내용을 처리하고 처리가 완료되면 다시 Queue의 내용을 확인하여 처리
*장점 : 단순하고 관리가 쉽다.
*단점 : 하나의 Process를 사용하기 떄문에 처리속도가 느리다.
- Concurrent server : Message Queue에서 Request의 처리를 서버가 직접하는것이 아니라 별도의 Worker Process를 두어 처리하게 하는 방식
*장점 : 다수의 Process를 이용해 처리속도가 빠르다.
*단점 : 여러 Process를 생산 및 관리해야 되기 때문에 복잡하고 시스템에 부담이 된다.MultiThreading의 목적
- Concurrency(동시 처리)는 높이면서 Execution Unit을 생성하거나 수행시키는데 드는 부담을 줄임
- Massively Parallel Scientific Programming ( 대용량 병렬 프로그래밍 )을 할 때 발생하는 오버헤드를 줄이기 위해
- Process와 Thread의 관계
- Process는 Context와 Thread of Control로 이루어져있다.
- 이때 Process안에 Thread가 여러개 있는 것이 MultiThread이다. - MultiThread구현에 필요한 것들
- 하나의 Process가 여러개의 Thread를 갖게 되므로 Process는 여러개의 Stack을 갖게된다.
- 여러개의 Thread를 관리하기 위해 Thread ID를 할당 한다.
- Thread 마다의 정보를 갖고있을 Thread control Block(TCB)을 생성한다.
- Task
- Design Time Process
- Process에게 부여된 자원(Resource) - MultiThread의 구현
1. User-Level 구현
1. Stack 구현
2. TCB를 Thread 마다 생성 (User Level에 위치)
3. Thread 간의 Switching을 위해 Scheduler 구현
- user Level에 Scheduler 함수 생성
- 여러 Scheduler함수를 모아 Thread Library로 묶음
*Thread Library : Thread의 생성 및 소멸, Thread Context저장, Thread간 접근 가능
- 문제점 -
1. 한 Thread가 Blocking System call을 호출하는 경우 해당 process의 모든 Thread가 Block된다.
2. OS가 Thread에게 직접 Interrupt를 전달할 수 없기 때문에 Preemptive Schedling을 할 수 없다.
2. Kernel-Level구현
- Kernel의 System call을 이용하여 모든 처리를 한다.
-장점 : User-Level의 단점을 모드 보완한다.
- 단점 : Kernel단의 수행시간이 증가되면서 추가적인 오버헤드가 발생한다.
3. Combined User-Level / KernelLevel 구현
- 대부분 User-Level에서 처리
- Interrupt가 왔을 시 Interrupt를 User-Level Scheduler에게 전달
- Blocking System call 발생 시 해당 Thread를 중지시키고 새로운 Kernel Stack을 할당하여 User Process에 붙여 Return시킨다.
POSIX Pthread API
- 다양한 unix계열 운영체제들의 API를 표준화 하기위해 IEEE가 정의한 인터페이스Thread life Cycle
'프로그래밍 > 운영체제' 카테고리의 다른 글
Process Synchronization (0) | 2016.10.20 |
---|---|
CPU Scheduling (0) | 2016.10.15 |
Context Switching(2) (0) | 2016.10.11 |
Context Switching(1) (0) | 2016.10.11 |
Process Scheduling (0) | 2016.10.09 |