컴퓨터 지식 네트워크 - 컴퓨터 문답 - 캐시된 메모리와 사용 가능한 메모리의 차이점은 무엇인가요?

캐시된 메모리와 사용 가능한 메모리의 차이점은 무엇인가요?

메모리 관리자의 주요 변경 사항은 물리적 메모리를 관리하는 방식에 반영됩니다. 이전 버전의 Windows에서 사용된 "대기 목록" 관리에는 두 가지 제한 사항이 있었습니다. 첫째, 페이지의 우선 순위는 미래의 메모리 요구 사항을 예상하지 않고 프로세스의 최근 과거 동작에만 의존합니다. 둘째, 우선순위 지정에 사용되는 데이터는 특정 순간에 프로세스가 소유한 페이지 목록으로 제한됩니다. 이러한 두 가지 단점은 컴퓨터에서 잠시 자리를 비우고 해당 시간 동안 메모리를 많이 사용하는 시스템 응용 프로그램(예: 바이러스 검사 또는 디스크 조각 모음)을 실행해야 하는 "점심 식사 후 증후군"과 같은 상태로 이어질 수 있습니다. 이 애플리케이션은 활성 애플리케이션이 메모리에 캐시한 코드와 데이터가 메모리 집약적 활동에 의해 강제로 다시 작성되도록 합니다. 다시 돌아오면 애플리케이션이 디스크에서 데이터와 코드를 요청해야 하기 때문에 성능이 매우 느리다는 것을 알 수 있습니다.

Windows XP는 대규모 디스크 I/O를 수행하여 이전 부팅 및 응용 프로그램 실행을 기반으로 예상 코드 및 파일 시스템 데이터를 메모리에 미리 로드하는 프리페치 지원 기능을 제공합니다. 이를 통해 부팅 및 응용 프로그램 실행 성능이 향상됩니다. Windows Vista는 기록 정보 및 예상 메모리 관리를 통해 "최근에 액세스한 적이 없는" 접근 방식을 향상시키는 메모리 관리 체계인 SuperFetch를 통해 또 다른 큰 발전을 이루었습니다.

SuperFetch는 서비스 호스트 프로세스(%SystemRoot%\System32\Svchost.exe) 내에서 실행되는 Windows 서비스로 %SystemRoot%\System32\Sysmain.dll에 구현됩니다. 이 체계는 페이지 사용 내역을 검색할 수 있을 뿐만 아니라 메모리 관리자가 디스크 파일이나 페이징 파일의 데이터와 코드를 "대기 목록"에 미리 로드하고 개별 페이지에 우선순위를 할당하도록 지시할 수 있도록 메모리 관리자가 제공하는 지원에 의존합니다. 수업. SuperFetch 서비스는 기본적으로 한 번 메모리에 저장되었지만 새 데이터 및 코드를 위한 공간을 확보하기 위해 메모리 관리자가 재사용한 데이터 및 코드에 대한 페이지 추적을 확장합니다. 서비스는 이 정보를 %SystemRoot%\Prefetch 디렉터리(애플리케이션 시작을 최적화하는 데 사용되는 표준 프리페치 파일 옆)에 확장명이 .db인 장면 파일에 저장합니다. 메모리 사용량에 대한 심층적인 이해를 바탕으로 SuperFetch는 물리적 메모리가 사용 가능해지면 데이터와 코드를 미리 로드할 수 있습니다.

메모리를 사용할 수 있게 될 때마다(예: 응용 프로그램이 종료되거나 메모리가 해제될 때) SuperFetch는 메모리 관리자에게 최근에 꺼낸 데이터와 코드를 가져오도록 요청합니다. 이는 초당 몇 페이지의 속도로 수행되며 사전 로드 작업이 사용자나 다른 활성 애플리케이션에 영향을 주지 않도록 I/O에 "매우 낮은" 우선 순위가 지정됩니다. 따라서 점심을 먹으러 컴퓨터를 떠나고 메모리를 많이 사용하는 일부 백그라운드 작업으로 인해 자리를 비운 동안 활성 응용 프로그램의 코드와 데이터가 메모리에서 제거되는 경우 SuperFetch는 일반적으로 코드 전체 또는 대부분을 메모리 밖으로 이동합니다. 돌아와서 데이터가 메모리에 반환됩니다. SuperFetch에는 최대 절전 모드, 대기 모드, FUS(Fast User Switching) 및 애플리케이션 실행에 대한 시나리오별 지원도 포함되어 있습니다. 예를 들어, 시스템이 최대 절전 모드에 있을 때 SuperFetch는 이전 최대 절전 모드를 기반으로 후속 재개 시 액세스될 것으로 예상되는 최대 절전 모드 파일에 데이터와 코드를 저장합니다. 반면, Windows XP를 복원하는 경우 이전에 캐시된 데이터를 참조할 때 디스크에서 다시 읽어야 합니다.

上篇: 안신 지역 거래 시간은 언제인가요? 下篇: Server Opener는 어떻게 자체 코어로 서버를 열 수 있나요?
관련 내용