스레드 ? CPU 이용의 기본단위.
스레드구성 ? 스레드 ID, 프로그램 카운터, 레지스터, 스택
스레드는 같은 프로세스내의 다른 스레드와 코드, 데이터섹션, 운영체제 자원 공유.
다중 스레드 ? 프로세스 내의 다수의 제어 스레드를 가지고 있을 경우.
현대의 소프트웨어 패키지들은 대부분 다중 스레드를 이용한다.
예 ) 웹서버의 경우 프로세스 안에 여러 스레드를 만들어 클라이언트의 요청을 listen 하는 별도의 스레드 생성.
요청이 들어올시에 프로세스를 생성하지 않고, 새로운 스레드를 생성한다.
서버는 이렇게 요청들을 병렬로 스데르르 이용하여 처리한다.
- 다중 스레드 프로그래밍의 이점
응답성 : 프로그램이 계속된 요청에도 응답 가능. 하나의 명령에만 국한하지 않고 다중 명령에 대해 응답 가능
자원 공유 : 프로세스 내의 스레드들 사이에 자원과 메모리 공유 가능( 코드 및 데이터 ).
경제성 : 스레드를 사용하는 것이 새로운 프로세스를 생성하여 관리하는 것보다 더 적은 시간을 소모한다.
규모 가변성 : 다중처리기 구조에서는 각각의 스레드가 다른 처리기에서 병렬로 실행될 수 있다.
- 다중코어 프로그래밍
다중코어 프로그래밍을 위한 5가지 도전과제
1. 작업나누기(dividing activitise) : 코어에서의 병렬적 실행을 위해 독립된 병행가능 테스크로 나누는 작업
2. 균형(balance) : 전체작업에 균등한 기여도를 가지도록 테스크를 나누는 것.
3. 데이터분리(data Spliting) : 접근 및 조작되는 데이터 또한 개별코어에서 사용할 수 있게 나누어야함.
4. 데이터종속성(data dependency) : 테스크가 접근하는 데이터는 둘 이상의 태스크 사이의 종속성 여부 확인
5. 시험 및 디버깅(testing and debugging) : 병렬로 실행될때의 실행경로를 시험 및 디버깅.
- 다중 스레드 모델
사용자 스레드 – 커널 스레드
다대일 모델, 일대일 모델, 다대다 모델 등이 있다.
다대일 모델 -> 한번에 하나의 스레드만이 커널에 접근할수 있다.
일대일 모델 -> 사용자스레드 각각 하나의 커널 스레드를 가진다. 다대일 모델에 비해 더 많은 병렬성 제공
사용자스레드 생성시 커널스레드가 또다시 생성되어야 하고, 그에 따른 오버헤드가 단점이다.
다대다 모델 -> 사용자 수준스레드에 대비하여 작거나 같은 수로 멀티플렉스하여 커널 스레드 생성.
- 쓰레드 이슈
스레드 취소 : 스레드가 끝나기 전에 강제 종료시키는 작업. 취소되어야 할 스레드를 ‘목적스레드’라 함.
두가지 방법으로 취소 가능.
1. 비동기식 취소 : 한 스레드가 목적 스레드를 즉시 강제종료
2. 지연 취소 : 목적 스레드가 주기적으로 자신이 강제 종료해야하는지 검사.
스레드취소가 어려운 이유 : 취소 스레드들에게 할당된 자원문제, 모든 시스템 자원을 다 회수 못할 가능성.
스레드들이 자신이 취소되어도 안전하다고 판단되는 시점을 ‘취소점(cancellation point)’ 이라고 한다.
신호처리 : 어떤사건이 일어 났음을 알려주기 위해 사용
1. 신호는 특정사건이 일어나야 생성.
2. 신호가 생성되면 프로세스에게 전달.
3. 신호가 전달되면 반드시 처리되어야 한다.
동기식 신호 : 신호를 발생시킨 연산을 동일한 프로세스에 전달.
비동기식 신호 : 실행중인 프로세스 외부에서 발생되면 그 프로세스는 신호를 비동기식으로 받는다.
신호는 둘중 하나의 처리기에 의해 처리된다. ( 디폴트 신호 처리기, 사용자 정의 신호 처리기 )
다중 스레드 프로그램에서의 신호전달 선택목록
1. 신호가 적용될 스레드에게 전달.
2. 모든 스레드에게 전달.
3. 몇몇 스레드들에게만 선택적으로 전달.
4. 특정 스레드가 모든 신호를 전달받도록 지정
스레드 풀
다중스레드 서버의 여러문제
1. 서비스할때마다의 스레드 생성 소요 시간.
2. 모든 요청마다 새스레드를 서비스 한다면, 동시에 실행할수 있는 최대 스레드 수가 몇 개까지 가능한가?
- 스레드를 무한정 만들면 언젠가는 CPU 시간,메모리 공간과 같은 시스템 자원이 고갈된다.
그에 따른 해결책이 ‘스레드 풀’
스레드 풀의 기본 아이디어 : 프로세스 시작시 아예 일정한 수의 스레드를 미리 풀로 만들어두는 것.
요청이 들어올시 이 풀의 한 스레드에게 서비스 요청. 스레드가 바닥나면 서버는 스레드가 생길때까지 대기.
스레드풀의 장점
1. 기존 스레드로 서비스해주는 것이 더 빠름.
2. 스레드 개수에 재한을 둔다. 많은 수의 병렬처리가 불가능한 시스템에 도움.
스케쥴러 액티베이션
사용자 스레드 라이브러리와, 커널 스레드 간의 통신방법 중의 하나가 스케쥴러 엑티베이션.
'잡동사니 > 운영체제 설계' 카테고리의 다른 글
[운영체제] 메모리구조 (0) | 2016.05.06 |
---|