"가령, 응용 프로그램이 그래픽 카드에 직접 명령을 내리는 상황이 생긴다면 어떻게 될까요?
윈도우와 같은 멀티태스킹 프로그램은 한 프로그램이 전체 화면을 다 쓰고 있다는 보장이 없습니다. 예를 들어 A, B 두 프로그램이 실행되고 있는데 A 프로그램 창이 B 프로그램 창 일부에 가려져 있는 경우 그 가려져 있는 A 창 부분은 내용이 변했다고 해서 실제로 화면에 그것을 그려서는 안됩니다.
그런데 응용 프로그램이 그래픽 카드에 직접 명령을 내려버리면 이게 무시되어 버리고 화면이 엉망이 될 수 있습니다. 따라서 운영체제는 프로그램이 어떤 일을 하는가에 따라서 접근할 수 있는 곳과 없는 곳을 설정해서 권한이 없으면 설령 프로그램에서 접근하려고 해도 운영체제에서 막아버려야 합니다. 이때문에 특권 레벨이 생긴 것입니다."
- "http://ask.nate.com/qna/view.html?n=1067418" 에서 발췌 -
Privilege Level
특권 레벨(Privilege Level) 이란 어떤 시점에서의 CPU 권한 상태를 나타낸다. 특권 레벨에 따라 CPU가 현재 어떠한 명령을 실행 시킬 수 있고, 메모리의 어떤 범위에 접근 할 수 있는지를 결정 한다. CPU의 현재 특권 레벨을 'CPL(Current Privilege Level)', 또는 '동작 레벨' 이라고 한다.
특권 레벨은 0에서부터 시작하고 CPU와 운영체제에 따라서 레벨을 정한다. 레벨 숫자가 높을 수록(레벨 3) 권한이 적고, 레벨 숫자가 낮을 수록(레벨 0) 권한이 많다. 레벨이 높은 쪽에서 낮은 쪽의 권한을 넘보면 이를 문제 있는 행동으로 간주해서 운영체제는 그 실행을 막거나 아예 프로그램을 다운시켜버리기도 한다.
Intel x86 프로세서에는 레벨 0과 레벨 3, 곧, Ring 0(Kernel Mode)와 Ring 3(User Mode)만을 쓰고 있다. 커널 모드는 주로 디바이스 드라이버와 시스템에 직접 붙는 프로그램에서 쓰이며 저수준의 명령을 사용 할 수 있다. 통상적으로 CPU는 특권 레벨 0에서 운영체제를 실행 하고 특권 레벨 3에서 응용프로그램을 실행 시킨다.
특권 레벨에 따라 실행 시킬 수 있는 명령어가 다른데 예를 들어 CPU의 동작 정지를 가능하게 하는 HLT(종료) 명령은 CPU가 특권 레벨 0인 상태에서만 실행이 가능 하다. 만일 그 외의 권한에서 실행을 할 경우 예외를 발생 시킨다. 이처럼 특권 레벨이 0이 아니면 실행 되지 않는 명령을 '특권 명령(Privileged Instruction)' 이라고 한다.
명령어 뿐만 아니라 메모리 영역도 특권 레벨에 따라 접근 할 수 있는 부분이 다르다. CPU는 4GB의 주소 공간(x86 프로세서에서)을 세그먼트로 분할 해서 관리 할 수 있다. 각각의 세그먼트에는 세그먼트에 접근할 수 있는 CPU의 특권 레벨을 정하는 '디스크립터 특권 레벨(Descriptor Privilege Level)'을 설정 할 수 있다. DPL은 곧 CPU의 특권 레벨과 대응 되기 때문에 0~3의 값을 가진다.
CPU는 현재 자신의 특권 레벨 이하의 DPL을 가진 세그먼트를 읽어올 수 없으며 이는 곧 특권 레벨 0에서 동작하는 운영 체제는 애플리케이션의 메모리에 접근 할 수 있지만, 특권 레벨 3에서 동작하는 애플리케이션은 그 이하의 DPL값을 가지고 있는 운영체제의 메모리 영역에 접근할 수 없음을 의미한다. 단, 프로그램의 실행은 DPL과 CPL이 일치 할 때만 가능 하다. 설령 Ring 0인 운영체제라도 DPL이 3인 메모리 영역에 올라가 있는 프로그램을 실행 할 순 없다.
(* 세그먼트에 의한 메모리 보호 기능은 페이징이 나온 이후에는 잘 사용하지 않는다.)
Last update ::
- 2016.06.03
Keyword ::
- Privilege Level
- Segment
- CPL(Current Privilege Level)
- DPL(Descriptor Privilege Level )
Reference ::
"http://ask.nate.com/qna/view.html?n=1067418"
"API로 배우는 Windows 구조와 원리"
"http://www.intel.co.kr/content/www/kr/ko/architecture-and-technology/64-ia-32-architectures-software-developer-vol-3a-part-1-manual.html"