가상 메모리란?
운영체제(OS)는 메모리가 실제 메모리보다 많아 보이게 하는 기술인 가상 메모리를 제공합니다.
이로 인해 우리는 물리적 메모리의 한계(4GB? 8GB?)에도 불구하고 더 많은 양을 가진 프로그램들을 실행시킬 수 있습니다.
가상 메모리는 시스템이 프로그램을 실행시키는데 최소한 얼마만큼의 메모리가 필요한가에 대한 접근 방식으로, 실행에 필요한 일부분만 메모리에 로드하고 나머지는 디스크에 두고서 필요할 때마다 교체하면서 쓰는 방식으로 구현됩니다.
가상메모리를 이용함으로써 가질 수 있는 장점은 아래와 같습니다.
가상 메모리의 장점
메인 메모리를 하드 디스크의 캐시로 처리하여 더 넓은 메모리 공간을 제공합니다. 즉, 임시 데이터를 하드 디스크 드라이브에 저장하고 필요에 따라 기본 메모리로 가져올 수도 있습니다.
메모리 크기의 제약으로부터 자유로워졌고 사용자 프로그램이 실행에 필요한 최소 크기의 메모리만 올라가져 있기 때문에 더 많은 프로그램을 동시 수행 가능해졌습니다.
추가 권한 비트를 사용하여 각 프로세스에 메모리에 대한 제한된 액세스 권한을 부여하여 메모리를 보호합니다. OS는 권한 비트를 확인하여 한 프로세스가 다른 프로세스의 메모리 공간을 손상시키지 않도록 할 수 있습니다.
요구 페이징 (Demand Paging)
필요한 부분만 요청이 있을 때 물리적 메모리에 페이지
단위로 적재하는 방법을 요구 페이징
이라고 합니다.
특정 페이지에 대해 CPU 요청이 들어오면 해당 page를 메모리에 적재합니다.
OS에 실행 중인 모든 프로그램을 저장하는 데 300MB의 메모리가 필요하다고 가정하고,
현재 RAM에 저장된 사용 가능한 물리적 메모리는 50MB라고 가정합니다.
요구 페이징은 페이지 테이블에서 해당 page가 메모리에 있는지를 나타내는 유/무효 비트(valid/invalid bit)를 사용합니다.
비트가 무효인 경우 페이지가 물리적 메모리에 없다는 것으로 페이지 부재가 발생합니다.
페이지 부재 트랩
이 발생합니다. (page miss)MMU(Memory Management Unit): 가상 주소를 물리 메모리 주소로 변환해주는 하드웨어 장치
페이지 교체 알고리즘
페이지 부재가 발생하면 요청된 페이지를 디스크에서 메모리로 가져옵니다. 이 때, 물리적 메모리에 공간이 부족할 수 있습니다.
그럴 경우에는 메모리에 올라와 있는 디스크를 옮겨서 메모리 공간을 확보해야하는 데 이를 페이지 교체
라고 합니다.
어떤 페이지를 교체할 것이냐를 결정하는 알고리즘이 필요합니다.
좋은 알고리즘은 최대한 페이지 부재가 적게 일어나도록 하여 쓰레싱
을 방지하는 것을 목표로 합니다.
여러 알고리즘 중 가장 널리 알려진 알고리즘들을 살펴보겠습니다.
FIFO(First-In, First-Out)
: 메모리에 적재된 것 중 가장 먼저 들어온(오래된) 페이지를 교체합니다. 큐 방식과 동일합니다.
LRU(Least Recently Used Algorithm)
: 사용 가능성이 낮은 페이지를 우선적으로 내보냅니다. 시간지역성을 이용해 가장 오래 전에 참조가 이루어진 페이지를 내보냅니다.
LFU(Least Frequently Used Algorithm)
: 과거에 참조 횟수가 가장 적은 페이지를 내보내는 알고리즘입니다.
메모리에 적재될 때부터 페이지의 횟수를 카운트하는 Incache-LFU 방식과 메모리 적재여부와 상관 없이 참조 횟수를 카운트하는 Perfect-LFU 방식이 있습니다.
OPT(OPTimal)
: 앞으로 가장 오랫동안 사용하지 않을 페이지를 내린다는 최적 페이지 알고리즘입니다. 그러나 미래에 어떤 페이지를 얼마나 사용할 것인지는 알 수 없으므로 일반 OS에서는 구현이 불가하여 실제 구현보다는 비교 연구 목적으로 사용됩니다.
참조