가상 주소 공간이 실제 주소 공간보다 클 수있는 경우 주소 매핑은 어떻게 메모리에 저장됩니까?


14

물리적 주소 비트가 40 개인 시스템을 사용한다고 가정 해 봅시다. 총 물리적 주소 공간 (바이트 주소 지정 가능 메모리로 가정)은 바이트 또는 1TiB입니다. 또한 가상 주소의 길이가 48 비트 인 경우 실제 메모리의 위치보다 가상 메모리에 사용 가능한 주소가 더 많습니다.240

"과도한"주소는 하드 디스크 위치도 참조 할 수 있기 때문에 이것은 나에게 의미가 있습니다. 그러나 내가 이해하지 못하는 것은 가상 주소와 실제 주소 간의 변환이 어떻게 발생하는지입니다. VAS 위치를 실제 위치에 연결하는 어딘가에 저장된 매핑이 있다고 가정합니다. 물리적 위치보다 더 많은 가상 주소 위치가있는 경우 이러한 모든 매핑을 메모리에 어떻게 저장할 수 있습니까? 각 가상 주소를 저장하려면 최소한 48 비트가 필요하고 매핑 된 실제 위치를 저장하려면 다른 40 비트가 필요합니다. 따라서 모든 위치를 매핑하면 실제 메모리 자체보다 더 많은 메모리를 사용하므로 각 가상 주소의 물리적 매핑에 1 : 1 매핑 만 저장할 수는 없습니다.

여기서 정확히 무엇을 놓치고 있습니까?


적은 양의 메모리와 주소 공간이 있어도 그렇게 할 수 없습니다. 16 비트 실제 주소와 16 비트 가상 주소가 있으면 여전히 1 : 1 매핑을 모두 저장할 수 없습니다!
user253751

2
생각하는 것보다 문제가 더 복잡합니다. 컴퓨터에는 거의 TB의 메모리가 없으므로 실제 메모리는 가상 주소 공간보다 훨씬 적습니다. 다시 한 번 걱정하자 : 각 프로세스마다 완전히 별도의 가상 주소 공간이 있습니다!
Mooing Duck

하드 디스크 위치 외에도 낭비 할 여유가있는 비트 / 공간이 있습니다. 예를 들어 감지되지 않은 오버플로를 방지하기 위해 스택 아래에 넓은 영역을 매핑 해제 할 수 있습니다. 다른 종류의 공격을 차단할 수있는 부분을 무작위로 추출 할 수 있습니다 . 주소가 커널 또는 사용자에 속하는 경우 단일 비트로 표시하려고합니다. 공간의 절반을 낭비하더라도 계속 진행하십시오. 대부분의 교과서는 가상 메모리의 페이징 아웃에 중점을 두지 만 더 많은 것이 있습니다.
Maciej Piechotka

(또한 참고 주소 VA 수도 A 및 어드레스 B는 PA P에도 불구 = B. 동일한 참조하므로 종종 유용 별명!)
마치에이 Piechotka

답변:


26

이 작업을 수행하는 비결은 "페이징"입니다. 하드 디스크에서 실제 메모리로 데이터를 가져올 때는 몇 바이트 만 가져 오지 않습니다. 전체 페이지를 가져옵니다. 4k 바이트는 매우 일반적인 페이지 크기입니다.

각 개별 바이트가 아닌 페이지 만 추적하면 매핑이 훨씬 저렴 해집니다. 48 비트 주소 공간과 4096 바이트 페이지가있는 경우 2 ^ 36 페이지 (대략 690 억 페이지) 중 하나만 추적하면됩니다. 훨씬 쉬워요! 모든 페이지를 찾은 레코드를 "페이지 테이블"이라고합니다.

실제로 1-256TiB의 메모리가 필요한 경우이 페이지 테이블을 저장하기 위해 몇 기가 바이트를 포기하는 것은 그리 중요하지 않습니다. 그러나 실제로는 다중 레벨 페이지 테이블 사용과 같은 작업을 수행 하여 실제로 사용하는 주소 공간의 영역에 대해서만 페이지를 유지하면서 좀 더 효율적입니다.


6
페이지 파일은 메모리 부족으로 재생 된 실제 페이지 프레임의 내용이 포함 된 디스크상의 실제 파일에 대한 Windows 용어로, 내용을 유지해야합니다. 내가 실수하지 않으면 가상 페이지 주소를 실제 페이지 주소에 매핑하는 데이터 구조를 page table 이라고 합니다 .
복원 Monica Monica-ζ--

@hexafraction 당신이 옳다고 생각합니다. 변경했습니다.
Cort Ammon

2
실제 메모리가 큰 경우 페이지 테이블에 필요한 메모리를 줄이는 또 다른 방법은 더 큰 페이지를 허용하는 것입니다. x86에는 4 개의 KiB 페이지와 2/4 MiB 페이지를 혼합하는 옵션이 있습니다.
Nate Eldredge
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.