물리 메모리를 직접 사용.
protection becomes a critical issue
한 프로세스가 다른 프로세스의 주소 공간을 접근하거나, 자신의 합법적인 주소 공간을 넘어설 때 segmentation fault가 발생한다.
시스템 콜(OS가 제공하는 합법적인 방법)이 아닌 단순히 포인터 등을 사용해 커널 영역에 접근하면 protection fault 발생한다.
다수의 프로그램이 로드될 수 있는 멀티 프로그래밍 상황에서 각 프로세스가 자신의 주소공간 이외의 영역으로 접근하는 것을 막아야한다.
How to find suitable free space
free space를 잘 관리해야 한다.
여러 개의 프로세스에 의해 메모리를 공유할 지라도 하나의 프로세스는 모든 메모리를 배타적으로 사용한다는 illusion을 갖는다. => Virtual memory / 프로세스 10개 == 가상 메모리 10개
이는 '주소 공간(address space)라는 잘 정리된 레이아웃이 있기에 가능하다.
주소 공간의 레이아웃은 다음과 같다.
Code 부분부터 0번(0x0) 주소에 위치되어 있지만 이는 가상 주소이고, 물리적으론 그렇지 않다.
Transparency: easy-to-use, 프로그래머는 메모리 사이즈나 가용 공간에 대해 몰라도 된다. 물리 메모리의 복잡함에서 벗어날 수 있다.
Efficiency: 메모리 추상화를 거치며 직접적으로 물리 메모리를 사용하는 것보다 느리고, 추가적인 오버헤드가 요구될 수 있다. 다양한 HW 지원(ex, TLB)을 통해 이를 극복해야 한다.
Protection(isolation): Protect precesses from one another
(아래 보이는 주소는 가상 주소이다.)