2013-11-02 3 views
1

가상 메모리 관리, 특히 주소 변환에 대한 질문이 있습니다.메모리 주소 변환에 메모리가 추가적으로 필요합니까?

응용 프로그램이 실행되면 CPU는 가상 메모리 주소가 포함 된 명령을 받아 페이지 테이블을 통해 실제 주소로 변환합니다.

제 질문은 페이지 테이블이 메모리 블록 옆에 있기 때문에 CPU가 단일 메모리 액세스 명령어에서 메모리를 두 번 액세스해야한다는 것입니다. 대답이 '아니요'인 경우 실제로 어떻게 작동합니까? 나는 어느 부분을 놓쳤는가?

아무에게도 이것에 대한 세부 정보를 줄 수 있습니까?

답변

1

보통 대답은 예 또는 아니오가 아닙니다.

최악의 경우, (일종의) 메모리에 실제로 저장된 페이지 테이블을 살펴 봐야하는데, 이것은 반드시 하나의 조회가 아니라 복수 조회가 될 수 있습니다 (예 : two-level table 참조). 위키 피 디아 출신).

그러나 일반적으로이 페이지 테이블에는 translation lookaside buffer이라는 하드웨어 지원이 제공되며, 이는 본질적으로 페이지 테이블의 캐시이므로 조회 프로세스는 this image에서 볼 수 있습니다. 조회가 성공하면 실제 가져 오기를 계속하고, 실패하면 앞에서 설명한 페이지 보행으로 넘어 가서 캐시를 업데이트합니다.

이 하드웨어 지원은 일반적으로 네트워크 처리에 가장 많이 사용되는 CAM (Content Addressable Memory)으로 구현되지만 여기에서도 매우 유용합니다. 그것은 주소를 기반으로하지만 룩업을하지는 않지만 'content'또는 임의의 일반 키를 기반으로하는 메모리 구성 요소입니다 (키가 연속적이어서 숫자가 증가하지 않아야 함). 이 경우 키는 가상 주소가되며 결과 메모리 조회는 실제 주소가됩니다. 이 CAM은 별도의 구성 요소이며 매우 빠르므로 가상 주소 공간 변환을위한 추가 메모리 오버 헤드가 발생하지 않는 한 상태를 유지할 수 있습니다.

전체 페이지 테이블을 CAM에 넣지 않는 이유는 무엇입니까? 간단히 말해서 CAM은 꽤 비싸고 더 중요하게는 에너지를 많이 소비하므로 너무 커지게 만들고 싶지는 않습니다 (우리는 1KW로 실행해야하는 랩탑을 원하지 않을 것입니다).

0

간혹 있습니다.

MMU에는 TLB (Translation Lookaside Buffer)라고하는 가상 대 물리적 주소 매핑의 캐시가 들어 있습니다.

해당 페이지가 TLB (TLB 미스)에 없으면 관련 페이지 테이블을 주 메모리에서 해당 캐시로 먼저로드해야하므로 추가 메모리 액세스가 필요합니다.

마지막으로 페이지를 찾을 수없는 경우 CPU에 트랩이 발행되고 (페이지 오류) CPU가 문제를 해결할 수 있습니다. 메모리를 할당하고, 파일에서 조각을로드하고, 공간을 바꾸거나 이와 유사한 작업을 수행합니다.

이 작업 방법에 대한 세부 사항은 아키텍처마다 다르며 TLB 미스 또한 TLB를 구성하는 CPU와 관련이 있지만 대부분의 경우 자동입니다. (그러나 컨텍스트 스위치를 수행 할 때 CPU는 TLB를 플러시해야하고, 예를 들어 새로운 프로세스를 위해 새로운 페이지 테이블을로드해야 함)

자세한 정보 예. 여기 https://www.kernel.org/doc/gorman/html/understand/understand006.html