본문 바로가기

Windows/_System Programming

쓰레드(Thread)

쓰레드(Thread) : 하나의 프로그램 내에서 여러 개의 실행 흐름을 두기 위한 모델


1. 독립적인 스택(Stack)을 가진다.

2. 코드 영역을 공유한다.

(위와 같이 쓰레드 main 함수는 코드 영역에 존재하는 모든 함수를 호출할 수 있다)

3. 데이터 영역과 힙을 공유한다.(전역변수와 동적 할당된 메모리 공간 공유 가능)

4. 프로세스 핸들 테이블 공유

프로세스 핸들 테이블에 대한 핸들 정보는

프로세스 내의 쓰레드 들에게 공유되어 각 쓰레드가 그 핸들에 대해 접근이 가능하다
(참고 : 같은 프로세스내의 쓰레드들은 스택 이외의 모든 것을 공유한다)



프로세스와 쓰레드

Windows 에서 프로세스는 단순히 쓰레드를 담는 상자다.

실제 프로그램 흐름을 형성하는 것은 쓰레드이다.


따라서 스케줄러(Windows)가 볼때 2개의 프로세스가 아닌
 
실행 흐름을 가지고 있는 쓰레드 단위로 판단을 한다. 5개의 쓰레드를 인식한 후 스케줄링 한다.

(참고 : 컨텍스트 스위칭 시간

프로세스 A 내의 쓰레드 끼리의 컨텍스트 스위칭은 공유 영역이 많아 시간이 적게 걸린다.

하지만 프로세스 A와 프로세스 B 내의 쓰레드 끼리의 컨텍스트 스위칭은 공유 부분이 없어(프로세스끼리는 독립)

시간이 더 오래 걸린다)



커널(Kernel) 영역과 유저(User) 영역 :


유저 영역 : 사용자가 구현한 프로그램 동작시 사용하게 되는 메모리 영역

커널 영역 : 운영체제 동작시 사용하게 되는 메모리 영역


커널 레벨 쓰레드 :

쓰레드를 생성 및 스케줄링하는 주체가 커널


장점 : 안전성과 다양한 기능

단점 : 유저 모드와 커널 모드로의 전환으로 인해 성능이 저하된다.

(참고 : 사용자가 구현한 프로그램은 기본적으로 유저모드에서 동작하다가 Windows 커널이 실행되어야 하는 경우
커널 모드로의 전환이 일어나고 일을 마치면 다시 유저 모드로 전환된다)


유저 레벨 쓰레드 :

커널에 의존적이지 않은 형태로 쓰레드의 기능을 제공하는 라이브러리를 활용

(참고 : 스케줄러는 쓰레드를 지원하지 않아 쓰레드의 존재를 모른다. 따라서 프로세스 단에서 스케줄링을 한다
따라서 쓰레드 끼리의 스케줄링은 유저가 구현해야 한다) 

장점 : 유저모드에서 커널모드로의 전환이 필요없다. 성능이 좋다

단점 : 프로그래밍 하기 어렵고 커널 레벨 쓰레드에 비해 결과 예측이 어렵다.

'Windows > _System Programming' 카테고리의 다른 글

쓰레드(Thread) 메모리 접근 동기화  (0) 2010.03.04
쓰레드(Thread)의 생성과 소멸  (0) 2010.02.28
환경변수  (0) 2010.02.25
스케줄링 알고리즘과 우선순위  (0) 2010.02.25
파이프(Pipe) IPC 통신 소스  (0) 2010.02.24