쓰레드는 누구에 의해 만들어 지는가?
커널 레벨(Kernel Level) 쓰레드와 유저 레벨(User Level) 쓰레드
- 커널 레벨 쓰레드와 유저 레벨 쓰레드는 기능의 제공 주체가 누구야에 달려있다.
1. 커널 레벨(Kernel Level) 쓰레드
- 쓰레드를 생성해 주는 대상이 커널
- 운영체제가 제공하는 시스템 함수 호출을 통해서 쓰레드 생성을 요구
> 프로그래머 요청에 따라 쓰레드를 생성 및 스케줄링하는 주체가 커널
유저 영역 : 일반 프로그램이 동작하기 위해 사용되는 메모리 공간 (Code, Data, Heap, Stack)
커널 영역 : 운영체제라는 하나의 소프트웨어를 실행시키기 위해서 필요한 메모리 공간
- 쓰레드 A,B,C의 실행코드는 유저 영역에 존재할 것이다. 그러나 스케줄러와 쓰레드 정보(스케줄링 하는데 필요한 쓰레드 정보)는 커널 영역에 존재한다.
> 이것이 바로 커널레벨 쓰레드 유형이다.
2. 유저 레벨(User Level) 쓰레드
- 멀티 프로세스 운영체제라고 해서 커널이 기본적으로 쓰레드를 지원하는 것은 아님
- 커널에서 쓰레드 기능을 지원하지 않을 때 생각해 볼 수 있는 것이 유저 레벨 쓰레드
> 커널에 의존적이지 않은 형태로 쓰레드의 기능을 제공하는 라이브러리를 활용
- 쓰레드를 지원하지 않기 때문에 스케줄러가 스케줄링하는 대상은 프로세스이다.
- 쓰레드를 스케줄링하는 스케줄러는 유저 영역에서 실행된다.
> 유저레벨 쓰레드 모델을 적용할 경우, 운영체제는 쓰레드의 존재를 알지도 확인하지도 못한다.
"메모리는 활용 대상에 따라서 유저 영역과 커널 영역으로 나뉜다. 유저 영역은 사용자가 구현한 프로그램 동작 시 사용하게 되는 메모리 영역이고, 커널 영역은 운영체제 동작 시 사용하게 되는 메모리 영역이다. 커널이 쓰레드를 지원할 경우 쓰레드 관리가 커널 영역에서 이뤄지기 때문에 커널 레벨 쓰레드 모델이라 하고, 커널이 지원하지 않을 경우에 라이브러리(threads.h)를 통해서 제공받아야 하는데 이러한 경우에는 유저 영역에서 쓰레드의 관리가 이뤄지기 때문에 유저 레벨 쓰레드 모델이라 한다."
커널 모드(Kernel Mode) 와 유저 모드(User Mode)
- Windows는 동작할 때 커널 모드와 유저 모드 중 한가지 모드로 동작한다.
> 일반적인 프로그램은 기본적으로 유저 모드에서 동작한다. 그러다가 Windows 커널이 실행되어야 하는 경우에는 커널 모드로 전환이 일어난다.
- 프로세스가 유저 모드에서 동작할 때에는 커널 영역으로의 접근이 금지된다.
- 커널 모드에서 동작할 때에는 모든 영역의 접근이 허용된다.
"모드의 전환 (커널 모드 <-> 유저 모드)은 시스템에 부담을 주는 일이다"
커널 모드와 유저모드를 제공하는 대상은 Windows 운영체제가 아니라, Processor이다.
> 즉 메모리 보호 기능이 CPU에 달려 있다.
커널 레벨 쓰레드와 유저 레벨 쓰레드의 장점 및 단점
커널 레벨 쓰레드
[장점] : 커널에서 직접 제공해 주기 때문에 안전성과 다양한 기능성이 제공된다.
[단점] : 커널에서 제공해 주는 기능이기 때문에 모드의 전환이 빈번하게 일어난다. -> 성능의 저하로 이어진다.
유저 레벨 쓰레드
[장점] : 커널은 쓰레드의 존재조차 모른다. 유저 모드로 동작하기 때문에 모드의 전환이 필요없다. -> 성능이 좋다.
[단점] : 하나의 프로세스 내에 총 3개의 쓰레드 A,B,C가 있다고 가정해 보자. 이중 쓰레드A가 시스템 함수를 호출했는데 커널에 의해서 블로킹되었다. 이럴 경우 B,C도 실행되지 않는다. (운영체제는 프로세스의 존재만 알고 쓰레드의 존재를 모르기 때문이다.) -> 커널 레벨에 비해서 결과 예측이 더 어렵다.
이것만은 알고 갑시다
1. 프로세스와 쓰레드의 차이점
- 프로세스는 메모리를 공유하지 않지만, 쓰레드는 스택을 제외한 나머지 메모리 공간을 공유한다.
2. 커널 영역 vs 유저 영역
- 메모리 공간은 커널 영역과 유저 영역으로 나뉜다. 커널 영역은 커널이 올라가 있으며, 커널의 실행을 위한 메모리 영역이고, 유저 영역은 운영체제 이외의 프로그램이 올라가 있으며 이 프로그램들의 실행을 위한 메모리 영역이다.
3. 커널 모드 vs 유저 모드
- 커널 영역의 보호를 위해서 커널 모드와 유저 모드라는 것을 정의한다. 유저 모드 상태인 경우 제한된 영역의 메모리 접근만 허용하고, 커널 모드 상태인 경우 모든 메모리에 접근이 가능하다.
4. 커널 레벨 쓰레드 vs 유저 레벨 쓰레드
- 쓰레드를 지원하는 운영체제의 기능을 통해서 생성된 쓰레드를 커널 레벨 쓰레드, 라이브러리 형태로 제공되는 기능을 통해서 셍성된 쓰레드를 유저 레벨 쓰레드라 한다.
12.2 쓰레드의 성격과 특성 (0) | 2020.04.19 |
---|---|
12.1 Windows에서의 쓰레드 생성과 소멸 (0) | 2020.04.19 |
11.1 쓰레드란 무엇인가? (0) | 2020.04.19 |
09.1 프로세스의 스케줄링(Scheduling) (0) | 2020.04.18 |
08.3 프로세스 환경변수 (0) | 2020.04.18 |
댓글 영역