ch9-Virtual_Memory

Process 는 다른 Process 와 CPU와 Main Memory 를 공유한다.
이는 몇가지 문제점을 만들 수 있다.

CPU의 일이 많아지면서, process 의 속도는 줄어들게 된다.
같은 자원을 공유하기 때문이다.
하지만 Process 여러개가 너무 많은 Memory 를 사용한다면, 일부는 더이상 실행하기 어려워질 것이다.

만약 Process 가 다른 Process 의 메모리를 사용한다면,
그 다른 Process 는 Process 의 문제가 아닌, 외부의 문제로 실패할 수 있다.

메모리를 더 효율적으로, 더 적은 에러로 다루기 위해, 현대의 시스템은
에 대한 추상화로 를 제공한다.

VM 은 하드웨어 예외, 하드웨어 주소 변환, Main Memory, Disk, 커널 과의 상호작용을 담당한다. 이를 각 Process 에게 크고, 통일된 형태의 사적인 Address Space 를 제공함으로서 수행한다.

한 가지의 깔끔한 메커니즘으로 3가지 중요한 기능을 제공한다.

  1. Main Memory 를 Disk 에 존재하는 주소공간에 대한 Cache 로 다뤄
    효율적으로 사용한다.
    이는 사용하는 Main Memory 와 Disk 간의 데이터 이동을 필요한 만큼만 함으로서 수행한다.
  2. 메모리 관리를 각 Process 에게 통일된 주소 공간을 제공함으로서 간단하게 만든다.
  3. 각 Process 의 주소 공간을 다른 Process 에 의한 침범으로부터 보호한다.

VM은 가장 휼륭한 아이디어 중 하나이다.
VM 은 자동으로, 뒤에서 서비스 개발자의 관여없이 조용히 이루어지기 때문에 편리하다.
그렇다면 서비스 개발자가 VM을 알아야하는 이유가 무엇일까?


  • 컴퓨터 시스템의 모든 곳에서 관여하기 때문에, 다른 시스템을 이해하는데 중요하다.


  • VM 은 서비스가 강력한 기능을 수행할 수 있게 해준다.
    예를 들어, Memory 덩어리를 만들고, 없앨 수 있으며,
    그 덩어리를 Disk 에 맵핑하며, 다른 Process 와 메모리를 공유하기도 한다.

    Memory 의 주소를 읽거나 쓰는것으로 Disk 의 내용을 읽거나 바꿀 수도 있다.


  • 프로그램은 변수를 참조, 포인터를 해체, 동적할당 등을 할 때마다 VM과 작용하게 된다.
    이때, 프로그램이 적절하게 VM을 사용하지 못하면, 메모리 관련 버그에 걸리기 쉽다.
    segment, protection error 는 직접 실행되기 전까지는 알기 어렵다.

이번 챕터에서는 VM을 2가지 시각으로 살펴본다.

  • VM은 어떻게 작동하는가?
  • 프로그램은 VM 을 어떻게 사용되고 관리하는가?

2번째 시각인 프로그램이 어떻게 사용하는지에 대해서는 1번째를 기반으로 설명한다.