9.5-VM_as_a_Tool_for_Memory_Protection
현대의 컴퓨터 시스템은 OS 가 Memory 에 접근할 수 있는 수단을 제공해야만 한다.
User Process 가 Read-Only 인 코드 부분을 변경하면 안된다.
Kernel 내부의 코드나 데이터는 Read 조차 안되야한다.
다른 Process 의 코드나 데이터에 관여하면 안되며,
다른 Process 가 모두 허락하기 전에는 모두에게 공유된 Page 를 변경하면 안된다.
분리된 Address Space 는 서로 다른 Process 간의 메모리를 분리하는데 용이했다.
여기서 Address Translation Mechanism 은 자연스럽게 접근을 더 세밀하게 조정할 수 있다.
왜냐하면 Address Translation Hardware 가 PTE 를 읽어서 CPU 가 주소를 생성하기 때문에,
PTE 에 Permission Bit 를 추가하는것이 자연스럽다.
위의 예시에서 3가지의 Permission Bit 를 추가했다.
SUP bit 는 Kernel Mode 에만 읽을 수 있다는 점을 표현한다.
즉, User Mode 에서는 읽을 수 없다.
READ, WRITE Bit 는 해당 Page 에 대한 read, write 접근을 의미한다.
만약 명령어가 이러한 접근 권한을 지키지 않는다면,
CPU 는 General Protection Fault 를 유발시킨다.
해당 Fault 는 통제권을 Kernel 의 Exception Handler 로 넘기고, Handler 는
해당 명령어가 실행된 Process 에 SIGSEGV 신호를 전달한다.
Linux 는 이 Exception 에 대해 보통 "Segment Fault" 를 출력한다.