仮想メモリのページングを理解しようとしています。プロセスの最初のステップを表す次のコード スニペットがあります。ここでsearch_tbl
は、提供された論理アドレスを物理メモリ内の場所にマップするエントリがページ テーブルに既にあるかどうかを確認するために、各論理アドレスのメイン プログラムから呼び出されます。vfn
仮想フレーム番号です。
編集済み: この実装は意味がありますか? それとも間違った道を進んでいますか?
どんな助け/提案も大歓迎です。ありがとうございました。
uint vfn_bits;//virtual frame number
static tbl_entry **tbl;
uint page_bits = log_2(pagesize);
vfn_bits = addr_space_bits - page_bits;
tbl = calloc(pow_2(vfn_bits), sizeof (tbl_entry*));
tbl_entry *search_tbl(uint vfn) {
uint index = vfn;
if (tbl[index] == NULL) {
/* Initial miss */
tbl[index] = create_tbl_entry(vfn);
}
return tbl[index];
}
tbl_entry *create_tbl_entry(uint vfn) {
tbl_entry *te;
te = (tbl_entry*) (malloc(sizeof (tbl_entry)));
te->vfn = vfn;
te->pfn = -1;
te->valid = FALSE;
te->modified = FALSE;
te->reference = 0;
return te;
}