High Memory(사용자 공간) 및 HighMem(커널 공간)

High Memory(사용자 공간) 및 HighMem(커널 공간)

각 프로세스에는 사용자 공간(높은 메모리)과 커널 공간(낮은 메모리)이라는 2개의 메모리 영역이 있습니다. 커널 공간에서 처음 896MB는 커널 코드를 매핑하는 데 사용됩니까(정확히 1GB는 아님)? 이는 사용자 공간 응용 프로그램이 시스템 호출이나 커널과 관련된 모든 것을 수행할 때 커널이 시스템 호출을 수행하기 위해 커널 공간을 참조한다는 것을 의미합니다.

커널 공간(고급 메모리(사용자 공간) 액세스에 사용됨)에 예약된 128MB는 모두 사용자 공간 메모리 영역을 참조합니까? 그렇다면 커널 프로세스가 이 영역을 참조하여 모든 사용자 공간에 액세스할 수 있다는 것이 사실입니까?

그래서 커널 공간에서는 이 영역을 highmem이라고 부르죠?

답변1

"높은 메모리"와 "낮은 메모리"는 프로세스의 가상 주소 공간이 아닌 실제 메모리에 적용됩니다.

프로세스의 가상 주소 공간에서 사용자 공간은 이 선형 주소 공간의 처음 3GB를 차지하고 커널 공간은 이 선형 주소 공간의 4GB를 차지합니다.

처음 896MB의 커널 공간(커널 코드뿐만 아니라 해당 데이터도 포함)은 첫 번째 896MB의 물리적 메모리에 "직접" 매핑됩니다. 가상 커널 공간의 896MB 부분의 선형 주소와 실제 메모리의 해당 주소 사이에 항상 0xc0000000의 오프셋이 있다는 점에서 "직접적"입니다(그러나 MMU가 활성화되고 페이지 테이블 항목이 실제로 사용된다는 점에 유의하세요). 이를 위해).

가상 커널 공간의 마지막 128MB 부분은 매핑된 물리적 "상위 메모리"의 일부(>896MB)입니다. 따라서 한 번에 128MB 이하의 "상위 메모리"만 매핑할 수 있습니다.

참조: "Linux 커널 이해", 제3판 - "8.1.3. 메모리 영역" 및 "8.1.6. 대용량 메모리 페이지 프레임의 커널 매핑" 섹션.

답변2

알아채다:-메모리 파티셔닝은 이전 Linux 시스템에서만 발생합니다(32비트) 자세한 내용은 아래 댓글을 참조하세요.

높은 메모리와 낮은 메모리:

  • 메모리가 부족합니다:논리 주소는 커널 공간의 메모리에 존재합니다. 접하게 될 거의 모든 시스템에서 모든 메모리는 부족 메모리입니다.
  • 높은 메모리:논리 주소는 커널 가상 주소용으로 예약된 주소 범위를 벗어나므로 해당 주소에 대한 메모리가 없습니다. 이는 커널이 액세스하려는 물리적 메모리 세그먼트의 임시 매핑을 사용하여 시작해야 함을 의미합니다.

커널은 가상 주소를 두 부분으로 나눕니다.사용자주소 공간과핵심주소 공간. 커널의 코드와 데이터 구조는 해당 공간에 맞아야 하지만 커널 주소 공간의 가장 큰 소비자는 실제 메모리의 가상 매핑입니다. 따라서 커널은 직접 액세스할 수 있는 메모리를 저장하기 위해 자체 가상 주소가 필요합니다. 따라서 커널이 처리할 수 있는 최대 물리적 메모리 양은 가상 주소 공간의 커널 부분에 매핑될 수 있는 양에서 커널 코드에서 사용하는 공간을 뺀 양입니다.

여기에 이미지 설명을 입력하세요.

관련 정보