본문 바로가기
소프트웨어 공학

가상 기억 장치(Virtual Memory, Virtual Storage)와 페이징에 대한 이해

by iwuooh 2021. 12. 7.

가상 기억 장치(Virtual Memory, Virtual Storage)

프로그램이 실행되려면 주기억장치에서부터 시작되어야 하는데 실행하고자 하는 프로그램이 주기억장치보다 크거나 여러 개인 경우에는 주기억장치 공간이 부족하여 제대로 프로그램이 실행되지 못한다. 그래서 실행에 필수적인 부분만 주기억장치에 저장하고 나머지는 보조기억장치에 두어 실행되도록 하여 앞선 문제를 해결하는데 이를 가상 기억 장치 또는 가상 메모리라고 한다. 이는 메모리를 관리하는 기법의 하나로, 사용자 입장에서는 실제 기계에서 이용 가능한 기억 자원인 주기억장치가 실제보다 크게 보이게 하는 효과를 준다. 이러한 방식은 멀티태스킹 운영 체제에서 흔히 사용된다. 이때 가상적으로 주어진 주소를 가상 주소(Virtual Address) 또는 논리 주소(Logical Address)라고 하고 실제 메모리 상에 유효한 주소를 물리 주소(Physical Address) 또는 실 주소(Real Address)라 한다. 가상 주소의 범위를 가상 주소 공간, 물리 주소의 범위는 물리 주소 공간이라 하는데 가상 주소 공간은 메모리 관리 장치에 의해서 물리 주소 공간으로 변환될 수 있다. 이 덕분에 프로그래머는 프로그램이나 데이터가 주메모리상에서 어떻게 존재하는지 신경 쓰지 않고 가상 주소 공간상에서 원활한 작업이 가능해진다. 대부분 현대적인 운영체제는 가상 메모리 기능을 제공하며 각 응용 프로그램에 더 적합한 메모리 관리를 위해 일부의 응용 프로그램들은 스스로 가상 메모리를 관리하기도 한다.

페이징(Paging)

페이징은 가상 메모리를 구현하는 하나의 방법이다. 이름에서 알 수 있듯이, 가상 메모리 공간을 일정한 크기의 페이지로 나누어서 메모리 공간을 관리하는데 이때 실제 주기억장치의 페이지에 해당하는 부분을 페이지 프레임(Page Frame)이라 한다. 다수의 프로세스가 각각 실행되어야 하는 페이지를 개별적으로 가질 때 각각의 페이지가 저장된 주기억장치의 프레임은 테이블 운영체제가 따로 관리하고 이를 페이지 테이블(Page Table)이라 한다. 임의의 페이지가 실행에 필요하면 우선적으로 주기억장치에 해당 페이지가 있는지 프레임을 확인하고 있다면 해당 페이지에 접근한다. 만약 없다면 보조기억장치로부터 해당 페이지를 찾고 이를 프레임에 저장한 후에 접근하는 일련의 과정을 수행한다.

페이지 교체 알고리즘(Page Replacement Algorithm)

새로운 페이지를 주기억장치에 저장할 때 만약 비어있는 프레임이 없으면 주기억장치에서 제거할 페이지를 결정하고 이 대신에 새로운 페이지를 저장할 공간을 확보한다. 이렇게 제거할 페이지를 결정하는 동작은 페이지 교체(Page Replacement)라고 하는데 다양한 알고리즘이 있다. 페이지를 교체하는 과정에서 제거할 페이지가 주기억장치에서 수정되었다면 보조기억장치에 이런 수정사항을 반드시 반영해야 하고, 수정되지 않았다면 단순히 주기억장치에서 제거한다. FIFO(First In First Out)는 가장 간단한 알고리즘으로, 메모리에 올라온 순서대로 페이지를 교체한다. 즉 가장 오래된 페이지부터 교체를 하는 것이다. 이를 위해서는 각 페이지가 올라온 시간을 기록해두거나 페이지가 올라온 순서를 큐(Queue)에 저장하는 방식을 사용할 수 있다. 이 알고리즘은 구현이 간단하고 이해하기도 쉽지만 성능이 언제나 우수하다고는 장담할 수 없다. 활발하게 사용 중인 페이지를 계속해서 교체하면 필요한 페이지를 없앨 수도 있고 이는 곧 알고리즘 실행의 속도를 저하시키는 원인이 된다. 최적(Optimal) 페이지 교체는 앞으로 가장 오래 사용되지 않을 페이지를 예상하여 이를 교체하는 방식이다. 이를 수행하려면 프로세스가 미래에 사용될 페이지를 미리 알아야 한다는 전제조건이 있다. 실제 활용에서는 앞으로 사용될 페이지가 무엇인지 알아낼 방법이 없으므로 사실상 구현이 불가능한 알고리즘이지만 실제 구현 목적이 아니라 다른 알고리즘과의 비교 연구 목적을 위해 주로 사용된다. 최적 교체 알고리즘은 가장 오랫동안 사용되지 않을 페이지를 알고 교체하기 때문에 교체되는 페이지 수가 가장 적다. LRU(Least-Recently-Used)는 가장 오래 사용되지 않은 페이지를 교체하는 방법이다. 앞서 설명한 최적 알고리즘의 구현이 불가능하기 때문에 이와 비슷한 방식으로 효과를 낼 수 있는 방법을 사용한 것이다. 미리 아는 것이 불가능하므로 과거의 데이터를 참고하여 페이지가 사용될 시간을 예측한다면 교체가 가능하다. 예측의 방법이 가장 오랫동안 사용되지 않은 페이지를 교체하는 방식인 것이다. 이는 최적 알고리즘보다는 페이지의 교체 횟수가 잦지만 FIFO 방식보다는 효율적이다.

댓글