MMU와 페이지 교체

thsamajiki·2022년 10월 25일
0

운영체제

목록 보기
16/16

메모리 관리 장치(MMU)

논리 주소를 물리 주소로 변환해주며 메모리 보호나 캐시 관리 등 CPU가 메모리에 접근하는 것을 총 관리해주는 하드웨어

메모리의 공간이 한정적이기 때문에, 사용자에게 더 많은 메모리를 제공하기 위해 가상 메모리라는 개념이 등장했다. 이 가상 메모리의 논리 주소를 가지고 실제 데이터가 담겨 있는 곳에 접근하기 위해서는 빠른 주소 변환이 필요한데, 이를 MMU가 도와준다.

장점

  • 모든 process마다 같은 주소를 사용할 수 있게 해준다. CPU는 프로세스 관리가 쉬워지고 구현 또한 쉬워질 것이다.실제 물리 주소가 13번지, 15번지, 29번지일 때 MMU는 가상주소로 이를 모두 1번지로 표현할 수 있다는 것이다.
  • 서로 떨어져 있는 데이터를 연속된 데이터로 표현할 수 있다. 실제 물리 주소가 13번지, 15번지 29번지인 경우 연속된 데이터처럼 1번지 2번지 3번지 처럼 표현할 수 있다는 것이다.

MMU의 메모리 보호

프로세스는 독립적인 메모리 공간을 가져야 하고, 자신의 공간만 접근해야 한다.따라서 MMU는 한 프로세스에게 합법적인 주소 영역을 설정하고, 잘못된 접근이 오면 trap을 발생시키며 보호한다.

base와 limit 레지스터를 활용한 메모리 보호 기법

  • base 레지스터 : 메모리상의 프로세스 시작주소를 물리 주소로 저장
  • limit 레지스터 : 프로세스의 사이즈를 저장

프로세스의 접근 가능한 합법적인 메모리 영역(x)은 base <= x < base+limit 이 된다.따라서 이 영역 밖에서 접근을 요구하면 trap을 발생시킨다.

안전성을 위해 base와 limit 레지스터는 사용자 모드에서는 직접 변경할 수 없도록 커널 모드에서만 수정 가능하도록 설계되었다.

메모리 과할당(over allocating)

실제 메모리의 사이즈보다 더 큰 사이즈의 메모리를 프로세스에 할당한 상황

가상 메모리를 사용하면 실제 메모리 사이즈보다 더 큰 사이즈의 메모리를 사용하는 것 처럼 보일 수 있다.하지만 과할당 상황에는 사용자를 속인 것을 들킬만한 상황이 존재한다.

프로세스 실행 도중 페이지 폴트 발생하면, 페이지 폴트를 발생시킨 페이지 위치를 디스크에서 찾는다.이 때, 메모리의 빈 프레임에 페이지를 올려야 하는데, 모든 메모리가 사용중이라 빈 프레임이 없는 상황이 발생한다.

이러한 과할당을 해결하기 위해선, swapping 기법을 통해 빈 프레임을 확보하여 페이지 교체가 이루어져야 한다.swapping 기법은 프로세스 하나를 swap out하고, 이 공간을 빈 프레임으로 활용한다.

페이지 교체

페이지를 swap out해서 빈 프레임을 확보하는 것

과정

  1. 프로세스 실행 도중 페이지 부재 발생
  2. 페이지 폴트를 발생시킨 페이지 위치를 디스크에서 찾는다.
  3. 메모리에 빈 프레임이 있는지 확인
    • 빈 프레임이 있으면 해당 프레임을 사용
    • 빈 프레임이 없으면, victim 프레임을 선정해 디스크에 기록하고 페이지 테이블을 업데이트한다.
  4. 빈 프레임에 페이지 폴트가 발생한 페이지를 올리고, 페이지 테이블 업데이트한다.

페이지 교체가 이루어지면 아무일이 없던것 처럼 프로세스를 계속 수행시켜주면서 사용자가 알지 못하도록 해야한다.이 때, 아무일도 일어나지 않은 것처럼 하려면 페이지 교체 당시 오버헤드를 최대한 줄여야 한다.

오버헤드를 감소시키는 해결법

빈 프레임이 없는 상황에서 victim 프레임을 비울 때와 원하는 페이지를 프레임으로 올릴 때 두 번의 디스크 접근이 이루어진다.페이지 교체가 많이 이루어지면, 이러한 입출력 연산이 많이 발생하게 되면서 오버헤드 문제가 발생하게 된다.

  • 변경 비트를 모든 페이지마다 둬서, victim 페이지가 정해지면 해당 페이지의 비트를 확인한다.
    • set 상태 : 해당 페이지 내용이 디스크 상의 페이지 내용과 달라졌다는 뜻으로 디스크에 기록해야한다.
    • clear 상태 : 디스크 상의 페이지 내용과 메모리 상의 페이지가 정확히 일치하는 상황으로 디스크에 기록할 필요가 없다.비트를 활용해 디스크에 기록하는 횟수를 줄이면서 오버헤드에 대한 수를 최대 절반으로 감소시키는 방법이다.
  • 페이지 교체 알고리즘을 상황에 따라 잘 선택한다.현재 상황에서 페이지 폴트를 발생할 확률을 최대한 줄여줄 수 있는 페이지 교체 알고리즘을 사용한다.
profile
안드로이드 개발자

0개의 댓글

관련 채용 정보