논리 주소를 물리 주소로 변환해주며 메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 총 관리해주는 하드웨어
메모리의 공간이 한정적이기 때문에, 사용자에게 더 많은 메모리를 제공하기 위해 가상 메모리라는 개념이 등장했습니다. 가상 메모리의 논리 주소를 가지고 실제 데이터가 담겨 있는 곳에 접근하기 위해서는 빠른 주소 변환이 필요한데, 이를 MMU가 도와줍니다.
장점
프로세스는 독립적인 메모리 공간을 가져야 합니다. 따라서 MMU는 한 프로세스에게 합법적인 주소 영역을 설정하고, 잘못된 접근이 오면 trap을 발생시키며 보호합니다.
base와 limit 레지스터를 활용한 메모리 보호 기법
- base 레지스터 : 메모리상의 프로세스 시작주소를 물리 주소로 저장
- limit 레지스터 : 프로세스의 사이즈를 저장
프로세스의 접근 가능한 합법적인 메모리 영역(x)은 base <= x < base+limit
이 됩니다.
따라서 이 영역 밖에서 접근을 요구하면 trap을 발생시킵니다.
안전성을 위해 base와 limit 레지스터는 사용자 모드에서는 직접 변경할 수 없도록 커널 모드에서만 수정 가능하도록 설계되었습니다.
실제 메모리의 사이즈보다 더 큰 사이즈의 메모리를 프로세스에 할당한 상황
가상 메모리를 사용하면 실제 메모리 사이즈보다 더 큰 사이즈의 메모리를 사용하는 것 처럼 보일 수 있습니다. 하지만 과할당 상황에서는 사용자를 속인 것을 들킬만한 상황이 존재합니다.
프로세스 실행 도중 페이지 폴트가 발생하면, 페이지 폴트를 발생시킨 페이지 위치를 디스크에서 찾습니다. 이 때, 메모리의 빈 프레임에 페이지를 올려야 하는데, 모든 메모리가 사용중이라면 빈 프레임이 없는 상황이 발생합니다.
이러한 과할당을 해결하기 위해선, swapping 기법을 통해 빈 프레임을 확보하여 페이지 교체가 이루어져야 합니니다.
✏ swapping 기법 : 현재 실행 중인 프로세스의 일부만 메모리에 올리고, 나머지 프로세스들은 보조 저장 장치에 Swap Out하여 저장하는 방식으로 작동합니다. Swap Out은 현재 사용하지 않는 프로세스들을 보조 저장 장치로 이동시켜 메인 메모리 공간을 확보합니다.
과정
페이지 교체가 이루어지면 프로세스를 계속 수행시키며 사용자가 인지하지 못하도록 해야합니다.
이 때, 오버헤드를 최대한 줄여야 합니다.
빈 프레임이 없는 상황에서 대상 프레임을 비울 때와 원하는 페이지를 프레임으로 올릴 때 두 번의 디스크 접근이 이루어집니다. 페이지 교체가 많이 발생한다면, 입출력 연산이 많아지면서 오버헤드 문제가 발생합니다.
해결법
set
상태 : 해당 페이지 내용이 디스크 상의 페이지 내용과 달라졌다는 뜻으로 디스크에 기록해야합니다.clear
상태 : 디스크 상의 페이지 내용과 메모리 상의 페이지가 정확히 일치하는 상황으로 디스크에 기록할 필요가 없습니다. 비트를 활용해 디스크에 기록하는 횟수를 줄이면서 오버헤드에 대한 수를 최대 절반으로 감소시키는 방법입니다.피드백 및 개선점은 댓글을 통해 알려주세요😊