최대 절전 모드에서 OS가 모든 RAM을 HDD에 복사해야하는 이유는 무엇입니까?


7

내 질문은 컴퓨터 OS, 특히 최대 절전 모드에 대한 이론적입니다.

내가 아는 한, 최대 절전 모드 (ACPI 상태 S5, 맞습니까?)는 OS OS가 다시 부팅 될 때 RAM을 복원하는 데 필요한 모든 데이터를 하드 디스크에 기록합니다. 좋아, 이것은 나에게 좋은 소리.

그러나 교사가 OS 간 메모리 관리의 차이점을 설명했을 때 이전 운영 체제 수업을 기억합니다. Windows 및 Linux 커널은 모두 가상 메모리를 사용 합니다 . 모든 페이지는 스왑으로 초기화 된 다음 필요할 때 RAM에로드되어 언제든지 재배치 할 수 있습니다.

또한 메모리 페이지가 즉시 스왑을 위해 플러시되지 않지만 특정 시간 동안 또는 스왑에서 페이지를로드해야하고 모든 메모리 페이지가 더러워진 경우 메모리에 보관됩니다

내 질문은 :hiberfil.sys모든 페이지 이미 스왑 파일에 있어야하기 때문에 Windows가 내부에 모든 RAM을 덤프 하여 별도의 파일 을 저장 해야합니까? ?

마찬가지로, 왜 리눅스가 파티션을 교환하기 위해 페이지를 복사하고 있다고 명시합니까? 시스템을 단순히 일시 중단하면 중단되기 전에 몇 초 동안 연속 디스크 액세스가 필요하지만 (아마도 커널 플러시 캐시) 최대 절전 모드를 해제하려면 복원하는 데 동일한 시간이 걸립니다.

커널에 대해 뭔가 빠졌습니까?


1
Pagefile.sys는 Windows에서 항상 사용되는 것은 아니며 "필요한 경우"사용할 하드 드라이브 공간을 예약합니다. Vista와 W7 및 설치된 메모리가 많으면 PF가 전혀 사용되지 않습니다.
Moab

모든 페이지가 "스왑으로 초기화 되지 않았습니다 ". 당신이 그 아이디어를 어디서나, 미래에 그 출처를 신뢰하지 마십시오.
Jamie Hanrahan

답변:


2

설명하는 것 중 일부는 가상 메모리와 같지 않고 디스크 캐시와 비슷합니다. 응용 프로그램에서 다시 읽기를 원하는 경우 운영 체제가 디스크에서 읽은 데이터의 메모리 사본을 디스크에서 보관합니다. 이 시나리오에서는 한 번에 여러 페이지를 모두 작성하여 효율성을 높이기 위해 "더러운"페이지를 디스크에 다시 쓰는 것을 지연시킬 수도 있습니다.

가상 메모리는 다른 방법으로, 데이터는 먼저 RAM에 기록되고 커널이 다른 목적으로 해당 RAM을 비워야하는 경우에만 스왑 파일에 기록됩니다. 모든 메모리 비트가 반드시 스왑 파일에 해당하는 공간을 가지고있는 것은 아닙니다. 그렇지 않으면 RAM 크기보다 작은 스왑 파일을 가질 수 없었습니다. 기존의 생각은 이것이 필요한 방식이라는 것입니다. 필요하지 않을 때는 항상 RAM을 디스크에 복사하는 것이 너무 비쌉니다. 많은 메모리가 필요한 프로그램을 실행할 때 컴퓨터가 느리게 실행되고 스왑 공간을 스 래싱하기 시작해야하는지 생각해보십시오.

즉, 메모리를 정기적으로 디스크에 다시 복사하는 복잡한 규칙을 사용하여 설명하는대로 작동하는 실험 연구 운영 체제가 있으며 최대 절전 모드가 필요하지 않습니다. 플러그를 뽑을 수 있습니다 컴퓨터가 30 초 정도 작동하지 않을 수 있습니다. 이론적으로 관심이있는 경우 CoyotOS , CapROS 또는 EROS를 확인하십시오 . 나는 그들의 성능이 무엇인지, 또는 그러한 전략에 대한 다른 단점이 무엇인지 모르지만 비디오 카드 또는 다른 장치와 공유되는 메모리와 같은 미친 것들을 고려할 때 그것을 얻는 것이 어렵다고 상상할 수 있습니다. 모든 경우에 올바르게 작동합니다. 내가 아는 한 프로덕션 운영 체제는 이러한 종류의 작업을 수행하지 않습니다.


최대 절전 모드에서 RAM의 페이지를 페이지 파일의 여유 공간으로 복사하는 것이 별도의 최대 절전 모드 파일을 사용하는 것보다 훨씬 빠르고 공간 효율적이라고 생각합니다.
phuclv

페이지 파일에없는 RAM의 모든 페이지를 저장하기에 충분한 여유 공간이 페이지 파일에 있다고 보장 할 수 없습니다. 확실하게, 실현 될 수있는 몇 가지 공간 효율이 있지만, 이들 각각에 대해 최대 절전 모드 및 최대 절전 모드에서 다시 시작하는 데 걸리는 시간이 늘어납니다. 특별한 경우에 메모리 관리자를 수수께끼로 만들 수도 있습니다. RAM을 페이지 단위로 hiberfil.sys에 복사하고 다시 시작하면 그곳에서 복원하는 것이 훨씬 쉽고 빠릅니다.
Jamie Hanrahan

4

여기서 오해는 모든 RAM 내용을 디스크로 교체 할 수는 없다는 것입니다.

사용자 프로세스에는 전용 스왑 공간이 있지만 시스템에는 없습니다. 시스템의 많은 부분이 스왑 아웃되지 않고 스왑 아웃 된 부분이 더 이상 필요하지 않은 메모리에서 지워지기 때문입니다 ( 쓰기 되지 않음 ). 이 경우 시스템에는 커널 및 드라이버와 프로세스를 제어하는 ​​데 사용되는 모든 데이터 (가상 메모리 세그먼트 테이블)가 포함됩니다.

최대 절전 모드 파일은 시스템 상태 를 복제하는 데 필요한 모든 데이터로 작성됩니다 . 점유 된 메모리 만 기록되므로 RAM과 크기가 다릅니다.

기록 된 것과 동일한 데이터를 읽어야하므로 저장 및 복원에 거의 같은 시간이 걸립니다. SSD와 같이 쓰기보다 쓰기 속도가 훨씬 빠른 디스크에서는 복원 속도가 훨씬 빠릅니다.


2

페이지 파일이 RAM보다 작거나 크거나 같은 크기 일 수 있습니다. 어떤 사람들은 (실수로) 그것을 끌 수도 있습니다. 따라서 Microsoft는 RAM과 동일한 크기를 보장하고 시작 및 최대 절전 모드에서 각각 읽고 쓸 수있는 별도의 파일을 만들기로 결정했습니다. Linux의 경우 동일한 논리를 가정합니다.

편집하다:

그리고 harrymc가 그의 답변에서 지적했듯이, 그것은 시스템 상태를 유지하는 것입니다.


Linux에서 스왑 파티션의 크기는 종종 RAM의 두 배입니다. 활성 메모리 페이지 목록 (이력서 중 RAM으로 복사해야하는 유일한 페이지)을 스냅 샷하면 IMHO 속도가 크게 향상됩니다. 나는 페이지를 다음 정확한 시스템을 이전 상태로 가져 및 페이지 미스 이벤트를 줄일 활약 한 것들의 목록을 사용하여 스왑 이미 가정
USR-로컬 ΕΨΗΕΛΩΝ

신뢰성의 대가로 속도? 사람들은 종종 스왑을 해제합니다. 따라서 OS가 RAM 내용을 비교하여 내용을 교환 한 다음 존재하지 않는 내용 만 쓰도록 기대합니까? Hokeypokey 검색보다 전체 RAM 내용을 덤프하는 것이 훨씬 빠르다고 생각합니다.
Sathyajith Bhat

256MB의 RAM이 많을 때 스왑 공간을 두 배로 늘리면 RAM이 두 배가됩니다. 오늘날 8GB의 스왑을 할당하는 것은 (일반적으로) 완전히 우스운 일입니다. 메모리 누수의 경우 시스템 성능에 상당히 해로울 수 있습니다. 최대 절전 기능을 위해 RAM과 동일한 양의 스왑을 할당하는 것은 어리석은 일이며 Linux에서 최대 절전 모드를 사용하지 않는 몇 가지 이유 중 하나입니다.
oKtosiTe

@ sathya : RAM의 전체 내용을 비교하는 것은 아닙니다. 그냥 페이지가 RAM에있는 테이블을 가지고, 스왑, 쓰기, 따라하는 것은 그것을 읽고 페이지 만 나열 복원 복원)
USR-로컬 ΕΨΗΕΛΩΝ
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.