가상 메모리란 무엇인가? - 페이징 파일의 정체


윈도우에서 가상 메모리는(페이징 파일은) 실제 물리적인 메모리 공간(RAM) 외에 하드 디스크에 파일 형태로 따로 준비하는가상의 메모리 공간으로, 부족한 시스템 메모리를 보조해주는 역할을 하게 됩니다. 그런데 간혹 가상 메모리를 실제 메모리 공간처럼 사용하는 줄 아시는 분들이 계시더군요. [실제 메모리 + 가상 메모리] 이렇게 메모리의 용량이 늘어나는 것으로 착각하시는 거죠. 사실은 그게 아닙니다. 다시 말하지만 가상 메모리는 실제 메모리를 보조해주는 역할입니다. 그렇다면 가상 메모리는 어떻게 실제 메모리를 보조해주는 것일까요?

윈도우의 메모리 관리자는 만약 실제 메모리 공간이 가득차서 용량이 부족하게 되면, 실제 메모리에 저장되어 있는 내용 중 당장 사용되지 않는 내용들을 미리 준비된 하드 디스크의 페이징 파일(Pagefile.sys)로 옮겨 실제 메모리에 여유 공간을 확보합니다. 그러다 페이징 파일에 옮겨둔 내용이 필요하면 다시 실제 메모리로 옮겨서 사용하는 것이죠. 즉, 윈도우의 가상 메모리는 프로그램의 사용 상황에 맞춰 실제 메모리와 가상 메모리 사이에서 데이터를 스왑(교환)하는 방식으로 부족한 실제 메모리의 공간을 알맞게 조절하는 기능입니다.

실제론 이것보단 좀 더 복잡하고 페이지 폴트와 같은 전문 용어도 있음. 하지만 매우 단순화시키면 대충 이런 식!



즉, 윈도우의 가상 메모리는 실제 메모리의 남은 공간이 부족하게 되면 사용되는 일종의 임시 공간입니다. 그래서 만약 실제 메모리의 용량이 충분하다면 거의 사용되지 않는 특성이 있습니다. 만약 실제 메모리 공간이 부족하여 가상 메모리가 사용되기 시작하면 위에서 이야기한 것과 같이 [실제 메모리 <-> 가상 메모리] 사이로 데이터를 옮기는 과정들이 추가되기 때문에 그만큼 시스템이 전체적으로 느려지게 됩니다. 특히나, 실제 메모리 공간인 램에 비해 가상 메모리 공간인 디스크는 매우 느리기 때문에 더더욱 느려지는 것이죠.

그래서 가상 메모리는 되도록 사용되지 않을 수록 좋습니다. 그럴려면 실제 메모리 즉, 램의 용량이 충분해야 하죠. 하지만 꼭 메모리 공간이 부족하지 않더라도 일부 프로그램의 경우 반드시 이러한 가상 메모리를 사용하는 경우도 있습니다.






가상 메모리 관리하기 - 전체 윈도우 공통


가상 메모리(페이징 파일)은 기본적으로 윈도우가 자동으로 관리를 하고 있습니다. 가상 메모리인 페이징 파일은 보통 부팅 파티션에 위치하고[VHD 부팅이라면 VHD 파일이 위치한 파티션] 그 크기는 동적으로 윈도우가 알아서 자동으로 사용량에 맞춰 크기를 조절하는 형식으로 관리가 되는 것이 기본입니다.

이제 이러한 페이징 파일을 사용자가 원하는대로 관리하기 위해선 아래와 같이 설정하시면 됩니다.

01. 시스템 창[Windows Key + Pause]을 띄운 후 고급 시스템 설정으로 들어갑니다. [* 윈도우 XP 의 경우 바로 2 단계의 시스템 속성 창이 뜹니다.]



02. 성능 그룹의 설정으로 들어갑니다.



03. 성능 옵션 창이 뜨면 고급 탭으로 이동한 후 가상 메모리 그룹의 변경을 클릭합니다.



04. 가상 메모리 창이 뜨면 가상 메모리 옵션을 원하는대로 설정해줍니다. 설정법은 아래와 같습니다. 

A. 모든 드라이브에 대한 페이징 파일 크기 자동 관리의 체크를 해제합니다.
B. 드라이브 목록에서 가상 메모리를 설정할 드라이브를 선택합니다.
C. 페이지 파일 크기 옵션을 선택합니다.
  • 사용자 지정 크기 : 처음 크기와 최대 크기를 MB 단위로 입력합니다. 페이징 파일은 처음 크기로 생성되며 이후 가상 메모리의 공간이 부족하면 처음 크기와 최대 크기 범위 내에서 자동으로 페이징 파일의 크기가 늘었다 줄었다 합니다. [* 처음 크기 < 최대 크기]

  • 시스템이 관리하는 크기 : 윈도우가 자동으로 페이징 파일의 크기를 관리합니다.

  • 페이징 파일 없음 : 해당 드라이브의 페이징 파일을 제거합니다.
D. 설정을 클릭합니다. [* 꼭 설정을 눌러야 선택한 옵션이 적용됩니다.]


페이징 파일은 모든 드라이브에서 없앨 수도 있고, 여러 드라이브에 동시에 설정할 수도 있습니다. 페이징 파일을 다른 드라이브로 옮기려면 현재 페이징 파일이 설정된 드라이브의 페이징 파일을 없앤 후 다른 드라이브에 만들어주면 됩니다.

05. 설정을 모두 마쳤으면 확인을 클릭합니다.

06. 시스템을 재시작합니다.



이렇게 설정한 가상 메모리 - 페이징 파일은 해당 드라이브의 루트에 pagefile.sys 로 저장이 되어 있습니다.



이러한 pagefile.sys 파일은 현재 윈도우에서 사용 중인 파일이기 때문에 윈도우 탐색기를 통해 임의로 삭제할 수 없으며[다른 윈도우의 pagefile.sys 는 삭제 가능, 하지만 해당 윈도우로 부팅하면 다시 생깁니다.], 위와 같은 방식으로 해당 드라이브의 가상 메모리 옵션을 페이징 파일 없음으로 설정하게 되면 자동으로 제거됩니다.






가상 메모리의 관리에 대해서


1. 가상 메모리는 가장 빠른 디스크에 설정하는 것이 좋다.

널리 알려진 가상 메모리의 최적화 방법 중에 하나가 가상 메모리를 윈도우가 설치된 디스크와 물리적으로 분리된 다른 디스크의 드라이브로 옮겨주는 것입니다. 이렇게 하면 윈도우와 가상 메모리에서 동시에 발생하는 엑세스 부하를 줄여줄 수 있기 때문이죠.

하지만 한 가지 알아두셔야 할 것이 이러한 내용은 두 디스크가 동일한 성능을 가졌다는 전제 조건이 필요합니다. 즉, [HDD + HDD] 구성이나 [SSD + SSD] 구성과 같이 현재 윈도우가 설치된(현재 가상 메모리가 위치한) 디스크와 새롭게 가상 메모리를 옮겨 줄 디스크의 성능이 서로 비슷할 때에 적용되는 내용이란 것이죠.

만약 현재 SSD 에 윈도우와 가상 메모리가 위치해 있는데 이를 분리해 준다고 가상 메모리를 HDD 쪽으로 옮겨 준다면? 엑세스 부하를 줄여서 얻는 이득보다 훨씬 느린 HDD 에서의 엑세스 속도 저하로 인한 손해가 더 큽니다.

부하 분산도 좋지만 포르쉐 타고 잘 달리고 있는데 경운기로 갈아타라면? 기분 좋겠습니까?



고로 [SSD + HDD] 와 같이 급이 다른 성능을 가진 디스크가 혼합된 구성을 가진 시스템이라면 가상 메모리는 무조건 빠른 디스크에(SSD 로) 위치시켜 주시는 것이 좋습니다.




2. 램 용량이 충분하다면 가상 메모리는 아예 없애는 것이 좋다?

실제로 램 용량이 충분하면 가상 메모리가 전혀 사용되지 않을 가능성이 높기 때문에 가상 메모리 없이 사용하시는 분들도 많습니다.

가상 메모리를 아예 없앤 경우.



보통 이렇게 사용해도 문제가 없지만 일부 프로그램은 램 용량에 상관없이 반드시 가상 메모리를 필요로 하기도 합니다. 즉, 시스템에 가상 메모리가 전혀 없으면 오류를 일으키는 프로그램이 소수지만 존재한다는 것입니다. 그래서 어떤 프로그램이 이러한지 정확하게 알 수 없으니 저는 가상 메모리를 아예 끄는 것보다는 사용자 지정 크기 옵션을 통해 처음 크기를 소용량(1GB 이하)으로 설정해놓고 최대 크기는 적절히 지정해서 사용하는 것을 추천합니다.

이렇게 하는 이유가 지금 당장 사용하는 프로그램들에는 문제가 없을지라도 나중에 어떤 프로그램을 추가로 설치하여 사용할 지 모르고, 만약 그 때가 되어 문제가 발생하면 이게 가상 메모리 때문에 발생한 문제인지 모르고 엉뚱한 곳에서 헤메이게 될 공산이 크기 때문이죠. [덤으로 오류가 발생했을 때 기록되는 덤프 파일도 가상 메모리 용량이 최소 200MB 이상 되어야 생성 가능한 점도 있습니다.]


이런 내용을 듣고 "어라? 그럼 소용량의 램 디스크를 만들어서 그곳에 가상 메모리를 작게 넣어두면 되겠네?" 라는 생각이 불현듯 치고 나올 수도 있습니다.

하지만 생각을 해보죠. 이렇게 램 용량이 충분하면 실제로 가상 메모리가 사용될 확률은 매우 적습니다. 이야기한 것과 같이 소수의 프로그램에서 아주 가끔 사용될 수도 있는 것이 전부겠죠. 그래서 가상 메모리도 오류 방지를 위해 최소한의 용량으로 만들어만 둔다는 의미가 강합니다. 극히 적은 확률로 사용될 가능성이 있는 가상 메모리를 위해 램 디스크 프로그램을 설치하고 설정하여 관리까지 한다?

뭐 램 용량이 정말 차고 넘쳐날 정도로 많거나, 그렇게 차고 넘쳐서 다른 용도로 어느 정도 넉넉하게 램 디스크를 사용한다면, 이러한 램 디스크에 가상 메모리도 작게 설정해두는 것은 고려해봄직 하긴 합니다. 하지만 일부러 오직 가상 메모리만을 위해서 램 디스크를 설치하는 것은 제 개인적인 의견일 수도 있지만 크게 효용 가치는 없다고 생각합니다. 그래서 디스크에서 1GB 정도를(물론 더 작게 설정해도 되고) 혹시 모를 오류를 위해 투자한다고 생각하시고 잊어버리시는게 좋지 않을까 생각합니다.




3. 가상 메모리는 고정된 크기로 설정하는 것이 좋다?

가상 메모리를 사용자 정의 크기 옵션을 통해 처음 크기와 최대 크기를 동일하게 설정해주어 가상 메모리의 크기가 동적으로 변하지 않게 해주는 것이 좋다는 이야기가 있습니다.

페이징 파일의 크기 고정



일단 가상 메모리의 크기가 동적으로 늘어나는 이유는 무엇일까요? 그것은 실제 램 공간은 물론 가상 메모리 공간조차도 부족하여 윈도우가 가상 메모리의 크기를 자동으로 늘리는 것입니다. 즉, 우선 이건 문제 해결의 초점이 잘못 맞춰진 경우입니다. 우리가 초점을 맞춰야 할 곳은 가상 메모리의 크기가 줄었다 늘었다하는 점이 아닌 "현재 설정된 가상 메모리의 크기" 조차도 부족하여 가상 메모리의 크기가 자꾸 늘어난다는 점입니다. 이는 가상 메모리의 처음 크기가 자신의 램 용량과 프로그램 사용량에 비해 너무 작게 설정되어 있음을 의미합니다. 이럴 땐 가상 메모리의 처음 크기를 좀 더 여유 있게 늘려주어야 함이 옳은 것이죠.

다음으로 애초에 가상 메모리의 크기를 전혀 부족하지 않게끔 크게 설정한 후 그 크기를 고정하는 방향으로 설정하는 경향도 있습니다. 물론 이렇게 해두면 가상 메모리가 늘었다 줄었다 하는 것을 보지 않아도 되는 이점은 있습니다. 하지만 쓸데없이 크게 설정한 가상 메모리는 디스크의 공간만 낭비하는 꼴입니다. 또한 그러한 설정 방식이 가상 메모리의 성능을 높여주는 것도 아닙니다.

결국 적절히 자신에게 맞는 크기를 스스로 찾아 그에 맞춰 설정해주는 것이 가장 좋습니다.




4. 나에게 적당한 가상 메모리 용량은 얼마일까?

가상 메모리의 최소 크기는 램 용량의 몇 배에서... 이러한 내용은 예전 램이 128MB 나 256MB 정도 밖에 달리지 않았을 때를 기준으로 한 것이라 너무 오래된 정보이고 요즘의 실정에는 잘 맞지 않습니다. 또한 요즘은 시스템에 장착되는 램 용량이 상당히 크기 때문에 윈도우에서 관리하는 기본 설정 값이 너무 큰 경우가 대부분입니다.

그래서 가장 좋은 것은 역시나 자신이 직접 자신에게 맞는 최적화된 값을 찾아내는 것입니다. 방법은 간단합니다. 사용자 지정 크기를 통해 가상 메모리의 처음 크기를 최소값인 (64bit 기준) 16MB 로 설정하고 최대 크기는 일단 충분히 크게 지정합니다.

처음 크기를 최소 크기로 최대 크기는 충분히 늘어날 수 있을 만큼



이와 같이 설정을 한 후 재부팅하여 변화를 적용하고, 이제 평상시 사용하는 정도로 프로그램들을 실행하는 겁니다. 인터넷 익스플로러나 크롬과 같은 웹 브라우저는 열린 창의 개수에 비례해 램 용량을 그만큼 더 잡아먹기 때문에 인터넷 창도 대충 평상시 자신의 습관에 알맞게 적당히 띄워줍니다.

이제 그렇게 프로그램들이 실행된 상태에서 가상 메모리 설정 창으로 들어가 봅니다. 그럼 자신이 사용한만큼 가상 메모리의 크기가 늘어나 있을 겁니다. 만약 가상 메모리가 전혀 늘어나지 않았다면 그건 아직 그정도로는 가상 메모리가 사용되지 않을 만큼 여러분의 램 용량이 충분하다는 것입니다.[그게 가장 좋습니다.]

자신의 사용량에 맞춰 늘어난 가상 메모리 용량



하지만 램 용량이 1GB~2GB 로 소용량이시거나 사용하는 프로그램들이 굉장히 무거운 경우 보통 가상 메모리 크기가 처음에 비해 어느 정도 늘어나 있을 겁니다. 그 용량이 자신에게 필요한 평균적인 가상 메모리의 크기입니다.

결론 나왔죠? 이제 그 크기에 약간의 여유를(약 1.2 ~ 1.5 배 정도면 충분) 주어 가상 메모리의 처음 크기를 설정해주고, 최대 크기도 마찬가지로 처음 크기에서 어느 정도의 여유를 더 주는 방향으로 설정해주시면 됩니다. 이런 식으로 자신에게 맞는 가상 메모리의 크기를 찾으시고 그에 맞춰 설정해주는 거죠. 간단하죠?


그런데 만약 가상 메모리의 크기가 무슨 주유소 기름값 마냥 무서운 줄 모르고 쭉쭉~ 치고 올라가면서 버벅인다면? 그건 현재 램 용량이 그만큼 부족한 겁니다. 램 용량 좀 업그레이드 하세요.




5. 가상 메모리는 사용되지 않을 수록 좋다.

처음에 밝힌 것과 같이 가상 메모리는 실제 메모리의 공간이 부족할 때 사용되는 것입니다. 실제 메모리와 가상 메모리의 속도 차이 즉, 램과 디스크의 속도 차이는 하늘과 땅 차이라고 할 수 있습니다. 앞서 SSD 와 HDD 를 농담삼아 포르쉐와 경운기에 비교했지만, 램과 디스크는 램의 속도를 전투기에 비유하자면 디스크의 속도는 거북이에 비유할 수 있을 정도입니다.

애초에 둘을 비교하는 것 자체가 넌센스



이건 디스크에서 그 빠르다는 SSD 가 출동해도 램에게는 게임이 안 되는 겁니다. 아무튼 그래서 윈도우가 가상 메모리를 자주 그리고 많이 사용하게 되면 램보다 느린 디스크로 인해 그만큼 시스템의 성능 또한 뚝뚝 떨어지게 됩니다. 소위 버벅이는 거죠. 그래서 가상 메모리는 되도록이면 사용되지 않는 것이 가장 좋습니다. 

가상 메모리가 자주 그리고 많이 사용된다는 것은 현재 시스템의 물리적인 메모리의 용량(RAM 용량)이 부족하다는 것을 의미합니다. 이것은 램 용량을 충분하게 늘려 윈도우가 가상 메모리를 사용할 가능성을 최대한 줄여주는 것 외에는 방법이 없습니다. 즉, 시스템에 충분한 용량의 램을 장착해 주어야 문제를 해결할 수 있다는 것이죠. 고로

램에 돈을 좀 꽂아주면 됩니다.



돈이 세상의 전부는 아니지만, 돈을 바르기 시작하면 안 되는 것도 드물죠. 아무리 최적화하고 용을 쓰고 별에 별 팁을 다 적용해도 돈을 들이붓는 놈한테는 못 당해요. 잔인하지만 사실이잖아요? 그러니 우리는 램 용량에 과감히 투자를 해야 합니다. 다행히도 몇 년 전부터 램 값이 많이 쌉니다.

일단 램 용량은 무조건 크면 클 수록 좋습니다. 이건 진리입니다. 그래도 이야기를 해 보자면 일반적으로 간단한 웹 서핑 및 소소한 인터넷 캐쥬얼 게임용이라면 최소 2GB 적정 4GB, 인터넷 창도 수십 개씩 좀 화끈하게 띄우고 프로그램도 한 번 열면 닫을 줄을 모른다면 8GB 정도 생각하시면 된다고 할 수 있습니다.

사실 보통 이야기하는 것에 비해 좀 많은 것 아닌가? 라는 생각이 들 수 있을 정도로 추천을 했는데요. 제 오랜 경험상 램 용량은 그 사람이(자신이) 현재 원하는 작업 수준보다 한 단계 더 높게 약간 넘치는 듯한 느낌이 들 정도의 용량으로 셋팅해주는 것이 좋습니다. 그리고 이렇게 보다 큰 용량을 자신있게 추천을 하는 이유는 요즘 램 값이 싸니까요.

이제 가상 머신 두 세 개는 우습게 돌리면서 이것 저것 무거운 프로그램들을 많이 쓰시거나, 캐드 다루시거나, 동영상을 전문적으로 편집하시거나, 포토샵으로 수백 메가짜리 파일들을 우습게 여시는 분들은 메인보드가 지원하는 한 최대로 꽂아주시는게 무조건 좋습니다. 꽂아 넣을 수 있을 때까지 꽂아 넣으세요. 그건 돈지랄이 아니에요. 그리고 요즘 램 값이 많이 싸잖아요?






마무리


1 년 전에 윈도우 7 을 기준으로 하여 포스팅했던 것을 약간의 설명을 더 추가하고 전체 윈도우에 맞춰 설명을 수정하여 다시 재 포스팅하였습니다. 크게 바뀐 부분은 없지만 어떻게 그때보다 글이 더 잘 나왔는지 모르겠네요. 아무튼, 1 년 전에도 그랬고, 지금도 그렇지만 윈도우 가상 메모리의 진리는 하나입니다.

지금이 램 뱅크를 풀로 채워볼 적기입니다.



램 용량을 좀 충분하게 업그레이드 하시고 가상 메모리는 대충 쓰시면 됩니다. 32GB 풀 뱅크를 노려보세요. 이상입니다. ^^;;

'OS' 카테고리의 다른 글

뮤텍스, 세마포어  (0) 2015.11.04
pintos 요약 - 3. Virtual Memory  (5) 2015.07.05
pintos 요약 - 2-2. User Program (file system & synchronization)  (0) 2015.07.05
pintos 요약 - 2-1. User Program Basic  (3) 2015.07.05
pintos 요약 - 1. Thread  (0) 2015.07.05
Posted by bogus919
,