커널 논리 주소

커널 논리 주소

로드/저장 명령에 사용될 때 코어 논리 주소가 MMU를 통과합니까? MMU는 커널 가상 주소와 다르게 커널 논리 주소를 처리합니까? 같은 이유를 제시해주세요.

MMU가 두 주소를 비슷한 방식으로 처리한다면 핵심 논리 주소의 이점은 무엇입니까?

메모리를 High 메모리와 Low 메모리로 나누면 어떤 이점이 있나요?

답변1

로드/저장 명령어는 가상 메모리에만 주소를 지정할 수 있습니다. 그들은 모두 MMU를 통과합니다. MMU는 항상 현재 페이지 테이블을 사용하여 주소를 변환합니다.

Linux는 32비트 CPU에서만 메모리를 "낮음"과 "높음"으로 구분합니다. 32비트 가상 주소는 4GB 내의 다양한 위치 중 하나를 식별합니다. 4GB를 초과하는 다양한 물리적 메모리 위치에 액세스하려면 임시 가상 매핑을 사용해야 합니다.

공식 문서를 참조하세요:linux-5.0/documentation/vm/highmem.rst

일반적인 조언은 32비트 시스템에서 8GiB 이상을 사용하지 말라는 것입니다. 비록 더 많은 용량이 귀하와 귀하의 작업량에 적합할지라도 거의 스스로 해결해야 합니다. 커널 개발자가 문제가 발생하더라도 신경 쓸 것이라고는 기대하지 마십시오. .

내레이터: "커널 논리 주소"는 메모리가 부족한 영구 맵 내부를 가리키는 가상 주소를 나타냅니다. 이 용어는 특정 Linux 책에서 사용됩니다. 해당 책의 맥락 밖에서는 사용되지 않습니다.

질문: 매우 넓은 물리적 메모리 영역을 영구적으로 매핑하는 것(예: "낮은 메모리")의 "이점"은 무엇입니까?

답변: 이는 대부분의 Linux 커널 코드가 "고용량 메모리"를 처리하는 데 따른 추가적인 복잡성과 성능 오버헤드를 피할 수 있음을 의미합니다. 즉, 임시 매핑을 생성해야 합니다. 이는 높은 메모리가 오래된 32비트 CPU에만 관련된다는 점을 고려하면 특히 중요합니다.

대부분의 커널 코드는 낮은 메모리에 할당될 수 있습니다. 대부분의 커널 코드에는 많은 RAM이 필요하지 않습니다. 예외적으로 Linux에서는 페이지 캐시를 높은 메모리에 할당할 수 있습니다. 따라서 페이지 캐싱과 관련된 커널 코드는 이를 인식해야 합니다.

소켓(네트워크) 버퍼도 highmem을 지원하지 않습니다. 예:https://www.airship.com/blog/linux-kernel-tuning-for-c500k/

관련 정보