논리 주소를 물리 주소로 변환해주며 메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 총 관리해주는 하드웨어
메모리의 공간이 한정적이기 때문에, 사용자에게 더 많은 메모리를 제공하기 위해 가상 메모리라는 개념이 등장했다.
이 가상 메모리의 논리 주소를 가지고 실제 데이터가 담겨 있는 곳에 접근하기 위해서는 빠른 주소 변환이 필요한데, 이를 MMU가 도와준다.
모든 process마다 같은 주소를 사용할 수 있게 해준다.
CPU는 프로세스 관리가 쉬워지고 구현 또한 쉬워질 것이다.
실제 물리 주소가 13번지, 15번지 29번지 일 때 MMU는 가상주소로 이를 모두 1번지로 표현할 수 있다는 것이다.
서로 떨어져 있는 데이터를 연속된 데이터로 표현할 수 있다.
실제 물리 주소가 13번지, 15번지 29번지인 경우 연속된 데이터처럼 1번지 2번지 3번지 처럼 표현할 수 있다는 것이다.
프로세스는 독립적인 메모리 공간을 가져야 하고, 자신의 공간만 접근해야 한다.
따라서 MMU는 한 프로세스에게 합법적인 주소 영역을 설정하고, 잘못된 접근이 오면 trap을 발생시키며 보호한다.
프로세스의 접근 가능한 합법적인 메모리 영역(x
)은 base <= x < base+limit
이 된다.
따라서 이 영역 밖에서 접근을 요구하면 trap을 발생시킨다.
안전성을 위해 base와 limit 레지스터는 사용자 모드에서는 직접 변경할 수 없도록 커널 모드에서만 수정 가능하도록 설계되었다.
실제 메모리의 사이즈보다 더 큰 사이즈의 메모리를 프로세스에 할당한 상황
가상 메모리를 사용하면 실제 메모리 사이즈보다 더 큰 사이즈의 메모리를 사용하는 것 처럼 보일 수 있다.
하지만 과할당 상황에는 사용자를 속인 것을 들킬만한 상황이 존재한다.
프로세스 실행 도중 페이지 폴트 발생하면, 페이지 폴트를 발생시킨 페이지 위치를 디스크에서 찾는다.
이 때, 메모리의 빈 프레임에 페이지를 올려야 하는데, 모든 메모리가 사용중이라 빈 프레임이 없는 상황이 발생한다.
이러한 과할당을 해결하기 위해선, swapping 기법을 통해 빈 프레임을 확보하여 페이지 교체가 이루어져야 한다.
swapping 기법은 프로세스 하나를 swap out
하고, 이 공간을 빈 프레임으로 활용한다.
페이지를 swap out해서 빈 프레임을 확보하는 것
프로세스 실행 도중 페이지 부재 발생
페이지 폴트를 발생시킨 페이지 위치를 디스크에서 찾는다.
메모리에 빈 프레임이 있는지 확인
빈 프레임에 페이지 폴트가 발생한 페이지를 올리고, 페이지 테이블 업데이트한다.
페이지 교체가 이루어지면 아무일이 없던것 처럼 프로세스를 계속 수행시켜주면서 사용자가 알지 못하도록 해야한다.
이 때, 아무일도 일어나지 않은 것처럼 하려면 페이지 교체 당시 오버헤드를 최대한 줄여야 한다.
빈 프레임이 없는 상황에서 victim 프레임을 비울 때와 원하는 페이지를 프레임으로 올릴 때 두 번의 디스크 접근이 이루어진다.
페이지 교체가 많이 이루어지면, 이러한 입출력 연산이 많이 발생하게 되면서 오버헤드 문제가 발생하게 된다.
변경비트를 모든 페이지마다 둬서, victim 페이지가 정해지면 해당 페이지의 비트를 확인한다.
set
상태 : 해당 페이지 내용이 디스크 상의 페이지 내용과 달라졌다는 뜻으로 디스크에 기록해야한다.clear
상태 : 디스크 상의 페이지 내용과 메모리 상의 페이지가 정확히 일치하는 상황으로 디스크에 기록할 필요가 없다.페이지 교체 알고리즘을 상황에 따라 잘 선택한다.
현재 상황에서 페이지 폴트를 발생할 확률을 최대한 줄여줄 수 있는 페이지 교체 알고리즘을 사용한다.