仮想アドレスから仮想ページIDを取得する

仮想アドレスから仮想ページIDを取得する

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

おすすめ記事