메모리 매핑과 가상 메모리에 대한 쉬운 설명
memory mapping에서 동사 map은 어려운 단어다. ‘지도로 나타낸다’는 뜻이 아니라 correspond 즉 ‘대응시킨다’라는 뜻이다. 뭐를 뭐에다 대응시킨다는 말일까? 메모리 매핑을 이해하려면 먼저 가상 메모리에 대해 알아야 한다.
물리적 메모리에는 한계가 있다. 그 용량이 물리적 드라이브에 비해 작고 하도 여기저기에서 썼다 지웠다를 반복하다 보니 대이터가 뒤죽박죽으로 어질러져 있다. 이걸 fragmented 즉 ‘파편화’되어 있다고 한다. 이렇게 되면 성능이 떨어진다. 가상 메모리를 이용하면 이런 한계들을 극복할 수 있다. 물리적 드라이브의 널널한 공간 가운데 일부를 메모리인 것처럼 쓸 수 있게 바꾸어 확보하거나 파편화된 대이터의 주소들을 가지런히 모아 따로 정리해 두면 된다. 이러한 작업 즉 드라이브나 메모리 등에 실제로 있는 대이터의 주소에 대응하는 주소를 어딘가에 따로 만들어 주는 작업을 매핑이라 한다. 그 과정에서 이용되는 게 page라는 거고 그 따로 만들어 두는 장소를 가상 주소 공간이라 하며 이러한 작업을 통해 만들어진 결과물이 가상 메모리다. 이렇게 흩어진 대이터의 각 주소를 연속된 하나의 주소처럼 매핑을 해 두면 더 빠르고 편하게 제어할 수 있다.
물리적 메모리의 용량 한계를 극복하기 위해서 가상 메모리를 쓸 때에는 속도가 떨어지는 걸 감수하고 물리적 드라이브에 그 공간을 만들어야 한다. 파편화된 물리적 메모리의 대이터를 더 효율적으로 이용하기 위해서는 같은 물리적 메모리 안에 만들어야 한다. 더 느린 물리적 드라이브에 만들어서는 성능 개선을 꾀할 수 없다.
물론 가상 메모리도 물리적 드라이브나 물리적 메모리 어딘가에 물리적으로 존재하긴 하지만 우리가 실제로 이용할 때에는 물리적 드라이브나 물리적 메모리에 저장된 대이터와 구별하여 말 그대로 ‘가상’ 즉 관념적인 존재로 이해한다. 그래서 abstraction이나 view라는 표현을 쓴다.
가상 메모리는 프로쎄쓰 단위로 만들어진다. 어느 프로쎄쓰에서 메모리에 매핑을 해 두고 그 정보를 공유하면 다른 프로쎄쓰도 이걸 쓸 수가 있다. 이렇게 메모리 매핑은 메모리 공유에도 이용되는데 여러 프로쎄쓰간 통신 방법들 가운데 제일 빠르다. 어떠한 대이터가 차지하고 있는 물리적 메모리의 공간을 직접 공유하는 거보다 빠르고 안전하고 편하다.