我想了解虚拟内存分页。我有以下代码片段,代表该过程的第一步。这里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;
}