⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 util.c

📁 是关于页面替换算法的代码模拟
💻 C
字号:
/*
 * util.c	
 * Copyright (c) Inst. of Machine Intelligence at Nankai University
 */
#include "util.h"
#include "mmu.h"
#include <stdlib.h>

void check_pgdir()
{
	extern char memory[];                                             
	extern	phyaddr_t	cpu_cr3;	
	pde_t* pgdir = (pde_t*)(cpu_cr3 + memory);
	pte_t* pgtable = NULL;

	int i = 0;
	int j = 0;
	
	//////////....for循环检测虚拟地址0xe0000000之后256M地址对应的页表,只读
	for (i = 0; i < 64; i++)            //只需64项顶级页表项和64项二级页表项                          
	{
		assert((pgdir[PDX(0xe0000000) + i] & (PTE_P | PTE_W)) == PTE_P);   //验证顶级页表项是存在且只读的
		pgtable = (pte_t*)(PTE_ADDR(pgdir[PDX(0xe0000000) + i]) + memory);
		for (j = 0; j < 1024; j++)
		{		
			assert((pgtable[j] & (PTE_P | PTE_W)) == PTE_P);               //验证每个二级页表中的每个页表项是存在且只读的
		}
	}
	
	for (i = 0; i < 64; i++)
	{
		assert((pgdir[PDX(0xf0000000) + i] & (PTE_P | PTE_W)) == (PTE_P | PTE_W)); //验证顶级页表项是存在且可写的
		pgtable = (pte_t*)(PTE_ADDR(pgdir[PDX(0xf0000000) + i]) + memory);
		for (j = 0; j < 1024; j++)
		{	
			assert((pgtable[j] & (PTE_P | PTE_W)) == (PTE_P | PTE_W));    //验证每个二级页表中的每个页表项是存在且可写的
		}
	}
	printf("Checking Page Table Succeeded\n");         //若验证成功,则输出提示信息“检测成功!”
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -