以下で使用されるデータ構造について質問しています。
Linux がすべての物理ページをどのように追跡するのか疑問に思っています。をどのように保持するかについては心配していませんvm_area_struct
。それらすべてを格納するために使用されるデータ構造は何ですか?
また、仮想アドレスが与えられたときに、特定の物理ページをどのように検索するのでしょうか?
基数ツリー?赤黒木?ハッシュ表?何?
ありがとう。
以下で使用されるデータ構造について質問しています。
Linux がすべての物理ページをどのように追跡するのか疑問に思っています。をどのように保持するかについては心配していませんvm_area_struct
。それらすべてを格納するために使用されるデータ構造は何ですか?
また、仮想アドレスが与えられたときに、特定の物理ページをどのように検索するのでしょうか?
基数ツリー?赤黒木?ハッシュ表?何?
ありがとう。
カーネルは、struct page
物理ページごとに 1 つずつ、構造体の配列を保持します。
仮想アドレスは、(ハードウェアによって定義された) ツリーであるページ テーブル構造をたどることによって検索されます。
から: include/linux/mm_types.h
/* * システム内の各物理ページには構造体ページが関連付けられており、現時点でそのページを使用しているものを追跡します。どのタスクがページを使用しているかを追跡する方法はないことに注意してください。ただし、それがページキャッシュ ページである場合は、rmap 構造により、誰がそのページをマッピングしているかがわかります。*/