높은 메모리(사용자 공간) 및 highmem(커널 공간)

높은 메모리(사용자 공간) 및 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비트) 자세한 내용은 아래 댓글을 참조하세요.

높고 낮은 메모리:

  • 메모리 부족 :커널 공간에 논리 주소가 존재하는 메모리입니다. 접하게 될 거의 모든 시스템에서 모든 메모리는 부족 메모리입니다.
  • 높은 메모리:커널 가상 주소를 위해 별도로 설정된 주소 범위를 벗어났기 때문에 논리 주소가 존재하지 않는 메모리입니다. 이는 커널이 액세스하려는 물리적 메모리 조각의 임시 매핑을 사용하기 시작해야 함을 의미합니다.

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

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

관련 정보