[운영체제] MMU와 페이지교체

Letmegooutside·2022년 1월 21일
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 상태 : 디스크 상의 페이지 내용과 메모리 상의 페이지가 정확히 일치하는 상황으로 디스크에 기록할 필요가 없다.
      비트를 활용해 디스크에 기록하는 횟수를 줄이면서 오버헤드에 대한 수를 최대 절반으로 감소시키는 방법이다.
  • 페이지 교체 알고리즘을 상황에 따라 잘 선택한다.
    현재 상황에서 페이지 폴트를 발생할 확률을 최대한 줄여줄 수 있는 페이지 교체 알고리즘을 사용한다.

0개의 댓글