일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
Tags
- String
- Dijkstra
- Brute Force
- 스토어드 프로시저
- DP
- 다익스트라
- Two Points
- 그래프
- union find
- Trie
- two pointer
- binary search
- MYSQL
- SQL
- 이진탐색
- Stored Procedure
- Hash
Archives
- Today
- Total
codingfarm
4. 스레드(Threads) 본문
4.1 개요(Overview)
- CPU 이용의 기본 단위
- 스레드 ID, 프로그램 카운트(PC), 레지스터 집합(Register Set) 그리고 스택으로 구성된다.
- 같은 프로세스에 속한 스레드 끼리는 코드, 데이터섹션, 열린파일이나 신호같은 OS 자원을 공유한다.
- 멀티스레드 기능을 통해 프로세스는 동시에 하나 이상의 작업들을 수행할 수 있다.
4.1.1 동기(Motivation)
- 현대의 컴퓨터에서 동작하는 거의 모든 응용 프로그램들은 다중 스레드를 이용한다.
- 웹 브라우저는 이미지 또는 텍스트를 표시하는 하나의 스레드와 네트워크로부터 데이터를 가져오는 또다른 스레드를 가질 수 있다.
- 워드프로세서는 그래픽을 표시하는 스레드와 키보드로부터 입력을 받는 스레드, 백그라운드에서 문법을 체크하는 스레드를 가질 수 있다.
- 다중 스레드는 멀티 코어 시스템에서 처리 능력을 향상시키도록 설계될 수 있다.
- 하나의 프로그램이 여러개의 비슷한 작업을 수행해야할 상황에서 스레드는 프로세스보다 효율적으로 쓰인다.
- 프로세스 생성은 많은 자원을 소모한다.
4.1.2 장점(Benefits)
- 다중 스레드 프로그래밍의 이점은 아래와 같다.
- 응답성(Responsiveness)
- 프로그램의 실행과 대화를 관리하는 스레드를 분리함으로써 응답성을 증가시킨다.
- 자원 공유(Resource Sharing)
- 프로세스는 공유 메모리와 메시지 전달 기법을 통해서만 자원의 공유가 가능하다.
- 하지만 같은 프로세스에 속한 쓰레드 끼리는 프로세스의 자원드과 메모리를 공유한다.
- 경제성(Economy)
- 스레드의 생성은 프로세스의 생성보다 더 경제적이다.
- 규모 적응성(Scalability)
- 각각의 스레드가 다른 처리기에서 병렬로 수행될 수 있다.
- 응답성(Responsiveness)
4.2 다중 코어 프로그래밍(Multicore Programming)
- 다중 스레드 프로그래밍은 다중 계산 코어를 더 효율적으로 사용할 수 있고 병행 실행을 더 향상 시킬 수 있는 기법을 제공한다.
- 아래그림에서 병행실행과 병렬실행의 차이를 볼 수 있다.
4.2.1 프로그래밍 도전과제(Programming Challenge)
- 병렬수행이 이루어지기 위해서는 여러 코어를 활용하는 스케줄링 알고리즘을 개발해야 한다.
- 다중 코어 시스템을 위해 프로그래밍 하기 위해서는 5가지 도전 과제를 극복해야한다.
- 태스크 식별(Identifying Tasks)
- 응용프로그램을 분석하여 독립된 병행가능 태스크로 나눌 수 있는 영역을 찾는 작업이 필요하다.
- 이상적인 태스크는 서로 독립적이고 개별코어에서 실행될 수 있어야 한다.
- 균형(Balance)
- 분리된 태스크들이 전체 작업에 균등한 기여도를 가지도록 해야한다.
- 데이터 분리(Data Spliting)
- 태스크가 접근하고 조작하는 데이터 또한 개별 코어에서 사용할 수 있도록 나누어져야 한다.
- 데이터 종속성(Data dependency)
- 태스크가 접근하는 데이터는 둘 이상의 태스크 사이에 종속성을 최소화 해야한다.
- 종속적인 경우에는 잘 동기화 해야한다.
- 시험 및 디버깅(Testing and Debugging)
- 다양한 경로 및 환경에서 충분히 실행해보고 점검해야한다.
- 태스크 식별(Identifying Tasks)
4.2.2 병렬 실행의 유형(Types of Parallelism)
- 데이터 병렬실행과 태스크 병렬 실행의 두가지 유형이 존재한다.
데이터 병렬 실행
- 동일한 데이터의 부분집합을 다수의 계산 코어에 분배한 뒤 각 코어에서 동일한 연산을 실행하는데 초점을 맞춘다.
태스크 병렬 실행
- 각 스레드가 고유의 연산을 실행한다.
- 현실적으로는 위 두가지 실행전략을 혼용한다.
4.3 다중 스레드 모델(Multithreading Models)
- 스레드를 위한 지원은 사용자 스레드(user threads)와 커널 스레드(Kernel threads)를 위해 사용자수준과 커널수준에서 제공된다.
- 사용자 스레드 : 커널위에서 지원되며 커널의 지원없이 관리된다.
- 커널 스레드 : OS에 의해 직접 지원되고 관리된다.
- 사용자 스레드와 커널 스레드는 연관관계가 존재해야하며 그 종류는 아래와 같다
4.3.1 다대일 모델(Many-to-One Model)
- 많은 사용자 수준 스레드를 하나의 커너 스레드로 사상한다.
- 스레드 관리는 사용자 공간의 스레드 라이브러리에 의해 행해진다.
- 효율적인편이다.
- 단점
- 한 스레드가 봉쇄형 시스템 호출을 할 경우, 전체 프로세스가 봉쇄된다.
- 한번에 하나의 스레드만이 커널에 접근 할 수 있으므로, 다중 스레드가 다중 코어 시스템에서 병렬로 실행 될 수 없다.
- ex) 그린 스레드(green thread0)
4.3.2 일대일 모델(One-to-One Model)
- 각 사용자 스레드를 각각 하나의 커널 스레드로 사상한다.
- 다대일 모델의 단점을 모두 보완한다.
- 단점
- 사용자 수준 스레드 생성을 위한 커널 스레드 생성에 따른 성능 저하 발생
- ex) Windows, Linux...
4.3.3 다대다 모델(Many-to-Many Model)
- 여러개의 사용자 수준 스레드를 그보다 작은 수 혹은 같은수의 커널 스레드로 멀티플렉스 한다.
4.3.4 두 수준 모델(two-level model)
4.6.3 스레드 취소(Thread Cancellation)
- 스레드가 끝나기 전에 강제 종료 시키는 작업을 일컫는다.
- 가령 여러스레드들이 DB를 병렬로 검색하다 어느 한 스레드가 결과를 찾았다면 나머지 스레드들은 취소되어도 된다.
- 또는 웹 브라우저에서 사용자가 웹 페이지를 더 이상 적재하지 않기 위해 스톱버튼을 클릭 할 수도 있다.(웹 페이지의 이미지들은 별도의 스레드에 의해 적재된다.)
- 목표 스레드(target thread) : 취소 되어야 할 스레드
- 목표 스레드의 취소는 2가지 방식으로 발생 가능하다.
- 비동기식 취소(asynchronous cancellation)
- 한 스레드가 즉시 목표 스레드를 강제 종료시킨다.
- 강제 종료시 할당된 자원 문제가 주로 발생한다.
- 스레드가 다른 스레드와 공유하는 자료구조를 갱신하는 도중에 취소요청이 오면 문제 발생
- 비동기식 취소의 경우 더 심각해진다.
- OS는 취소된 스레드로부터 모든 시스템 자원을 다 회수하지 못하는 경우가 있다.
- 지연 취소(Deferred cancellation)
- 목표 스레드가 주기적으로 자신이 강제 종료 되어야 할지를 점검한다.
- 스레드가 취소점(cancellation point)에 도달했을 때에 취소 작업이 일어난다.
- 목표 스레드가 질서 정연하게 강제 종료 될 수 있다.
- 실제 취소는 목표 스레드자신이 취소되어도 안전하다고 판단되는 시점에 이루어지므로 안전하다.
- 실제 스레드 취소는 정리 처리기(clean handler)함수의 호출에 의해서 이루어진다.
- 스레드가 획득한 모든 자원을 스레드가 종료되기 전에 반환하게 만든다.
- 스레드는 비동기식 취소를 권장하지 않는다.
- 기본적으로 스레드의 취소는 지연취소에 의해 발생하게된다.
4.6.4 스레드 로컬 저장소(Thread-Local Storage)
- 한 프로세스에 속한 스레드들은 그 프로세스의 데이터들을 모두 공유한다.
- 하지만 상황에 따라서는 각 스레드가 자기만 액세스 할 수 있는 데이터를 가져야 할 필요도 있다.
- 그러한 데이터를 스레드 로컬 저장소(Thread Local Storage, TLS)라고 부른다.
- TLS는 각 스레드의 고유한 정보를 저장한다.
- TLS는 단순히 지역 변수가 아니다.
- 지역변수 : 하나의 함수가 호출 되는 동안에만 접근 가능
- TLS : 함수 호출 전후에도 접근 가능
경량 프로세스(Light Weight Process; LWP)
- 다대다 또는 두수준 모델을 구현하는 시스템들이 커널과 스레드 사이에 두는 structure
- 커널 스레드를 스케줄링 한다.
- 응용프로그램이 사용자 스레드를 수행하기 위하여 스케줄할 가상 처리기(virtual process)이다.
- 입출력 완료를 기다리는동안 커널 스레드가 봉쇄되면 LWO에 부속된 사용자 수준 스레드도 봉쇄된다.
4.6.5 스케줄러 액티베이션(Scheduler Activations)
- 사용자 스레드 라이브러리와 커널 스레드간의 통신방법
- 계속
'Computer Science > OS' 카테고리의 다른 글
1.서론(Introduction) (0) | 2020.02.28 |
---|
Comments