티스토리 뷰
1. 개요
• 스레드는 CPU 이용의 기본 단위이다. 스레드는 스레드 ID, 프로그램 카운터, 레지스터 집합, 스텍으로 구성된다.
• 스레드는 같은 프로세스에 속한 다른 스레드와 코드, 데이터 섹션, 그리고 열린 파일이나 신호와 같은 운영체제 자원을 공유한다.
• 각각의 스레드는 스텍, 레지스터 프로그램 카운터를 가진다.
2. 다중 스레드 프로그래밍 장점
• 응답성 : 하나의 쓰레드에서 응답을 처리하고 다른 스레드에서는 메인 코드를 처리하면 응답성이 증가한다.
• 자원 공유 : 프로세스 끼리는 공유 메모리나 메시지 전달 기법을 사용해야하지만 같은 프로세스내 쓰레드는 자동적으로 프로세스의 자원을 공유한다.
• 경제성 : 스레드는 자신이 속한 프로세스의 자원들을 공유하기 때문에 스레드를 생성하고 문맥을 교환하는 것이 보다 더 경제적이다.
• 규모 가변성 : 다중처리기 구조에서는 각각의 스레드가 다른 처리기에서 병렬로 실행될 수 있다.
3. 멀티 코어 프로그래밍
• 하나의 코어는 한 번에 오직 하나의 스레드만 실행할 수 있다.
• 최근에는 하나의 CPU안에 복수의 코어가 들어 있다.
• 다중 코어 시스템 상에서 프로그래밍 하기 위해서는 작업나누기, 균형, 데이터 분리, 데이터 종속성, 시험 및 디버깅을 고려해야한다.
4. 다중 스레드 모델
• 사용자 스레드 : 사용자 스레드는 커널 영역의 상위에서 지원되며 일반적으로 사용자 레벨의 라이브러리를 통해 구현되며, 라이브러리는 스레드의 생성 및 스케줄링 등에 관한 관리 기능을 제공한다. 동일한 메모리 영역에서 스레드가 생성 및 관리되므로 속도가 빠른 장점이 있는 반면, 여러 개의 사용자 스레드 중 하나의 스레드가 시스템 호출 등으로 중단되면 나머지 모든 스레드 역시 중단되는 단점이 있다. 이는 커널이 프로세스 내부의 스레드를 인식하지 못하며 해당 프로세스를 대기 상태로 전환시키기 때문이다.
• 커널 스레드 : 커널 스레드는 운영체제가 지원하는 스레드 기능으로 구현되며, 커널이 스레드의 생성 및 스케줄링 등을 관리한다. 스레드가 시스템 호출 등으로 중단되더라도, 커널은 프로세스 내의 다른 스레드를 중단시키지 않고 계속 실행시켜준다. 다중처리기 환경에서 커널은 여러 개의 스레드를 각각 다른 처리기에 할당할 수 있다. 다만, 사용자 스레드에 비해 생성 및 관리하는 것이 느리다.
5. Many-to-One
• 다수의 사용자 스레드를 하나의 커널스레드에 연결한다.
• 스레드 관리는 사용자 공간의 스레드 라이브러리에 진행된다.
• 하나의 스레드가 Blocking 시스템 호출을 할 시 모든 스레드가 커널에 접근하지 못한다.
6. One-to-One
• 하나의 유저 스레드에 하나의 커널 스레드를 맵핑하는 방식이다.
• 다중처리기에서 다-대-일 모델보다 더 많은 병렬성을 제공한다.
• 유저 스레드를 생성할 때 그에 따른 커널 스레드를 생성해야한다. 그런데 커널 스레드 생성하는데에는 오버헤드가 크다.
7. Many-to-Many
• 여러 개의 유저 스레드를 그보다 작거나 같은 커널 스레드로 멀티 플렉스 방식으로 연결한다.
• 우선순위가 지정되지 않아 순차적으로 커널스레드를 점유한다.
8. fork() 및 exec() 시스템 호출
• fork()는 프로세스를 복제하는 함수이다. 이때 fork()는 fork()를 호출한 쓰레드만 복제해햐 할까? 아니면 프로세스 전체를 복사해야할까? fork()를 호출후 exec()를 호출하면 프로세스 전체를 복사해준다. 그렇지 않으면 해당 쓰레드만 복사한다.
9. Cancellation
• 쓰레드 취소는 쓰레드가 끝나기 전에 그것을 강제 종료 시키는 작업이다. 병렬로 무언가를 찾고 있을때 하나의 쓰레드가 찾으면 나머지 쓰레드는 찾을 필요가 없다.
• 취소되어야 할 스레드를 목적 스레드라고 부른다.
• 비동기식 취소 : 한 스레드가 목적 스레드를 즉시 강제 종료시킨다.
• 지연 취소 : 목적 스레드가 주기적으로 자신이 강제 종료해야 하는지 검사한다. 또한 쓰레드는 자신이 취소되어도 안전하다고 판단되는 시점에서 취소 여부를 검사한다. 이 지점을 취소점이라고 부른다.
10. Implicit Threading
• 쓰레드의 스케줄링을 사용자가 하는 것이 아니라 운영체제 또는 컴파일러에게 맞기는 것이다.
11. Thread Pools
• 프로세스를 시작할 때 아예 일정한 수의 스레드를 미리 풀로 만들어 두는 것이다.
• 새 스레드를 만들어 주는것 보다 기존 스레드로 서비스 해주기 때문에 빠르다.
• 스레드 갯수를 재한해두기 때문에 스레드 대량 생산으로 인한 오류를 막을 수 있다.
12. Signal handling
• 쓰레드를 signal로 하여 제어하는 것이다.
• 신호는 특정 사건에 발생되고 생성되면 프로세스에게 전달된다. 그리고 신호를 받은 프로세스는 반드시 신호를 처리해야한다.
• 위 같은 특징을 멀티 쓰레드 프로세스에 적용시키면 신호를 특정 쓰레드나 모든 쓰레드에게 전달되게 하여 적용시킬 수 있다.
13. Thread-Local Storage
• 한 프로세스에 속한 스레드들은 그 프로세스의 데이터를 모두 공유한다. 그러나 상황에 따라서는 각 스레드가 자기만 엑세스할 수 잇는 데이터를 가져야 할 필요가 있다. 이러한 데이터를 TLS라고 부른다.
14. Scheduler activations
• 커널 스레드의 수를 동적으로 조절하는 것을 가능하게하는 기술이다.
• 다-대-대 또는 두 수준 모델에서 대부분 유저쓰레드와 커널 스레드 사이에 LWP(경량 프로세스)라는 중간 자료 구조를 둔다.
• 커널은 응용에게 LWP의 집합을 제공하고 응용은 LWP를 가지고 쓰레드 스케줄을 한다.
• LWP에는 커널 쓰레드가 하나 씩 붙어 있는데 응용에서 5개의 커널의 접속하는 일을 하고 싶을 때 5개의 LWP를 이용하여 제송한다.
• 커널이 논다라는 정보를 커널에서 쓰레드라이브러리에게 전달하는 것을 업콜이라고 부른다.
'SoftWare > OS' 카테고리의 다른 글
OS - 5. CPU Scheduling (2) (0) | 2016.04.23 |
---|---|
OS - 5. CPU Scheduling (1) (0) | 2016.04.23 |
OS - 3. Process(2) (0) | 2016.04.10 |
OS - 3. Process(1) (0) | 2016.04.08 |
OS - 2. Operating System Structures(2) (0) | 2016.04.03 |
- Total
- Today
- Yesterday
- 포켓몬 Go
- 5582
- 테라펀딩 #투게더펀딩 #P2P투자 #부동산 소액 투자 #카카오 #토스
- java
- 인텐트
- LISTVIEW
- java 파일 입출력
- 알고리즘
- 카운터
- jad
- java url
- 자바 입출력
- android
- Res
- 서버
- 파일입출력
- Java Decompiler
- 파일 입출력
- counter
- Service
- php
- vim 설치
- 아두이노
- 유전
- vim
- 안드로이드
- Notification
- 유전 알고리즘
- c언어
- 포켓몬 고
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 29 | 30 |