ch9-Virtual_Memory
Process 는 다른 Process 와 CPU와 Main Memory 를 공유한다.
이는 몇가지 문제점을 만들 수 있다.
CPU의 일이 많아지면서, process 의 속도는 줄어들게 된다.
같은 자원을 공유하기 때문이다.
하지만 Process 여러개가 너무 많은 Memory 를 사용한다면, 일부는 더이상 실행하기 어려워질 것이다.
만약 Process 가 다른 Process 의 메모리를 사용한다면,
그 다른 Process 는 Process 의 문제가 아닌, 외부의 문제로 실패할 수 있다.
메모리를 더 효율적으로, 더 적은 에러로 다루기 위해, 현대의 시스템은
VM 은 하드웨어 예외, 하드웨어 주소 변환, Main Memory, Disk, 커널 과의 상호작용을 담당한다. 이를 각 Process 에게 크고, 통일된 형태의 사적인 Address Space 를 제공함으로서 수행한다.
한 가지의 깔끔한 메커니즘으로 3가지 중요한 기능을 제공한다.
VM은 가장 휼륭한 아이디어 중 하나이다.
VM 은 자동으로, 뒤에서 서비스 개발자의 관여없이 조용히 이루어지기 때문에 편리하다.
그렇다면 서비스 개발자가 VM을 알아야하는 이유가 무엇일까?
컴퓨터 시스템의 모든 곳에서 관여하기 때문에, 다른 시스템을 이해하는데 중요하다.
VM 은 서비스가 강력한 기능을 수행할 수 있게 해준다.
예를 들어, Memory 덩어리를 만들고, 없앨 수 있으며,
그 덩어리를 Disk 에 맵핑하며, 다른 Process 와 메모리를 공유하기도 한다.
Memory 의 주소를 읽거나 쓰는것으로 Disk 의 내용을 읽거나 바꿀 수도 있다.
프로그램은 변수를 참조, 포인터를 해체, 동적할당 등을 할 때마다 VM과 작용하게 된다.
이때, 프로그램이 적절하게 VM을 사용하지 못하면, 메모리 관련 버그에 걸리기 쉽다.
segment, protection error 는 직접 실행되기 전까지는 알기 어렵다.
이번 챕터에서는 VM을 2가지 시각으로 살펴본다.
2번째 시각인 프로그램이 어떻게 사용하는지에 대해서는 1번째를 기반으로 설명한다.