본문 바로가기

CS/운영체제

가상 메모리와 물리 메모리

가상 메모리( = 논리 메모리)

가상 메모리는 실제 전체 프로세스의 메모리 중에서 초기에 필요한 메모리만 할당하는 것을 말한다.

장점

  • 물리 메모리의 크기보다 큰 프로그램들의 실행을 가능하게 한다.
  • 더 많은 프로그램을 동시에 실행할 수 있기 때문에 CPU 이용률과 처리율이 높아진다. 
  • swap에 필요한 입출력이 줄어들기 때문에 프로그램들이 빠르게 실행된다.
    (프로그램이 필요로 하는 데이터 중 일부만 주기억장치에 올라가 있기 때문에, 필요하지 않은 데이터는 보조저장장치에 남아있게 된다. 따라서 주기억장치와 보조저장장치 사이를 주고받아야 하는 데이터의 양이 줄어들어 입출력 작업이 줄어들게 된다.)

가상메모리의 구조

가상 메모리는 불연속 메모리 할당 방식을 취한다. 이것에 대한 정보는 길어지기 때문에 간단하게 말하자면 여러 프로세스들에게 메모리를 할당할 때 잦은 적재와 삭제로 메모리 사이사이의 남는 공간이 발생하게 되고 이것을 단편화라고 부른다. 이 단편화 현상을 해결하기 위해 등장한 것이 불연속 메모리 할당 방식이다.

메모리를 한번에 연속적으로 할당하지 않고 프로세스를 작은 단위로 나눠서 메모리 사이사이 남는 공간에 적절하게 할당하는 것이다.

프로세스를 어떻게 나누는지는 페이지처럼 같은 단위로 나누는 페이징 방식과, 논리적인 기준에 맞춰서 세그먼트로 나누는 세그멘테이션 기법이 있다. (이러한 방식의 차이점은 다음에 자세하게 다뤄보도록 하겠다.)

 

이중에서 페이징 방식은 같은 단위로 나눠진 만큼 유연한 구조를 가지고 있어 여러 프로세스들이 하나의 페이지를 가리킬 수 있다.(세그멘테이션은 해당 세그먼트만 사용함) 이때 각 프로세스들은 동일한 가상주소를 가리킨다.

따라서 자원 공유에 용이하다는 점에서 가상 메모리 방식에서는 주로 페이징 방식을 사용하여 프로세스들을 페이지로 나눈다.


공유 예시

  • 시스템 라이브러리가 여러 프로세스들 사이에 공유될 수 있도록 한다. 각 프로세스들은 공유 라이브러리를 자신의 가상 주소 공간에 두고 사용하는 것처럼 인식하지만, 라이브러리가 올라가있는 물리 메모리 페이지들은 모든 프로세스에 공유되고 있다. 여러 프로세스가 같은 라이브러리를 사용할 때, 해당 라이브러리의 페이지들은 물리 메모리에 단 한 번 로드되고, 각 프로세스의 가상 주소 공간에 매핑된다.
  • 프로세스들이 메모리를 공유하는 것을 가능하게 하고, 프로세스들은 공유 메모리를 통해 통신할 수 있다. 이 또한, 각 프로세스들은 각자 자신의 주소 공간처럼 인식하지만, 실제 물리 메모리는 공유되고 있다.

가상 메모리의 작동 방식

가상 메모리에는 불연속적인 공간에 있는 각 페이지들의 정보가 하나의 프레임에 들어있다.
페이징 테이블에는 각 페이지마다 물리 메모리 공간의 몇번째 프레임에 있는지 정보가 들어있다 (페이지 테이블 엔트리를 포함) . 이를 맵핑해서 물리 메모리를 사용할 수 있다. 이 때 논리 메모리의 페이지와 물리 메모리의 프레임 크기는 같다.

 

또한 MMU는 가상 주소를 받아서 페이지 테이블에서 검색하고, 엔트리 값을 통해 해당하는 물리 주소를 생성하는 역할을 수행한다.