>

커널에서는 유저와 커널을 구분하고 유저가 함부로 커널을 침범할 수 없도록 하고 최대한 많은 프로그램이 공평하게 원활하게 동작할 수 있도록 한다.


Limit 체크

Type 체크

특권 레벨 체크

명령 세트 체크


이러한 체크 포인트를 통해 CPU가 모든 유저 레벨의 프로그램이 잘 동작하게 만들고 원하는 결과를 얻을 수 있도록 한다.


Limit 체크 - 세그먼트 디스크립터의 G비트가 0 일때는 0~0xFFFFF까지 선택 가능이고 1일때는 0xFFF~0xFFFFFFFF 까지 선택 가능이다.

유효 Limit는 전체 세그먼트 영역의 크기에서 1바이트를 뺀 것과 같다. 만약 넘어간다면 CPU는 일반 보호 예외(#GP)를 발생시킨다.


Type 체크 - 플래그 세팅 여부에 따라 권한을 체크한다.



특권레벨 - CPU의 특권 레벨은 0 ~ 3으로 4개가 있다. 주로 0과 3 두개만 사용한다. 낮은 레벨의 Task가 높은 레벨의 Task 데이터를 참조하려고 하면 일반 보호 에러가 발생한다.


CPL(Current Privilege Level) - 현재 실행되고 있는 Task의 특권 레벨, 다른 특권 레벨의 코드 세그먼트로 넘어가면 이 값이 변경된다.

DPL(Description Privilege Level) - 세그먼트의 특권 레벨을 나타냄.

RPL(Requested Privilege Level) -  어느 레벨에서 루틴이 불러졌는지, 누가 요구했는지를 나타내는 값.


콜게이트 - 낮은 특권 레벨의 프로그램이 높은 특권 레벨의 루틴을 잠깐 사용하는 것(소프트웨어 인터럽트도 해당한다.)

GDT에 디스크립터로서 포함이 되고, 상위 특권 레벨로 통하는 창구 세그먼트의 역할을 한다.


'Study > Kenrel' 카테고리의 다른 글

여러개의 Task 일때 Task Switching  (0) 2015.10.01
유저모드 Task Switching  (0) 2015.10.01
Task Switching in Kernel  (0) 2015.09.25
PIC 초기화  (0) 2015.09.24
IDT(Interrupt Descriptor Table)  (0) 2015.09.24
Posted by Mungsul
,