쓰레드의 진실 -----------------------------------------------------------------------------------------------------------------

프로세스가 실행될때 윈도우에서는 무조건 적으로 쓰레드를 하나 생성한다. 즉 프로세스A에 속한 쓰레드 A를 생성한다고 보면 된다.

그럼 컨텍스트 스위칭이란? 프로세스A에 속한 쓰레드 A와 프로세스B에 속한 쓰레드B간에 벌어지는 작업 즉 프로세스와 프로세스간에 존재하는 쓰레드를 의미한다.

그림으로 보면 아래와 같다고 할 수 있다.




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

유저 영역 -> 하나의 프로세스에 할당되는 메모리 공간이 존재할때 사용자에 의해서 할당되는 메모리 공간을 의미한다.

커널 영역 -> 하나의 프로세스에 할당되는 메모리 공간에서 당연히 운영체제또한 차지하는 메모리 공간이 있을 것이다. 운영체제라는 하나의 소프트 웨어를 실행시키기 위해서 필요한 메모리 공간을 커널영역이라고 한다. 

프로그래머가 개발한 프로세서A B C의 실행코드는 유저영역에 존재하지만 스케줄러나 쓰레드 정보는 커널영역에 존재한다. 오늘날의 대부분의 운영체제에서는 이러한 커널레벨을 기반으로 하여 쓰레드 모델을 지원한다.

만약 운영체제에서 커널레벨을 기반으로한 쓰레드를 지원하지 않거나 프로그래머가 커널레벨을 기반으로한 쓰레드를 사용하지 않을 경우 커널레벨에 의존적이지 않은 쓰레드 기능을 지원하는 라이브러리를 활용할수 있다. 이렇게 유저가 직접 쓰레드를 만드는 것을 유저레벨 쓰레드라고 한다.

즉 유저레벨 쓰레드와 커널레벨 쓰레드는 기능을 제공하는 주체가 누구냐에 따라서 달라진다.


32비트 CPU에서는 총 4기가의 메모리를 지원하고 그 영역을 절반으로 나누어 유저영역과 커널영역을 지정한다고 생각하면 된다.


커널 모드 유저 모드 ---------------------------------------------------------------------------------------------

운영체제는 커널영역의 보호를 위해서 커널 모드와 유저모드라는 것을 정의하고 있다. 일반적인 응용프로그램이 실행될 때 시스템은 유저모드 상태에 있다. 이 경우 제한된 영역의 메모 접근할수 있다. 그러나 커널모드에서는 전 영역의 메모리 접근이 가능하다. 따라서 커널레벨 쓰레드는 커널 모드에서만 동작한다.



Posted by JJOREG