티스토리 뷰

SoftWare/OS

OS - 4. Thread

White Whale 2016. 4. 10. 17:34
728x90

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
링크
«   2024/05   »
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 31
글 보관함