Post

Prefetch, Superfetch

Prefetch

프리패치(Prefetch)는 윈도우 XP 이후 운영체제에서 제공하는 메모리 관리 정책으로, 실행파일을 메모리로 로딩할 때의 효율을 최대한 끌어올리기 위한 목적으로 개발되었다.

실행 파일이 사용하는 시스템 자원을 프리패치 파일(.pf)에 저장해 두었다가, 부팅 시에 프리패치를 모두 메모리에 로드하는 방식이다. (실제 사용할 때에는 메모리 매핑 해주는 방식)

프리패치 파일에 저장되는 정보 중 분석에 유용한 목록은 아래와 같다.

  • 실행 파일 이름
  • 실행 파일의 실행 횟수
  • 실행 파일의 마지막 실행 시간
  • 프리패치 파일의 생성 시간(파일 최초 실행 시간)
  • 실행된 볼륨의 정보
  • 실행파일 실행 시 참조하는 파일의 목록

하지만 프리패치의 사용은 메모리의 페이징 아웃 기법(오래 사용되지 않는 메모리 영역을 잠시 보조저장장치로 이동시켜 메모리 공간을 확보하는 기술)에 의해 제 기능을 못할 때가 있다. 정작 운영체제가 미리 로딩해 놓은 프리패치 파일이 페이징 아웃 되버리면, 다시 응용프로그램을 실행할 때 보조 저장장치의 페이지 파일(pagefile.sys)로부터 로딩을 해야 하는 모순이 생기는 것이다.

Superfetch

이러한 문제를 개선하기 위해 Windows Vista부터 적용된 것이 슈퍼패치(Superfetch)로, C:\Windows\prefetch 경로 내부의 .db확장자를 가지는 파일로 존재한다. 슈퍼패치는 사용자의 프로그램 사용 패턴을 추가적으로 기록하여 자주 사용하는 프로그램일 경우 지속적으로 메모리 로드해 두는 것을 목적으로 존재한다. 슈퍼패치 압축 포맷은 LZNT1 압축(RtlCompressBuffer, RtlDecompressBuffer)이다.

SSD는 I/O가 충분히 빨라 fetch를 사용 할 필요가 없기 때문에, SSD를 사용 할 경우 Win7 이상 OS는 fetch를 사용하지 않는 경우가 있다. 사용 여부는 OS 세부 버전 별로 다르다.

This post is licensed under CC BY 4.0 by the author.