== 개요 == 가상 메모리(Virtual Memory)란, [[오퍼레이팅 시스템]] 기술의 하나이다. 마이크로소프트 윈도우즈에서 가상 메모리 운용의 필요성은, [[GUI]] OS로 전환하고 [[멀티 태스킹]]이 보편화되면서 다수의 어플리케이션을 하나의 OS에서 돌리게 되었는데, 이러다가는 [[램]]이 [[으앙 죽음]] 수준으로 심각하게 모자랐기 때문에 OS차원에서 고도의 메모리 관리가 필요해졌기 때문에 제시되었다. 가상 메모리 기능이 없는 OS는 메인 메모리를 그대로 물리적 어드레스에 따라서 액세스(읽고 쓰기)를 지원한다. 가상 메모리 기능이 있는 메모리 영역의 물리적인 어드레스 이외에 가상의 어드레스를 할당하고 이를 OS에서 하드웨어의 MMU(Memory Management Unit)와 맞물려서 알아서 관리를 해준다. 아주 간단히 말하자면 은행 순번표 같은 형식[* 이를 페이징(Paging)이라고 한다.]으로 각 메모리 공간마다 순번을 할당해놓고 필요할 때마다 돌려쓰는 것이다. 이 때문에 실제 메모리 공간을 초과한 프로그램을 올려도 '일단은' 문제가 생기지 않게 되었다. 또한, 메모리 단편화 문제도 어느 정도 해소된다. 이는 메모리를 일정한 단위로 쪼개어 쓰기 때문이다. 가상 메모리 덕분에 실제 메모리 공간이 어느 정도 부족하다고 해도, 실행중이긴 하지만 당장 사용하지 않는 프로그램은 가상 메모리 영역으로 내려보내고 지금 실행중인 프로그램은 실제 메모리 공간으로 올려보내는 것으로 유연하게 사용자의 멀티 태스킹에 맞춰서 대응할 수 있다. 간단히 설명하자면 유저가 [[메모장]]을 쓰고 있다가 [[그림판]]과 [[계산기]]를 켠다. 그런데 3개의 프로그램을 한꺼번에 돌리기에는 메모리가 부족한 상황. --미친 [[똥컴]]이군-- 윈도우즈는 어쩔 수 없이 그림판과 계산기만 메인 메모리에 올려놓고, 메모장은 가상 메모리로 내려보낸다. 얼마 있으니 계산기도 안쓰게 되서 가상 메모리로 내린다. 1시간 쯤 그림을 그리다가 다시 메모장을 켜고 그림판을 작업 표시줄에 내려놓으면 메모장이 메인 메모리에 올라오고, 그림판은 가상 메모리 영역으로 내려간다. --현실에서는 도무지 있을 수 없는 예시지만 간단하게 받아들이자.-- == 한계 == 물론 이 과정에서 [[하드 디스크]]와 [[램]]의 억세스 속도 차이 때문에 엄청난 [[랙]](…)이 발생하여, ‘일단 돌릴 수는 있지만 체감 순위는 좆망’이 되버린다. 한동안 작업 표시줄에 내려놓고 전혀 안 건드리던 프로그램을 켜면 버벅거리는 일차적인 이유. 그리고 [[램]]을 확장하고, 하드 디스크를 억세스 속도가 훨씬 빠른 [[SSD]]로 바꾸면 체감 속도가 아주 빨라지는 이유이다. 그리고, 당연하지만 사용자가 하드 디스크에 미리 설정된 가상 메모리 용량마저 초과할 정도로 어플리케이션을 돌려대면 가상 메모리로도 [[노답]]이다. 어떤 소프트웨어 기술도 없는 메모리를 만들어내는 재주는 없다. == 참조 == http://e-words.jp/w/%E4%BB%AE%E6%83%B3%E3%83%A1%E3%83%A2%E3%83%AA.html 한세경, 『뇌를 자극하는 프로그래밍 원리: CPU부터 OS까지』(서울: 한빛미디어, 2007).