행복한 연어의 이야기

(윈도우 시스템) 11. 쓰레드의 이해 본문

IT/윈도우 시스템 프로그래밍

(윈도우 시스템) 11. 쓰레드의 이해

해피살몬 2021. 8. 11. 21:40

1. 쓰레드란 무엇인가?

두가지 이상의 일을 동시에 처리하기 위해서 혹은 둘 이상의 실행 흐름이 필요해서 

추가적으로 프로세스를 생성하는 작업은 상당히 부담스럽다.

많은 프로세스의 생성은 빈번한 컨텍스트 스위칭으로 이어져 성능에 영향을 미치기 때문이다.

만약 A 프로세스와 B 프로세스가 공유하는 컨텍스트 정보가 있다면 컨텍스트 스위칭의 부담을 줄일 수 있을것이다.

별개의 프로그램을 실행한다면 프로세스를 별도로 실행해야하지만

하나의 프로그램에서 둘 이상의 실행흐름을 두는 상황을 위해 쓰레드가 디자인 되었다.

정리하자면 다음과 같다.

1. 쓰레드는 하나의 프로그램 내에서 여러개의 실행 흐름을 두기 위한 모델이다.

2. 쓰레드는 프로세스처럼 완벽히 독립적인 구조가 아니다. 쓰레드들 사이에서 공유하는 요소들이 있다,

3. 쓰레드는 공유하는 요소가 있는 관계로 컨텍스트 스위칭에 걸리는 시간이 프로세스 보다 짧다.

 

메모리 관점에서 본 프로세스와 쓰레드

프로세스가 프로세스를 생성하면

Code, Data, Heap, Stack 영역이 두 프로세스 마다 각각 존재 하게 된다.

프로세스가 쓰레드를 생성하면

Code, Data, Heap 영역은 공유하고 쓰레드 마다 스택 영역을 따로 갖는다. 

 

Windows 에서의 프로세스와 쓰레드 (중요)

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

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

프로세스는 Running Ready Blocked 상태를 지니지 않는다.

상태를 지니는 것은 쓰레드이며 스케줄러의 실행단위도 프로세스가 아닌 쓰레드이다.

프로세스를 생성하면 기본적으로 main 쓰레드가 생성되며

앞서 프로세스라고 말한 내용 대부분은 이 main 쓰레드라고 생각해야한다.

 

2. 쓰레드 구현 모델에 따른 구분

커널 레벨 쓰레드와 유저 레벨 쓰레드

프로그램이 동작하기 위해 사용되는 메모리 공간을 유저 영역(Code, Data, Heap, Stack)이라 하고

나머지 공간(운영체제가 동작하기 위해 사용함) 을 커널 영역이라고 한다.

이 영역에 따라 두가지 쓰레드를 구분할 수 있다.

1. 쓰레드를 생성 및 스케줄링 하는 주체가 커널일 경우 커널 레벨 쓰레드 라고 한다.(커널 영역)

2. 커널이 쓰레드 모델을 제공하지 않을 경우 (혹은 커널 쓰레드 모델이 마음에 들지 않을 경우)등

커널에 의존적이지 않은 형태로 쓰레드의 기능을 제공하는 라이브러리를 이용해서 만든 쓰레드일 경우

유저 레벨 쓰레드라 한다. (유저 영역)

 

커널 모드와 유저 모드

Windows 는 동작할 때 커널모드와 유저모드 중 한가지 모드로 동작한다.

일반적인 프로그램은 유저 모드에서 동작하며 커널 영역에서 실행이 이뤄져야 할 경우 커널모드로 전환이 일어난다.

커널 모드에서는 유저영역, 커널영역 모두 접근이 가능하고

유저 모드에서는 유저 영역은 접근 가능하지만 커널영역에 대한 접근은 제한된다.

(스케줄러의 경우 커널 역역에 존재하기에 스케줄러가 실행되려면 커널 모드로 전환이 되어애 한다.)

이 모드의 전환은 시스템에 부담을 주는 일이다.  

 

커널 레벨 쓰레드와 유저 레벨 쓰레드의 장점 단점

커널레벨 쓰레드

장점 : 커널에서 직접 제공하기 때문에 안전성과 다양한 기능성이 제공된다.

단점 : 커널에서 제공하는 기능이기 때문에 유저 모드와 커널모드의 전환이 빈번하게 일어난다.(성능 저하)

유저레벨 쓰레드

장점 : 모드 전환이 필요 없기 때문에 성능이 좋다.

단점 : 프로세스 내 쓰레드 중 하나의 쓰레드가 커널에 의해 블로킹 되면 다른 쓰레드도 동작하지 않는다.

 

 

알고 넘어가야할 것

1. 메모리 관점에서 프로세스와 쓰레드의 차이점

2. 커널 영역 vs 유저 영역

3. 커널 모드 vs 유저 모드

4. 커널 레벨 쓰레드 vs 유저 레벨 쓰레드

 

'윤성우 저자'님의 '뇌를 자극하는 윈도우즈 시스템 프로그래밍' 책을 보고 정리한 내용입니다.

Comments