2010년 5월 18일 화요일

윈도우7의 메모리 관리 기술

Windows의 메모리 관리 기술을 살펴보면, 먼저 가상 메모리(Virtual Memory)부터 이야기를 해야 한다. MS-DOS 시절까지는 운영 체제가 실제 메모리를 사용하였고, 메모리 부족 시에는 프로그램이나 운영 체제에서 더 이상 추가적인 동작을 할 수 없었지만, 가상 메모리라는 개념이 나오면서, 물리적인 메모리의 부족에 대한 한계를 넘어섰다.

mem01

가상 메모리는 실제 Windows가 사용할 수 있는 메모리를 이야기하며, {물리적인 메모리 + 페이징 파일(Paging File)}이다. 만약, 실제 메모리가 512MB이고, 페이징 파일을 3.5GB를 잡으면, Windows가 사용할 수 있는 메모리는 4G가 되는 것이다. Windows는 모든 프로세스를 실제 메모리에 직접 할당하는 것이 아니라 가상 메모리에 할당하게 되며, 이는 내부적으로 실제 메모리와 페이징 파일로의 배치가 일어나게 되며, 물리적인 메모리가 모두 찼을 경우엔 페이징 파일에 배치시키는 것이다. 당연히 메모리 속도와 페이징 파일이 저장된 하드 디스크의 속도는 어마어마한 속도차이가 나므로, 메모리가 부족하면 하드 디스크를 계속 access하게 되고, 속도가 느려지는 것도 이에 기인한 결과이다. 또한 물리적인 메모리에 있었던 데이터를 필요 시 페이징 파일로 이동하고(Swapping), 다시 페이징 파일에서 메모리로 옮기는 경우도 발생한다. 이 역시 시스템의 부하로 작용하게 되고, 따라서 물리적인 메모리가 많을수록 플랫폼의 속도가 빠르게 느껴진다.

Windows XP는 PreFetch라는 메모리 관리 기술을 사용한다. Windows XP의 캐시 관리자(Cache Manager)응용 프로그램 실행 시와 운영 체제 부팅 시에 디스크와 메모리, 메모리와 가상 메모리 사이에 이동되는 데이터들을 모니터링한다. 캐시 관리자가 이러한 일들을 모니터링하면서, 각각의 응용 프로그램이나 프로세스가 사용하는 모든 디렉터리와 파일에 대해서 맵(Map) 파일을 작성하게 되며, 이 맵 파일은 \Windows\Prefetch라는 폴더에 .pf 확장자를 가지고 저장된다.

mem02 

캐시 관리자는 이러한 맵 파일을 시스템 부팅, 응용 프로그램 로딩 시에 사용하게 된다. 즉, 캐시 관리자는 응용 프로그램이나 프로세스가 실행될 때, 이를 인터셉트(Intercept)하여, \Windows\Prefetch 폴더에 해당되는 맵 파일이 있는지 확인하고, 만약 있다면 캐시 관리자는 메모리 관리자(Memory Manager)를 호출하고, 맵 파일내 정보를 이용하여 데이터와 코드를 메모리로 로딩할 것을 요청한다.

 

실제 프로세스가 데이터나 코드가 필요해졌을 경우, Windows에 의해서 미리 메모리로 로딩되어져 있어 디스크에서 읽을 필요가 없으므로, 빠른 로딩 처리 및 응답을 보여주게 된다. 그리고, 이러한 Prefetch 작업의 효율성을 위해, Windows는 주기적으로 맵 파일 내용을 분석하고, 순서에 따라 디렉터리와 파일들을 정리해 놓는다. 이러한 정보를 \Windows\PreFetch 폴더의 Layout.ini파일에 저장해 놓고, 디스크 조각 모음은 이 정보를 이용하여 해당 폴더와 파일이 연속된 공간을 차지하게 한다.

Windows Vista에서는 Superfetch라는 기술을 선보였다. Superfetch는 Prefetch에서 부족했던 몇몇 요소들을 훌륭하게 보완하여, 시스템의 응답 속도 향상에 도움을 주었다. Windows XP의 Prefetch 기술에는 몇 가지 큰 문제점이 있다. Prefetch 기술은 파일과 데이터를 응용 프로그램 요청 전에 미리 로딩해 놓는 기술이었으나, 가상 메모리는 한정된 용량을 가지고 있기 때문에, 다른 응용 프로그램이 메모리를 필요로 할 경우, Prefetch해놓은 데이터를 하드 디스크 내 페이징 파일로 이동시켜야만 한다. 이 데이터가 다시 필요하다면, 다시 페이징 파일로부터 메모리로 로딩해야 되고, 결국 성능 향상에 약점으로 이어지게 되었다.

 

Superfetch는 이를 위해 몇 가지 데이터를 더 가지고 데이터를 메모리로 로딩한다. 맵 파일에 사용자가 해당 프로그램을 얼마나 종종, 언제, 얼마 동안 사용하는지 등의 사용자의 사용 패턴을 기록한다. Superfetch는 또한 Prefetch된 데이터가 메모리에서 페이징 파일로 스와핑 되었을 경우, 이를 감지하고 페이징을 야기한 응용 프로그램이 종료되었을 때 해당 데이터를 다시 메모리로 이동시킨다. 따라서, 실제 응용 프로그램이 해당 데이터를 접근하려 했을 경우, 메모리에서 빠르게 찾을 수 있게 도와준다.

또한 Windows Vista에서는 ReadyBoost 라는 기술이 선보였다. 일정 속도 상의 읽기/쓰기 접근을 보이는 USB 장치를 연결하였을 때, 아래와 같은 메시지를 본 적이 있을 것이다.

mem03

하드 디스크의 속도가 페이징 파일의 처리를 늦게 하는 요소이므로, 페이징 파일을 속도가 빠른 USB 플래시 메모리에 담는 기술이 Windows ReadyBoost이다. Superfetch가 메모리 페이지를 하드 디스크 상의 페이징 파일로 이동시키는 것이 아니라, USB 메모리의 페이징 파일로 이동하는 것이다. Windows ReadyBoost 기술을 사용하시던 도중, USB 메모리를 제거하더라도, 이를 Windows Vista는 감지하기에 시스템의 안정성에는 전혀 영향을 주지 않는다. 또한 USB 메모리에 저장되는 데이터는 암호화가 되므로 보안에도 전혀 문제가 없다.

PC 제조사에서는 ReadyBoost를 활용해서 메모리가 적은 머신이나 성능이 낮은 머신의 경우에는 시스템의 메인 보드에 적절한 용량의 USB 메모리를 기본 탑재하여 시스템의 성능을 향상하는 것을 시도하고 있다.

 Windows 7도 여전히 Superfetch 기술을 사용하고 있으며, 개선된 Superfetch는 아래와 같다.

  • 사용자가 실제 작업을 하고 있는 경우, 시스템이 Prefetch하는 작업을 최소화하여 좀더 많은 리소스를 사용자에게 할당
  • 실제 사용자의 사용 형태를 더 잘 추적 가능하도록 최적화.
  • SSD에 최적화
  • 불필요한 파일에 대한 Prefetch을 전반적으로 줄임.
    매우 큰 파일, 쓰기 전용 파일(예를 들어 로그파일), 낮은 메모리를 가진 시스템

mem04

이제 SSD의 등장에 대해 좀 더 알아 보자. 만약 디스크의 속도가 무지무지 빠르다면? 오히려 이러한 Fetch 기술이 시스템 부팅 후에는 사용자의 사용 가능한 리소스의 일부를 차지하게 된다. 기존 하드 디스크보다 더 빠른 하드 디스크.. 즉 SSD(Solid State Drive)에 대하여, Windows 7은 SSD에 대해서도 최적화 되어져 있다. SSD 사용 시 Windows 체험 지수의 주 하드 디스크 인덱스가 6.5이상인 경우, Superfetch 서비스를 사용 중지할 것을 권장한다. Windows 7에서 SSD의 경우에는 이를 인지하여 SSD 최적화를 위해 Superfetch 서비스를 중지시킨다.

mem05 mem06

 

댓글 없음:

댓글 쓰기

이 블로그 검색

팔로어

블로그 보관함