"사용자 프로그램이 생성하는 모든 주소는 가상주소이지"
시분할(time -sharing)을 구현하는 한 가지 방법은 하나의 프로세스를 짧은 시간 동안 실행시키는 것.
문제는 너무 느리고, 메모리가 커질수록 느려졌다. 메모리의 내용 전체를 디스크에 저장하는 것 때문.
13- vm_intro
실행 중인 프로그램이 가정하는 사용하기 쉬운 메모리의 모습
<aside> 💡 핵심 질문 : 메모리를 어떻게 가상화하는가 운영체제는 물리 메모리를 공유하는 다수의 프로세스에게 어떻게 프로세스 전용의 커다란 주소 공간이라는 개념을 제공할 수 있는가?
</aside>
실행 중인 프로그램은 자신이 특정 주소의 메모리에 (예를 들어 0) 탑재되고 매우 큰 주소 공간을 (예를 들어, 32비트 또는 64비트) 가지고 있다고 생각하기 때문이다. 현실은 다르다.
A가 주소 0으로부터 (우리는 이를 가상 주소(virtual address)라고 부를 것이다) load 연산을 수행할 때, 운영체제는 하드웨어의 지원을 통해 물리 주소 0이 아니라 물리 주소 320 KB (A가 탑재된 메모리)를 읽도록 보장해야 한다. 이것이 메모리 가상화의 열쇠이고, 현대 모든 컴퓨터 시스템의 기저를 이룬다.
투명성 (transparency)
실행 중인 프로그램은, 자신이 가상 메모리를 사용하는걸 인지해선 안된다.
효율성 (efficiency)
시간, 공간 측면에서 효율적이어야 한다.
보호 (protection)
운영체제는 프로세스를 다른 프로세스로부터 보호해야 하고 운영체제 자신도 프로세스로부터 보호해야 한다. 자신의 주소 공간 밖의 어느 것도 접근할 수 있어서는 안 된다.
14 - vm_api
double *d = (double *) malloc(sizeof(double));