高级操作系统——Nachos内存管理(TLB异常处理)

对系统
machine.h:
1:定义页表大小,页表最大内存
2:异常种类
3:寄存器种类

machine.cc
1:将寄存器,页表和快表,全置为空 Machine
2:处理异常 RaiseException
3:调试 Debugger
4:输出所有寄存器的值DumpState
5:写入或者读出寄存器的值ReadRegister, WriteRegister

exception.cc:
1:处理异常ExceptionHandler
对用户:

progtest.cc:
1:开启用户程序 StartProcess (调用addrespace),初始化寄存器,页表,快表
2:控制台交互 ConsoleTest

addrespace:
1:分配用户的代码段,初始化数据段,未初始化数据段,栈段等地址,真正初始化寄存器,页表,快表,将代码和数据写入内存
2:初始化machine寄存器 InitRegisters 利用machine.cc 的WriteRegister
3:页表地址装载至machine RestoreState

translate.h:
1:定义页表项 TranslationEntry(标志位)

translate.cc:
1:将虚拟地址转换为物理地址 Translate
2:虚拟地址上写value WriteMem
3:虚拟地址上读value ReadMem

Exercise 2 TLB MISS异常处理
修改code/userprog目录下exception.cc中的ExceptionHandler函数,使得Nachos系统可以对TLB异常进行处理(TLB异常时,Nachos系统会抛出PageFaultException,详见code/machine/machine.cc)。

1:首先查找页表是在translate.cc的 Translate()中,部分代码如下

	if (entry == NULL) {				
    	    DEBUG('a', "*** no valid TLB entry found for this virtual page!\n");
    	    return PageFaultException;							
	}

这里已经抛出了一个异常,无需修改
2:明确谁接收了Translate返回的return PageFaultException;。观察代码,可以看到是
translate.cc的ReadMem()和:WriteMem(),即通过虚拟地址寻找时,没有找到对应的TLB的entry,部分代码如下

exception = Translate(addr, &physicalAdd
  • 3
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值