CS

Virtual Memory와 Paging System

정글러 2022. 3. 22. 08:23

CPU는 프로세스의 빠른 실행을 위해 필요한 코드를 메모리에 올려두어야 한다. 하지만 필요해질 모든 데이터를 메모리에 올릴 경우, 메모리의 용량은 제한적이고 특정 순간에 모든 데이터를 다 사용하진 않기 때문에 메모리 점유에 비효율이 생긴다.

가상 메모리는 이 "특정 순간에 사용되는 메모리 영역은 제한적이다"는 점에 초점을 두어, 필요한 데이터만 메모리에 두고 나머지는 보조기억장치에 저장된 상태를 유지하는 시스템이다. 프로세스가 요구하는 데이터는 OS에 의해 메모리에 올라가기 때문에 모든 프로세스는 메모리를 전적으로 사용하고 있는 것 같은 환경에서 동작하고, 이런 프로세스의 착각(?) 때문에 가상 메모리라 불린다.

 

가상 메모리 시스템에서 프로세스가 점유중인 CPU는 실제 물리적 메모리 주소가 아닌 Virtual address를 요구하고, Memory Management Uint은 이를 실제 메모리의 물리적 주소인 Phsical address로 변환해 메모리에 접근한다. 이 과정에서 Vaddr에 해당하는 데이터가 메모리의 Paddr 주소에 있을 수도, 없을 수도 있는데, 없을 경우 OS는 보조기억장치에 있는 해당 데이터를 메모리로 올린다.

 

Paging System은 가상 메모리를 일정 크기로 단위화환 page, 실제 메모리를 page와 같은 크기로 나눈 frame으로 구획화하여, page와 frame을 매핑하는 것으로 위의 가상 주소와 물리 주소간의 연동을 구현한 시스템이다. 프로세스가 자신이 사용하는 page의 데이터를 요구하면, OS는 MMU를 통해 대응되는 frame에 접근한다. 만약 매핑이 안되었거나 페이지 교체 정책에 의해 교체되어 page에 해당하는 frame이 없다면 이를 Page fault라고 하며, OS는 보조기억장치로부터 해당 페이지에 해당하는 데이터를 frame에 올린다.

 

필요한 페이지를 frame에 올리는  위의 과정을 page replacement라고 하는데, 메모리의 크기는 제한적이기 때문에 모든 물리적 frame이 차 있는 경우에도 replace가 요구될 수 있다. 이때를 위한 교체 알고리즘을 페이지 교체 정책(policy)라고 하며, 가장 오래된 페이지를 내리거나, 가장 오래 안쓰인 페이지를 내리거나, 가장 적게 쓰인 페이지를 내리는 등 여러 로직이 존재한다.