Computer Science/OS

Virtual Memory (가상 메모리)

궁선이 2019. 1. 7. 18:47

가상메모리는 RAM을 관리하는 방법으로, 각 프로그램에 실제 메모리 주소가 아닌 가상의 메모리 주소를 부여하는 방식을 말한다.


프로그램이 메모리에 프로세스로 올라가는 순간 자신만의 가상주소공간을 갖게 된다. 32bit/64bit 프로세스는 최대 4GB/16GB 가상주소 공간을 가진다.


실행하려는 프로그램이 용량이 큰 경우, 메모리에 프로그램을 전부 올린다면 실행을 하지 못하거나, 혹은 메모리를 과독점 하는 상황이 벌어진다. 또한 프로그램의 모든 코드가 반드시 한번에 필요한것이 아니다. 사용하지 않는 코드들이 메모리에 많이 올라와 있다면 용량이나 paging등의 성능 이슈가 발생하게 된다. 프로그램 실행에 반드시 필요한 코드만 메모리에 고정적으로 올려놓고, 그 외의 코드들은 런타임시에 보조기억장치에서 가져와서 메모리에 올린다면(Demand-paging) 메모리 사용 효율이 훨씬 좋아질 것이다.


위와 같은 이유에 따라서, 프로그램 실행 시에 주기억장치(RAM) + 보조기억장치(HDD, SSD etc) 의 조합으로 이루어진 서로 다른 형식의 주소들을 통합적으로 하나의 형식을 가진 메모리에 있는것 처럼 관리할 시스템이 필요했다. 이것이 바로 가상메모리 이다.


가상메모리는 하드디스크나 SSD 등의 보조기억장치에 주기억장치, 즉 RAM의 내용 일부를 전달해 쓰고 읽는다. 가상메모리의 크기와 구조는 운영체제에 따라 다르다.


가상 메모리의 가상 주소 공간은 메모리 관리 장치(MMU)에 의해서 물리 주소로 변환된다. 이 덕분에 프로그래머는 가상 주소 공간상에서 프로그램을 짜게 되어 프로그램이나 데이터가 주메모리상에 어떻게 존재하는지를 의식할 필요가 없어진다.


  • 주기억장치의 효율적 관리 : 주기억장치를 하드디스크에 대한 캐시로 설정하여, 당장 사용하는 영역만 유지하고 쓰지 않는 데이터는 하드디스크로 옮긴 뒤, 필요할 때만 램에 데이터를 불러와 올리고 다시 사용하지 않으면 하드디스크로 내림으로써 램을 효과적으로 관리한다.

  • 메모리 관리의 단순화 : 각 프로세스마다 가상메모리의 통일된 주소 공간을 배정할 수 있으므로 메모리 관리가 단순해진다.

  • 메모리 용량 및 안정성 보장 : 한정된 공간의 램이 아닌 거의 무한한 가상메모리 공간을 배정함으로써 프로세스들끼리 메모리 침범이 일어날 여지를 크게 줄인다.


보조기억장치의 속도가 주기억장치인 RAM보다 매우 느리기 때문에 RAM 용량을 초과하는 데이터를 다뤄서 보조기억장치를 끌어다 쓰게 될 경우 시스템의 속도가 확연히 느려진다. NVMe 방식을 쓰는 고급형 SSD의 데이터 전송 속도조차 가장 구세대 RAM인 DDR1 RAM 의 최고 전송속도인 1,600~3,200 MB/s수준에 불과하다. 요즘 대중화된 DDR4 RAM (2,400 MHz 기준)의 속도는 19,200 MB/s 이고, 추가 장착하는 RAM 만큼 대역폭이 또 증가하기 때문에, 평소에 이러한 속도로 작업을 하다가 보조기억장치를 끌어다 쓰게 되면 시스템의 전체적인 성능이 엄청나게 저하된다.


가상메모리에 대한 이미지 검색결과

(출처 : 위키피디아)