본문 바로가기
운영체제&네트워크/운영체제

멀티레벨 페이지 테이블과 가상 메모리: 이해와 활용

by GangDev 2024. 5. 30.

멀티레벨 페이지에서 각 레벨의 역할

멀티레벨 페이지 테이블에서 각 레벨은 주소 공간을 효율적으로 관리하고, 메모리 사용을 최적화하는 역할을 한다. 멀티레벨 페이지 테이블은 주소 공간을 여러 단계로 나누어 관리하며, 각 레벨은 특정 범위의 주소 공간을 담당한다.

  • 상위 레벨 페이지 테이블: 상위 레벨 페이지 테이블은 하위 레벨 페이지 테이블의 위치 정보를 저장한다. 이는 하위 레벨 페이지 테이블이 물리 메모리의 어디에 위치하는지 나타내며, 상위 레벨 페이지 테이블을 통해 하위 레벨 페이지 테이블에 접근할 수 있다.
  • 중간 레벨 페이지 테이블: 중간 레벨 페이지 테이블은 상위 레벨 페이지 테이블과 하위 레벨 페이지 테이블 사이에 위치한다. 이 레벨은 주소 공간을 더욱 세밀하게 분할하여 관리하며, 상위 레벨 페이지 테이블로부터 하위 레벨 페이지 테이블로의 경로를 제공한다.
  • 하위 레벨 페이지 테이블: 하위 레벨 페이지 테이블은 실제 페이지의 물리 주소를 저장한다. 이 레벨의 페이지 테이블은 가상 주소를 실제 주소로 변환하는 데 사용되며, 각 페이지의 실제 메모리 위치를 나타낸다.

멀티레벨 페이지 테이블의 장점은 주소 공간의 크기에 비례하여 페이지 테이블 공간이 할당된다는 것이다. 이는 페이지 테이블을 페이지 크기로 분할함으로써 메모리 관리가 용이해지고, 페이지 테이블을 할당하거나 확장할 때 운영체제가 FREE 페이지 풀에 있는 빈 페이지를 가져다 쓸 수 있다는 것을 의미한다. 또한, 페이지 테이블의 각 페이지들이 물리 메모리에 산재해 있더라도 페이지 디렉터리를 이용하여 그 위치를 파악할 수 있으므로, 페이지 테이블을 위한 공간 할당이 매우 유연해진다.

 

그러나 멀티레벨 페이지 테이블은 추갖거인 메모리 접근이 필요하므로, TLB 미스 시 주소 변환을 위해 두 번의 메모리 로드가 발생한다. 이는 시간과 공간을 상호 절충한 것으로 볼 수 있으며, 메모리 접근 시간이 증가할 수 있다.

가상 메모리와 스왑 공간의 차이점

가상 메모리와 스왑 공간은 모두 메모리 관리를 향상시키고, 메모리 부족 문제를 완화하는 데 도움이 되는 기술이지만, 그 구현 위치와 사용 목적에서 차이가 있다.

구현위치

  • 가상 메모리는 운영 체제 수준에서 구현되며, 프로세스 간의 메모리 분리와 페이지 교체를 관리한다. 이는 물리적 메모리와 하드 디스크 또는 SSD으 ㅣ일부를 함께 사용하여 구성된다.
  • 스왑 공간은 하드 디스크 또는 SSD에 할당된 영역으로, 물리적 메모리에서 비활성화된 페이지를 저장하는 데 사용된다.

사용목적

  • 가상 메모리는 프로세스에 더 큰 메모리 공간을 제공하고, 메모리 사용량을 최적화하는 데 중점을 둔다. 이는 물리적 메모리보다 큰 메모리 공간이 필요한 프로세스도 실행할 수 있게 해준다.
  • 스왑 공간은 메모리 부족 시 비활성화된 페이지를 저장하여 시스템의 안정성을 유지하는 데 주로 사용된다. 이는 물리적 메모리가 부족할 경우 사용되지 않은 페이지를 스왑 공간으로 이동시키며, 해당 페이지가 다시 필요할 경우 스왑 공간에서 물리적 메모리로 페이지를 로드한다.

두 기술은 함께 사용되어 시스템의 메모리 관리를 최적화한다. 가상 메모리를 사용하면 프로세스는 필요한 메모리를 얻을 수 있으며, 스왑 공간은 물리적 메모리가 부족한 경우 메모리 사용량을 조절하고 시스템의 전체 성능과 안정성을 유지하는 데 도움을 준다.

가상 메모리 시스템에서 물리 메모리에 너무 많은 페이지를 적재하면 발생할 수 있는 문제

  • 페이지 폴트 빈도 증가: 물리 메모리가 가득 차면, 필요한 페이지가 물리 메모리에 없을 경우 페이지 폴트가 발생한다. 페이지 폴트는 디스크에서 페이지를 로드하는 과정을 포함하므로, 페이지 폴트 빈도가 증가하면 디스크 I/O 작업이 증가하고, 시스템 성능이 저하된다.
  • 메모리 낭비: 물리 메모리에 너무 많은 페이지를 적재하면, 실제로 사용되지 않는 페이지가 메모리에 남아있게 된다. 이는 메모리 낭비를 초래하고, 시스템의 전반적인 성능을 저하시킨다.
  • 스왑 공간 사용량 증가: 물리 메모리가 가득 차면, 운영 체제는 사용되지 않는 페이지를 스왑 공간으로 이동시킨다. 스왑 공간은 디스크의 일부를 사용하므로, 스왑 공간의 사용량이 증가하면 디스크 공간이 부족할 수 있다.
  • 시스템 불안성 증가: 물리 메모리가 가득 차면, 시스템은 새로운 프로세스를 시작하거나 기존 프로세스를 계속 실행하기 어려워질 수 있다. 이는 시스템의 안정성을 저하시키는 원인이 된다.
  • 메모리 관리 오버헤드 증가: 물리 메모리에 너무 많은 페이지를 적재하면, 메모리 관리 오버헤드가 증가한다. 이는 페이지 테이블의 크기가 증가하고, 페이지 폴트와 페이지 교환을 관리하는 데 필요한 오버헤드가 증가하기 때문이다.

이러한 문제들을 해결하기 위해, 적절한 메모리 관리 전략을 사용하고, 필요한 페이지만 메모리에 유지하는 전략을 사용하는 것이 중요하다. 또한, 메모리 사용량을 모니터링하여 시스템의 메모리 상태를 주기적으로 확인하고, 필요한 조치를 취하는 것도 중요하다.

가상 메모리가 없던 시대에는 어떤 문제가 있었는가

  • 메모리 부족 문제: 물리적 메모리 용량이 한정되어 있기 때문에 ,큰 프로그램이나 여러 프로그램을 동시에 실행하는 것이 어려웠다. 이는 시스템의 활용도를 제한하고, 사용자의 생산성을 저하시켰다.
  • 프로그램 크기 제한: 프로그램의 크기가 물리적 메모리 용량에 의해 제한되었기 때문에, 개발자는 프로그램을 작게 유지하거나 여러 부분으로 나누어 실행해야 했다. 이는 프로그램의 구조를 복잡하게 만들고, 유지 관리를 어렵게 했다.
  • 메모리 관리의 복잡성: 가상 메모리가 없을 때, 운영 체제는 물리적 메모리를 직접 관리해야 했다. 이는 메모리 할당, 해제, 보호 등의 복잡한 작업을 수동적으로 처리해야 했으며, 효율적인 메모리 사용을 보장하기 어려웠다.
  • 프로세스 간 메모리 공유 문제: 가상 메모리가 없으면, 프로세스 간 메모리를 공유하거나 격리하는 것이 어려웠다. 이는 보안 문제를 야기하고, 프로세스 간의 데이터 공유를 어렵게 했다.
  • 메모리 낭비: 물리적 메모리 용량이 한정되어 있기 떄문에, 메모리를 효율적으로 사용하기 어려웠다. 이는 메모리 낭비를 야기하고, 시스템의 전반적인 성능을 저하시켰다.

이러한 문제들은 가상 메모리 시스템의 도입으로 해결되었다. 가상 메모리는 물리적 메모리 용량을 초과하는 가상의 메모리 공간을 제공하여, 큰 프로그램을 실행할 수 있게 하고, 여러 프로그램을 동시에 실행할 수 있게 한다. 또한, 메모리 관리를 자동화하고, 프로세스 간 메모리 격리를 강화하여 보안을 향상시키는 데 중요한 역할을 한다.