운영체제에는 계층별로 자원에 대한 접근을 제한하거나 허용해 놓은 특권 레벨(Privilege Level)이라는 것이 존재하는데,
이는 Privilege Ring이라고도 부르며 이를 그림으로 나타내면 다음과 같다.
(출처 : https://en.wikipedia.org/wiki/Privilege_level)
이는 낮은 권한에서 악성코드 등에 의해서 운영체제가 손상되는 것을 방지하고, 각 계층별 할 수 있는 일을 정하여 계층에 대한 역할을 구조화하기 위해서이다. 그림에서 보다시피 Kernel 레벨인 Ring 0부터 User(Application) 레벨인 Ring 3까지 특권 레벨이 존재한다.
위에서도 언급했다시피 유저 모드와 커널 모드는 자원에 대한 접근에서 그 차이가 발생한다.
유저 모드에서 실행되는 응용 프로그램은 각각의 가상 메모리를 할당받고, 각자의 독립성을 보장받기 때문에 다른 프로그램의 영역에 침범할 수 없다. 또한 유저 모드에서 실행되기 때문에 커널 공간에도 침범할 수 없다.
하지만 커널 모드에서 실행되는 응용 프로그램은 모든 메모리를 자유롭게 사용할 수 있다.
유저 모드에서 실행되는 어플리케이션이 높은 레벨의 권한을 필요로 하는 작업을 해야 하는 경우에는 System Service Call을 이용하는데, 유저 모드에서 실행되는 Thread가 커널 모드에 접근할 수 있는 권한을 받고, 시스템 자원을 이용한 뒤 다시 유저 모드로 돌아오는 것이다. 이는 syscall이라고 하는 instruction을 이용해서 실행이 가능하다.
'Knowledge' 카테고리의 다른 글
사설망-외부망 통신에 대한 공부 (0) | 2016.07.02 |
---|---|
Greedy Algorithm + 회의실 배정 (0) | 2016.06.21 |
마이크로/모놀리식 커널 (Micro/Monolithic Kernel) (0) | 2016.04.02 |
libcapstone-dev 설치 방법 (0) | 2016.03.12 |
PE 파일과 Memory-Mapped File (0) | 2015.12.24 |