시스템이 올바르게 동작하기 위해서는 사용자 프로그램으로부터 운영체제 영역을 보호 해야한다. (운영체제도 현재 메모리에 상주해 있다는걸 잊지말자) 그리고 사용자 프로그램끼리도 메모리를 보호해야한다. 이러한 문제는 하드웨어가 해결해야 성능면에서 이점을 가질 수 있다. (소프트웨어가 관여하게 되면 하드웨어 동작 이후 처리해야함으로 당연히 성능면에서 좋지 않을것) 이러한 문제를 해결하는 하나의 방법을 설명하겠다.
각 프로세스는 독립된 메모리 공간을 가지며 이 공간은 보장되어야한다. 그렇기 때문에 우리는 두개의 레지스터를 이용하여 보호를 한다. 이것을 base register
와 limit register
라고 부른다. base register
는 내 프로세스의 시작 주소를 저장한다. limit register
는 주어진 영역의 크기를 저장한다. 간단하게 시작점이 100이고 주어진 영역의 크기가 123이라면 영역의 범위는 100~222까지가 될 것이다.
이러한 메모리 공간의 보호는 CPU 하드웨어가 사용자 모드에서 생성된 모든 주소와 레지스터를 비교하여 동작한다. 만약 사용자 모드에서 수행하는 프로그램이 운영체제 영역을 침범하면 오류로 간주하고 trap을 발생시킨다.
base register
와 limit register
는 운영체제의 특권 명령으로만 load된다. 특권 명령은 커널 모드에서만 수행되고 운영체제만 레지스터 값을 변경할 수 있도록 하여 사용자 프로그램이 레지스터를 내용을 변경하는것을 막는다. 그러나 커널 모드는 운영체제 영역 그리고 사용자 영역 모두 접근할 수 있다.