내가 읽고있다"Linux 가상 메모리 관리자 이해"고먼 지음.
존재하다4장 프로세스 주소 공간 정보, 생성, 잠금, 잠금 해제 등의 VMA 작업을 소개할 때 텍스트에 "수리 영역"이 언급됩니다. "수리"란 정확히 무엇을 의미합니까? 동일한 방식으로 다른 VMA 작업에도 적용됩니까?
자세한 견적:
Linux는 sys_mlock()에 의해 구현된 시스템 호출 mlock()을 통해 특정 주소 범위의 페이지를 메모리에 잠글 수 있으며 해당 호출 그래프는 그림 4.10에 표시됩니다. 높은 수준에서 기능은 간단합니다. 잠길 주소 범위에 대한 VMA를 생성하고 VM_LOCKED 플래그를 설정한 다음 make_pages_present()를 사용하여 모든 페이지가 존재하도록 합니다. sys_mlockall()에 매핑된 두 번째 시스템 호출 mlockall()도 제공됩니다. 이는 호출 프로세스의 각 VMA를 제외하고 sys_mlock()과 동일한 작업을 수행하는 간단한 확장입니다. 두 함수 모두 핵심 함수 do_mlock()을 사용하여 영향을 받은 VMA를 찾고 어떤 함수가 필요한지 결정하는 실제 작업을 수행합니다.수리 지역아래에 설명된 바와 같습니다.
시스템 호출 munlock() 및 munlockall()은 잠금 함수에 대한 결과를 제공하고 각각 sys_munlock() 및 sys_munlockall()에 매핑됩니다. 이러한 기능은 광범위한 검사가 필요하지 않기 때문에 잠금 기능보다 훨씬 간단합니다. 그들은 모두 동일한 do_mmap() 함수를 사용하여수리 지역.
지도를 작성하려는 위치에 기존 존이 존재하는 경우,고치다이를 새로운 매핑에 적용합니다.
이 책에서 사용된 커널 버전은 Linux 2.4.22입니다.
답변1
이 경우 "고정"이란 VMA를 작업 중인 영역과 일치하도록 적절하게 병합하거나 분할하는 것을 의미합니다.
- 잠기거나 잠금 해제할 영역이 해당 영역을 포함하는 VMA보다 작은 경우 VMA를 분할해야 합니다.
- 연속적인 VMA를 병합할 수 있다면 병합되어야 합니다.
당신이 읽고 있는 문서는 오래되었지만 이는 여전히 현재 커널에 적용됩니다. 수정 사항은 다음에서 처리 중입니다.mlock_fixup
, 이는 호출됩니다.vma_merge
그리고split_vma
적절한. 당신은 또한 볼 수 있습니다제거 불가능한 LRU 인프라를 설명하는 문서.