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();
}