Computer Science/컴퓨터 구조

[CSAPP] 9.5 VM as a Tool for Memory Protection(메모리 보호 툴로서의 VM)

tgool 2023. 3. 1. 12:02

9.5 VM as a Tool for Memory Protection(메모리 보호 툴로서의 VM)

  • 현대의 모든 컴퓨터 시스템은 운영 체제가 메모리 시스템에 대한 접근을 제어할 수 있는 수단을 제공해야 한다.
  • 유저 프로세스는 읽기 전용 코드 섹션을 수정할 수 없다.
  • 또한 커널의 코드 및 데이터 구조를 읽거나 수정하는 것이 허용되어서는 안 된다.
  • 다른 프로세스의 개인 메모리를 읽거나 쓰는 것이 허용되어서는 안 되며, 모든 당사자가 명시적으로 허용하지 않는 한 다른 프로세스와 공유하는 가상 페이지를 수정하는 것이 허용되어서는 안된다.(내부의 프로세스에서 명시적으로 통신 시스템 콜 호출을 통해)
  • 앞서 살펴본 바와 같이 별도의 가상 주소 공간을 제공하면 서로 다른 프로세스의 개인 메모리를 쉽게 격리할 수 있다.
  • 그러나 주소 변환 메커니즘은 훨씬 더 미세한 액세스 제어를 제공하기 위해 자연스러운 방식으로 확장될 수 있다.
  • 가상 메모리 시스템에서는 CPU가 특정 가상 주소를 발생시킬 때마다 그것에 해당하는 PTE를 반드시 읽을 수밖에 없다
  • 주소 변환 하드웨어는 CPU가 주소를 생성할 때마다 PTE를 읽기 때문에, PTE에 일부 추가 권한 비트를 추가하여 가상 페이지의 내용에 대한 액세스를 제어하는 것이 간단하다.
  • 이 예에서는 각 PTE에 3개의 권한 비트를 추가했다.
    • SUP 비트는 페이지에 액세스하기 위해 프로세스가 커널(관리자) 모드에서 실행되어야 하는지 여부를 나타낸다.
    • 커널 모드에서 실행되는 프로세스는 모든 페이지에 액세스할 수 있지만 유저 모드에서 실행되는 프로세스는 SUP가 0인 페이지에만 액세스할 수 있다.
    • 읽기 및 쓰기 비트는 페이지에 대한 읽기 및 쓰기 액세스를 제어한다.
    • 예를 들어 프로세스 i가 유저 모드에서 실행 중인 경우 VP 0을 읽고 VP 1을 읽거나 쓸 수 있는 권한이 있다. 그러나 VP 2에 액세스할 수 없다.(SUP이 1이기 때문에)
  • 명령어가 이러한 권한을 위반하면 CPU는 커널의 예외 핸들러로 제어를 전송하는 일반적인  protection fault를 trigger하며, 이는 SIGSEGV 시그널을 권한을 위반한 프로세스로 전송한다.
  • 리눅스 셸은 일반적으로 이 Exception을 "segmentation fault(분할 오류)"로 보고한다