1. 개요 ¶
가상 메모리(Virtual Memory)란, 오퍼레이팅 시스템 기술의 하나이다.
마이크로소프트 윈도우즈에서 가상 메모리 운용의 필요성은, GUI OS로 전환하고 멀티 태스킹이 보편화되면서 나타났다. 멀티 태스킹 기능은 다수의 어플리케이션을 하나의 OS에서 돌릴 수 있게 했으나, 프로그램을 마구 올리다가는 램이 으앙 죽음 수준으로 심각하게 부족해졌기 때문이다. 이를 해결하려면 OS차원에서 고도의 메모리 관리가 필요해졌기 때문에 제시되었다.
가상 메모리 기능이 없는 OS는 메인 메모리를 그대로 물리적 어드레스에 따라서 액세스(읽고 쓰기)를 지원한다. 그래서 실제 존재하는 메모리 이상의 프로그램은 절대로 돌릴 수 없다. 실제로 DOS에서 메모리가 모자라면 일단 프로그램이 안 올라간다. 게다가 이게 좀 복불복스러워서 최악의 경우는 프로그램이 돌아가는데 잠깐 실행되다가 OS자체가 다운된다.
가상 메모리 기능이 있는 OS에서는 메모리 영역의 물리적인 어드레스 이외에 ‘보조기억장치’, 대표적으로 하드 디스크를 대상으로 가상의 어드레스를 할당하고 이를 OS에서 하드웨어의 MMU(Memory Management Unit)와 맞물려서 알아서 관리를 해준다.
아주 간단히 말하자면 은행 순번표 같은 형식[1]으로 각 메모리 공간마다 순번을 할당해놓고 필요할 때마다 돌려쓰는 것이다. 이 때문에 실제 메모리 공간을 초과한 프로그램을 올려도 '일단은' 문제가 생기지 않게 되었다. 또한, 메모리 단편화 문제도 어느 정도 해소된다. 이는 메모리를 일정한 단위로 쪼개어 쓰기 때문이다.
가상 메모리 기능이 있으면 실제 메모리 공간이 어느 정도 부족하다고 해도, OS는 당장 실행중이긴 하지만 당장 사용하지 않는 프로그램은 가상 메모리 영역으로 내려보내고 지금 실행중인 프로그램은 실제 메모리 공간으로 올려보낸다. 이렇게 유연하게 사용자의 멀티 태스킹에 맞춰서 대응해주는 것이다.
2. 예시 ¶
가상 메모리 기능이 없는 DOS는 이런 상황에서 그냥 그림판과 계산기를 올려주지 않거나, 그림판은 어떻게 돌아갔는데 계산기를 돌리려는 순간 최악의 경우 프로그램과 OS자체가 다운되는 암울한 상황이 발생한다. 그리고 지금까지 작업한 모든 작업물은 사요나라
윈도우즈는 어쩔 수 없이 그림판과 계산기만 메인 메모리에 올려놓고, 메모장은 가상 메모리로 내려보낸다. 얼마 있으니 계산기도 안쓰게 되서 가상 메모리로 내린다. 1시간 쯤 그림을 그리다가 다시 메모장을 켜고 그림판을 작업 표시줄에 내려놓으면 메모장이 메인 메모리에 올라오고, 그림판은 가상 메모리 영역으로 내려간다. 현실에서는 도무지 있을 수 없는 예시지만 간단하게 받아들이자.
3. 한계 ¶
문제는 가상 메모리가 되어줘야 하는 하드 디스크는 램보다 훨씬 느리다는 것이다. 하드 디스크는 용량으로는 가상의 메모리가 되어줄 수 있지만, 억세스 속도는 램보다 훨씬 느리다.
이래서 가상 메모리를 사용하여 많은 용량의 메모리를 교체할 때는 하드 디스크와 램의 억세스 속도 차이 때문에 엄청난 랙(…)이 발생하여, ‘일단 돌릴 수는 있지만 체감 스피드는 좆망’이 되버린다.
이것이 한동안 작업 표시줄에 내려놓고 전혀 안 건드리던 프로그램을 켜면 버벅거리는 일차적인 이유. 그리고 램을 확장하고, 하드 디스크를 억세스 속도가 훨씬 빠른 SSD로 바꾸면 체감 속도가 아주 빨라지는 이유이다.
그리고, 당연하지만 사용자가 하드 디스크에 미리 설정된 가상 메모리 용량마저 초과할 정도로 어플리케이션을 돌려대면 가상 메모리로도 노답이다. 어떤 소프트웨어 기술도 없는 메모리를 만들어내는 재주는 없다.얌전하게 리붓해라.
----
- [1] 이를 페이징(Paging)이라고 한다.