컴퓨터 공학

운영체제 4장

혼새미로 2015. 11. 26. 19:13
반응형

4. 다중 스레드 프로그래밍
•4.1 개요
•스레드는 스레드 ID, 프로그램카운터, 레지스터 집합, 그리고 스택으로 구성된다.
•스레드는 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 그리고 열린 파일이나 신호와 같은 운영체제 자원들을 공유한다.
•전통적인 중량(heavy weight) 프로세스는 하나의 제어 스레드를 가지고있다. 만일 프로세스가 다수의 제어 스레드를 가진다면, 프로세스는 동시에 하나이상의 작업들을 실행할 수 있다.
•4.1.1 동기
•ex)워드 프로세서는 그래픽을 표시하는 스레드와 키보드로부터 입력을 받는 스레드, 백그라운드에서 철자법과 문법을 체크하는 스레드를 가질 수 있다.
•프로세서 생성 작업은 매우 많은 시간을 소비하고 많은 자원을 필요로 하는 일이다.
•4.1.2 장점
•응답성(responsiveness) : 대화형 응용을 다중 스레드화하면 응용프록램의 일부분이 봉쇄되거나 또는 응용프로그램이 긴 작업을 실행하더라도 프로그램의 실행이 계속되는것을 허용함으로써 사용자에 대해 응답성을 증가시킨다.
•자원공유(resource sharing) : 프로세스는 공유 메모리 또는 메시지 전달 기법을 통해서만 자원을 공유할 수 있다. 그러나 스레드는 자동적으로 그들이 속한 프로세스의 자원과 메모리를 공유한다.
•경제성(economy) : 프로세스 생성을 위해 메모리와 자원을 할당하는 것은 비용이 많이 든다. 스레드는 자신이 속한 프로세스의 자원을 공유하기 때문에 스레드를 생성하고 문맥을 교환하는것이 보다더 경제적이다.
•가변성(scalability) : 다중스레드의 이점은 다중처리기 구조에서 더욱 증가할 수 있다.
•4.1.3 다중코어 프로그래밍
•코어가 한개인 시스템상에서 병행성은 단순히 스레드 실행이 시간에 따라 교대로 실행되는것을 의미한다.
•다중코어시스템 상에서 프로그래밍을 하기위해서는 5개의 극복해야할 도전과제가 있다.
•- 작업나누기(dividing activities) : 응용을 분석하여 각 태스크가 개별코어상에서 병렬적으로 실행될 수 있도록 응용을 독립된 병행가능 태스크로 나누는 작업을 말한다.
•- 균형(balance) : 병렬로 실행될 수 있는 태스크를 찾아내는 것도 중요하지만 찾아진 부분들이 전체작업에 균등한 기여도를 가지도록 테스크를 나누는것도 중요하다.
•- 데이터분리(data spliting) : 응용이 독립된 태스크로 나누어지는 것처럼 태스크가 접근하고 조작하는 데이터 또한 개별코어에서 사용할 수 있도록 나누어져야 한다.
•- 데이터 종속성(data dependency) : 태스크가 접근하는 데이터는 둘 이상의 태스크 사이에 종속성이 없는지 검토되어야 한다.
•- 시험 및 디버깅(testing and debuging) : 프로그램이 다중코어에서 병렬로 실행될때 다양한 실행경로가 존재한다.
•4.2 다중 스레드 모델
•4.2.1 다대일모델(many to one model)
•많은 사용자 수준 스레드를 하나의 커널 스레드로 사상한다
•4.2.2 일대일모델(one to one model)
•각 사용자 스레드를 각각 하나의 커널스레드로 사상한다.
•일대다보다 더 많은 병렬성 제공
•다중처리기에서 다중스레드가 병렬로 실행되는 것을 허용한다.
•단점은 사용자 수준 스레드를 생성할때 그에 따른 커널 스레드를 생성해야 한다는 점이다. 커널 스레드를 생성하는 오버헤드가 응용프로그램의 성능저하를 일으킨다.
•4.2.3 다대다 모델
•여러개의 사용자수준 스레드를 그보다 작은 수 혹은 같은 수의 커널스레드로 멀티플랙스 한다.
•한번에 하나의 스레드만 커널에 의해서 스케줄링 되므로 진정한 동시성을 획득할 수 있다.
•4.3 스레드 라이브러리(thread library)
•스레드 라이브러리는 프로그래머에게 스레드를 생성하고 관리하기 위한 API를 제공한다
•- 커널의 지원없이 완전히 사용자 공간에서만 라이브러리 제공
•- 운영체제에 의해 지원되는 커널 수준 라이브러리를 구현하는 것이다.
•4.3.1 pthreads
•pthreads는 posix가 스레드 생성과 동기화를 위해 제정한 표준 API이다
•4.3.2 WIN 32 스레드
•4.3.3 java스레드
•4.4 스레드와 관련된 문제들
•4.4.1 fork() 및 exec() 시스템호출
•4.4.2 취소
•스레드 취소 : 스레드가 끝나기 전에 그것을 강제 종료시키는 작업
•목적 스레드 : 취소되어야 할 스레드
•취소는 다음과 같은 두가지 방식으로 발생할 수 있다.
•- 비동기식 취소(asynchronous cancellation) : 한 스레드가 목적스레드를 즉시 강제종료 시킨다.
•- 지연 취소(deferred cancellation) : 목적스레드가 주기적으로 자신이 강제종료해야 하는지 검사한다. 목적 스레드는 질서정연하게 자신을 강제종료 시킬 수 있는 기회가 주어진다.
•취소점 : 스레드가 자신이 취소되어도 안전하다고 판단한 시점
•4.4.3 신호 처리(signal handling)
•모든 신호는 다음과 같은 형태로 전달된다.
•- 신호는 특정 사건에 일어나야 생성된다.
•- 신호가 생성되면 프로세스에게 전달된다.
•- 신호가 전달되면 반드시 처리되어야 한다.
•동기식 신호 예: 불법적인 메모리접근과 0으로 나누기 등
•모든 신호는 둘중 하나의 처리기에 의해 처리된다.
•-디폴트 신호처리기
•-사용자 정의 신호처리기
•모든 신호마다 커널에 의해 실행되는 디폴트 신호처리기가 있다.
•이 디폴트 처리기는 신호를 처리하기 위해 호출되는 사용자 정의 처리기에 의해 대체될 수 있다.
•신호를 보낼 수 있는 스레드
•- 신호가 적용될 스레드에게 전달
•- 모든 스레드에게 전달
•- 몇몇 스레드들에게만 선택적으로 전달된다.
•- 특정 스레드가 모든 신호를 전달받도록 지정한다.
•4.4.4 스레드 풀(thread pool)
•모든 요청마다 새 스레드를 만들어서 서비스해 준다면 시스템에서 동시에 실행할 수 있는 최대 스레드 개수를 정해야 한다.
•스레드 풀은 프로세스를 시작할 때 미리 일정한 수의 스레드를 풀로 만들어 둔다.
•- 더 빠르다
•- 스레드개수에 제한을 둠으로써 병렬처리에 도움을 준다.
•4.4.5 스레드 별 데이터(thread specific data)
•각 스레드가 자기만 액세스 할 수 있는 데이터
•4.4.6 스케줄러 액티베이션
•통신의 조정은 응용프로그램이 최고의 성능을 보이도록 보장하기 위해 커널스레드의 수를 동적으로 조절하는 것을 가능하게 한다.

반응형

'컴퓨터 공학' 카테고리의 다른 글

이진분할을 이용한 최대,최소값 구하기 알고리즘  (0) 2015.11.26
운영체제 5장  (0) 2015.11.26
자막 만드는 방법(과거자료)  (0) 2015.11.26
컴퓨터 구조 4장  (0) 2015.11.26
운영체제 3장  (0) 2015.11.26