nachos Lab3 TLB替换算法

本文详细介绍了nachos操作系统在Lab3中的存储管理机制,特别是页表和TLB(Translation Lookaside Buffer)的工作流程。在处理缺页异常时,实现了LRU替换算法,并提到了FIFO和NRU算法的选项。文中强调启用TLB时需在Makefile中设置DUSE_TLB,并指出TLB与页表需协同工作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Lab3 最近才开始做,过今天又要交了,本来还想凑合凑合混一下。结果昨天得知一个噩耗,看来还是要认真做啊。

首先介绍一下nachos 的存储管理机制。

当我们运行./nachos -x ../test/halt时,运行了一个用户程序。

基本过程是:

 OpenFile *executable = fileSystem->Open(filename); 

 首先打开该执行文件。

 AddrSpace *space;  

space = new AddrSpace(executable);  

创建一个用户空间,该用户空间包含一个页表,记录了虚拟页号和物理页号的映射情况。

在创建用户空间时所做的事情有从文件中获取代码段和数据段。

初始化该页表,由于一开始内存中只能存放一个进程,所以虚拟地址跟物理地址是一样的。

然后根据虚拟地址到物理地址的映射情况,将文件的代码段和数据段拷贝到内存。

 space->InitRegisters();

初始化CPU的寄存器,让它指向需要执行的第一条指令。寄存器指向的地址为虚拟地址,

所以在执行之前,我们需要先将其转化为物理地址。

space->RestoreState();

将进程的页表拷贝到CPU中维护。

 machine->Run();

该方法,循环的从寄存器中获得一条指令并运行。


1 修改exception.cc,添加缺页异常的处理。

else if(which == PageFaultException)
    {	
	//获得虚拟地址
	int addr = machine->ReadRegister(BadVAddrReg);
	//tlb页面置换算法,这里用LRU置换法
	
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值