kmap()
커널이나 모듈의 함수가 액세스할 수 있는 일부 주소에 페이지를 매핑할 수 있습니다. page_address()
또한 페이지에 액세스한 주소를 검색할 수도 있습니다 .
이것은 kmap()
highmem 문제를 처리하기 위한 것이라고 되어 있지만,이것문제가 설명되었으며 highmem은 더 이상 x64 시스템에서 문제가 되지 않습니다.
*p
프로세스(예: 사용자 공간 페이지)에서 페이지 구조를 가져오는 경우 거의 동일한 작업을 사용 kmap(p)
하고 수행해 보았습니다.page_address(p)
그들 사이의 차이점은 무엇입니까?
답변1
x86-64에서는 highmem 페이지가 아닌 경우 실제 차이가 없습니다.kmap
대표하다page_address
:
if (!PageHighMem(page))
addr = page_address(page);
그러나 이 두 함수에는 두 가지 다른 목적이 있습니다. 즉, page_address
페이지 주소를 반환하고,만약 있다면; kmap
주소를 반환하기 전에 페이지가 매핑되었는지 확인하고 호출에 의해 균형을 유지해야 합니다 kunmap
.