2022-08-20

가상 메모리

가상 메모리와 주소 변환 과정에 대해 알아보자!

가상 메모리

물리 메모리보다 큰 가상 주소 공간을 제공해 프로세스마다 논리적으로 독립된 메모리를 사용할 수 있게 하는
메모리 관리 기법이다. 이를 통해 프로세스들끼리 메모리 침범의 여지를 줄이고,
통일된 주소 공간을 배정할 수 있으므로 메모리 관리가 단순해진다.
또한 물리 메모리 크기와 상관없이 큰 프로세스나 동시에 여러 프로세스를 실행할 수 있게 해준다.

가상 메모리 크기

가상 메모리는 일반적으로 메모리 관리자 사용할 수 있는 메모리 전체 크기(물리 + 스왑)로 한정된다.
예로 4GB 프로세스를 10개 실행하면 40GB가 요구되는데, 이때 부족한 메모리를
스왑영역을 활용해 보충함으로써 다소 느리더라도 실행이 가능하게 된다.

가상 메모리 주소

가상 메모리의 시작 주소는 물리 메모리와 별개로 항상 0부터 시작한다.
메모리 관리자는 프로세스가 사용하는 가상 메모리 주소를 실제 메모리의 물리 주소로 변환하는데,
이를 동적 주소 변환이라 한다.

매핑 테이블

메모리 관리자는 가상 주소와 물리 주소를 일대일로 매핑해 테이블을 형성하고 관리함으로써,
물리 메모리에 어느 주소 위치에 있는지 알 수 있다.

가상 메모리 분할 방식과 주소 변환

물리 메모리와 마찬가지로 가변 분할 방식(세그먼트), 고정 분할 방식(페이징) 두 가지 메모리 배치 방식으로 나뉜다.

페이징 기법

고정 분할 방식을 이용한 가상 메모리 관리 기법을 의미하며 분할된 각 영역을 페이지라 하며 번호를 매겨 관리한다.
페이지와 매핑된 물리 메모리의 각 영역은 구분을 위해 프레임이라 하며 페이지와 크기가 같다.
특정 페이지가 스왑 영역에 위치한 경우 매핑 테이블에는 Invalid 로 표시된다.

페이징 주소 변환 과정

  1. 프로세스가 가상 메모리 n 번지에 데이터를 읽으려고 한다.
  2. 데이터가 어느 페이지 몇 번째에 있는지 찾는다.
  3. n페이지 m번째에 있는 것을 확인하고, 매핑 테이블 통해 매핑된 프레임을 찾는다.
  4. 매핑된 k번 프레임에 t번째 위치에 접근해 데이터를 읽는다.

주소 변환 과정을 정형화 하면 VA=<P, D>PA=<F, D>가 된다.


세그멘테이션 기법

가변 분할 방식을 이용한 가상 메모리 관리 기법을 의미하며 분할된 각 영역을 세그먼트라 한다.
세그먼트 크기는 가변적이기 때문에 크기를 나타내는 Limit와 시작 주소를 나타내는 Address 정보가
매핑 테이블에 존재한다.

세그멘테이션 주소 변환 과정

  1. 프로세스가 n번지 데이터를 읽으려고 한다.
  2. 데이터가 세그먼트 몇 번에 있는지와 거리를 통해 가상 주소를 찾는다.
  3. 세그먼트 n번에 시작 주소를 알아낸 다음, 거리를 더해 물리 주소를 구한다.
  4. 만약 범위를 벗어난다면 트랩을 발생해 해당 프로세스를 강제 종료하고, 그렇지 않다면 물리 주소를 구한다.
  5. 해당 n번지 물리 주소에 접근해 데이터를 읽는다.

주소 변환 과정을 정형화 하면 VA=<S, D>가 된다.

참조

쉽게 배우는 운영체제 - 한빛 아카데미
널널한 개발자 - 가상 메모리 개요
널널한 개발자 - 가상 메모리 페이징 기법의 구현
널널한 개발자 - 가상 메모리 접근 권한