LinuxシリーズシステムのBryantとO'Hallaronの(やや抽象的な)ページテーブルモデルによると、各ページテーブルエントリ(PTE)には3つの値のうちの1つを保持するアドレスフィールドがあります。 (1)物理アドレス(実際にはページ番号)は、(2)ページを見つけることができる長期ストレージデバイスの対応する場所識別子、または(3)未割り当てページを示す0です。ページが長期ストレージからメインメモリに置き換えられたとします。このアカウントでは、カーネルは長期保存アドレス(2)を物理アドレス(1)に置き換えます。書いた場合、元の長期保存アドレスをPTEに復元する方法は何ですか?
答え1
PTE代表仮想ページ。言ったように、仮想ページがメインメモリに存在するとき、PTEのアドレスフィールドは物理ページフレーム番号(PFN)を保持します。
各物理そのページはstruct page
次のとおりです。
次
flags
は:struct address_space *mapping;
ページキャッシュ内のページ(ほとんどのシステムではほとんどのページ)の場合、
mapping
ページをバックアップするファイルにアクセスするために必要な情報を指します。ただし、ページが匿名ページ(スワップでサポートされているユーザー空間メモリ)の場合は、構造をmapping
指しますanon_vma
[...]-構造化ページにさらにコンテンツを挿入する,LWN.net
その後、このpage→index
フィールドはswp_entry_t
匿名ページの構造を保存するために使用されます。 (ページキャッシュ内のページの場合はファイルオフセットを保存します。)
swp_entry_t
スワップデバイスのインデックスとスワップデバイス内の場所を保存します。
2004年にこれがどのように機能するかについての具体的な詳細は次のとおりです。Linux仮想メモリマネージャについて - スワップ管理、Mel Gormanによって書かれました。
答え2
ページキャッシュのpedファイル、スワップ、またはパッシブマッピングファイルについて尋ねるのか、あなたの質問で完全には明確ではないので、すべてmmap()
答えます。
mmap でない場合、削除は削除です。ページがきれいになったら、簡単に削除できます。ファイルバックアップがないページがメインメモリから削除された場合、通常はアドレスを復元する必要はありません。次回ファイルにアクセスすると、ページエラーが新しいキャッシュエントリに転送されるためです。スワップの場合も同様のことが起こります。スワップのページにエラーが発生し、同じページを後で削除する必要がある場合は、次に新しいスワップアドレスを指定して設定できます。ページはPTEに存在し、きれいです。 (または次の場合はスワップキャッシュを使用してください)。 *
mmapの場合、ライフサイクルはシステムコールによって制御されますmmap()
。範囲は明示的に仮想メモリの連続した部分にマッピングされ、mmap()
このマッピングのメタデータ(参照カウントサポートFD、オフセット、サイズなど)が関連する仮想メモリ領域(音楽管理協会)に格納されます。ページが削除されても、VMAはマッピング情報を保持するため、次回のアクセス時にカーネルがどこで間違っているかがわかります。
*実際には、スワッピングや一般的なページングアクティビティは通常ページレベルでは発生しませんが、クラスタスワッピングや先読み配置など、一部の低粒度で発生することがよくあります。