페이지 파일에서 메모리를 Windows에서 한 번에 물리적 메모리로 다시“스왑”하는 방법 (예 : Linux 스왑 오프)


10

Windows PC에서 메모리를 다시 교체 (페이지 파일에 넣은 모든 메모리 데이터를 다시 저장하기 위해) (또는 원하는대로 교체) 할 수 있습니까?

Linux에서는 swapoff / dev / sdaX를 사용하여이 작업을 쉽게 수행 할 수 있습니다. 여기서 X는 스왑 파티션입니다. Windows에서는 매번 재부팅하라는 메시지가 나타납니다.

내가 이것을하고 싶은 이유는 스왑 파일로 데이터를 스왑 아웃하더라도 실제 램에서 리소스가 부족한 게임을 완전히 재생할 수 있지만 게임을 중지하면 나머지 모든 프로그램이 실행되기 때문입니다. 느린. 이것은 물론 정상입니다. RAM이 너무 작기 때문에 모든 프로그램이 페이지 파일로 푸시되었으며, 게임 후 하드 페이지 오류가 발생하여 프로그램에 대한 모든 메모리 액세스가 중대한 지연과 결과적으로 약간의 좌절감을 안겨주었습니다.

그러나 PC가 모든 데이터를 물리적 메모리에 1 분 정도 다시 복사 한 후 빠른 PC 작업을 재개함으로써 이러한 좌절을 쉽게 피할 수 있습니다! (작동하는 동안 속도 저하를 견뎌야하는 대신)

이에 대한 조언을 미리 감사드립니다!

친절한 안부


원하는 것은 여러 개의 Windows 사본이 실행되는 "하이퍼 바이저"입니다. 하나를 일시 중지하고 다른 하나를 일시 중지 해제합니다. 이것은 다른 시스템에서 상당히 많이 수행되지만 Windows 에서이 기능을 사용할 수있는 하이퍼 바이저가 있는지 확실하지 않습니다.
Daniel R은

답변:


6

불행하게도. Windows 가상 메모리 시스템의 작동 방식에 따라 많은 페이지는 오류가 발생할 때까지 단순히 매핑 할 수 없으며 매핑되지 않으면 메모리에 저장할 수 없습니다. 따라서 Windows는 페이지에 액세스 할 때까지 기다려야합니다.


충분한 권한을 가진 타사 프로세스가 해당 페이지에 액세스하여 오류를 일으킬 수 있습니까?
badp

다른 프로세스가 페이지에 액세스하는 것은별로 좋지 않습니다. 사용하려는 앱의 프로세스에 결함이 있어야합니다.
Jamie Hanrahan

생각해 보면, 그건 ... 일종의 .. 대상 프로세스에 원격 스레드를 주입해야합니다. 이 스레드는 주소 공간에서 VirtualQuery를 수행 한 다음 모든 프로세스 전용 페이지를 읽기만합니다. 그러나 RAM에 있고 나중에 페이징 된 페이지와 페이지에서 페이징되지 않은 페이지를 구별 할 수있는 방법은 없습니다. 또한 프로세스가 다시는 필요하지 않은 페이지를 식별 할 수있는 방법이 없습니다. 그래서 당신은 당신이 필요하지 않은 많은 것들을 페이징 할 것입니다.
Jamie Hanrahan

@JamieHanrahan 그것은 효과가있을 것 같습니다.
David Schwartz

1

불행히도 그러한 옵션은 없습니다.

Windows에서 스와핑을 줄이는 유일한 방법은 실제 RAM을 늘리는 것입니다.


또는 스왑을 완전히 비활성화하십시오. 반드시 Windows가 아니라 Linux / BSD 시스템에서는 회전 스왑 형식이 좋지 않기 때문에 사용하지 못하고 사용하기 시작할 때 하드 한계에 도달하는 대신 모든 것이 느려집니다.
킬러 미스트

1
페이지 파일을 비활성화해도 디스크로의 페이징은 비활성화되지 않습니다. 개인 커밋 된 주소 공간의 페이지 아웃 만 비활성화합니다. 메모리 매핑 된 파일 내용은 여전히 ​​페이징 및 페이징됩니다.
Jamie Hanrahan
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.