x64 시스템에서 kmap과 page_address의 차이점은 무엇입니까?

x64 시스템에서 kmap과 page_address의 차이점은 무엇입니까?

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.

관련 정보