2017년 6월 26일 월요일

사용자 영역, 커널 영역

- 리눅스 i386 32bit 환경에서 사용자 영역을 3G 커널영역을 1G로 나누어 사용함
- include/asm-i386/page.h에 __PAGE_OFFSET이나 PAGE_OFFSET에서 커널공간과 사용자 공간의 경계 값(0xC000 0000)
- 메모리 공간에 접근할 수 았는 권한 부여(일반 사용자의 메모리 접근 제어)
- 메모르 접근 검사는 CPU 자체에서 제공
- 특권 링(privilege ring, privilege level): CPU에서 제공하는 권한
- level 0 : 커널 공간(Core) -> 메모리 영역
- level 1, 2 : 커널 공간(Subsystem) -> 메모리 영역 지정(디바이스, GUI 등)
- level 3 : 사용자 공간
※ 보통은 0, 3만을 사용한다.

GDT(Global Descriptor Table)
- 세그먼트 디스크립터: 운영체제가 부팅하는 과정 동안에 해당 레벨에 사용할 메모리 영역을 지정하는 특별한 자료구조
- DPL 필드(2bit) : 특권 레벨 지정
- Type 필드: 코드영역, 데이터영역, 일기/쓰기, 실행권한 지정
- System Call: 사용자 영역에서 커널 영역에 있는 함수를 호출
- CALL 명령어로 상위레벨에 접근할 수 있게 함
- RET 명령어로 권한을 돌려줌
- JMP 명령어로 다른 레벨 사이로 이동 불가능
DPL 3 --------------CALL------------> DPL 0
        <-------------RET---------------
        <--X--------- JMP---------X-->
- CPL: 현재 실행중인 특권 레벨 저장 레지스터
인터럽트 발생 전(CPL3) ---> 인터럽트 서비스 루틴(CPL0) ---> 인터럽트 처리 후(CPL3)
- RPL: CPL을 조작하여 운영체제를 조작하려 하기 때문에 요청하는 쪽의 권한을 기록하고 추적하기 위한 용도
* 64bit IA64 CALL -> SYSCALL, RET -> SYSRET

[출처] IT EXPERT 리눅스 커널 프로그래밍(도서)


댓글 없음:

댓글 쓰기