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