우리는 Linux 커널에서 구조체 페이지에 대한 포인터를 수신하고 페이지 프레임의 가상 주소를 출력하는 다음 함수를 알고 있습니다.
void * page_address(struct page *page)
그렇다면 예약된 버전에 가상 메모리 주소를 가져와 해당 가상 페이지 ID를 출력하는 기능이 있는지 궁금합니다. (페이지가 디스크로 스왑될 수 있다고 가정하므로 출력은 struct page
메모리 내 데이터 구조가 아니어야 합니다.)
감사해요. 제가 틀렸거나 중복된 질문이 있으면 정정해 주세요.
답변1
여러 가상 주소 번역 게시물을 읽은 후 발견했습니다.가상 페이지 번호번역의 중간 결과이며 이 게시물에 언급되어 있습니다.
예는 다음과 같습니다.https://stackoverflow.com/a/45128487/10971650.
여기서 관련된 것은 변수입니다. vpn
여기서 관련된 것은 가상 페이지 번호입니다. (저는 이 기능을 사용합니다.페이지 크기 가져오기대신에. )
#include <unistd.h>
#include <stdint.h>
uintptr_t get_virtual_page_number (uintptr_t vaddr) {
return vaddr / getpagesize();
}