




免费预览已结束,剩余4页可下载查看
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
TLB异常处理Exercise1 源码阅读 machine.h machine.h用于描述在Nachos系统中运行用户程序的数据结构。1)、定义内存管理的页大小与磁盘扇区管理的磁盘扇区大小相同均为128Bytes。可用的物理内存页数为32个,因此目前Nachos的内存最大为4KB。2)、定义异常类型的枚举结构,其中包括无异常NoException,系统调用异常SyscallException,页面转换出错异常PageFaultException,试图访问只读页面异常ReadOnlyException,总线错导致转用户程序页面时出错异常BusErrorException,页面访问没有对齐或超出了页面的大小异常AddressErrorException,加减法时整数溢出异常OverflowException,非法指令访问异常IllegalInstruException。3)、定义用于存储用户程序指令的寄存器号,r29为StackReg,用于存储用户程序的堆栈指针;r31为RetAddrReg,用于存放过程调用的返回地址;r32为HiReg,用于存放乘法结果的高32位;r33为LoReg,用于存放乘法结果的低32位;r34为PCReg,用于存放当前PC指针;r35为NextPCReg,用于存放下一条执行语句的PC指针;r36为PrevPCReg,用于存放上一条执行语句的PC指针;r37为LoadReg,用于存放需要延迟载入的寄存器编号;r38为LoadValueReg,用于存放需要延迟载入的寄存器值;r39为BadAddReg,用于存放当出错陷入(Exception)时用户程序的逻辑地址。4)、定义类Instruction,此类定义了系统的指令。对象为指令的二进制表达方式、指令的操作码,指令的三个寄存器的值,指令立即数。操作为将指令的二进制表达方式分析成为系统需要的指令操作码5)、定义类Machine,此类定义了用户程序模拟宿主机的硬件,目的是为了执行用户程序。此类所执行的功能为:Machine(bool debug)函数用于初始化用于跑用户程序的硬件模拟机制。void Run()用于运行一个用户程序;int ReadRegister(int num)根据所传入的寄存器编号读取此CPU寄存器中的内容;void WriteRegister(int num, int value)将所提供的value值写入到指定num的CPU寄存器中;void OneInstruction(Instruction *instr)用于执行一个用户指令;void DelayedLoad(int nextReg, int nextVal)用于执行一次延迟载入;bool ReadMem(int addr, int size, int* value)和bool WriteMem(int addr, int size, int value)是向指定内存地址addr中读出或写入内容;void RaiseException(ExceptionType which, int badVAddr)用于执行出错陷入,进行指定异常的处理程序;void Debugger()为执行用户程序调试器;Nachos像其他OS一样,不能直接调用用户程序的地址,用户程序的地址均为逻辑地址而不是物理地址,因此Nachos需要将用户程序的逻辑地址转换为系统的真正物理地址,这就需要此类所拥有以下对象:char *mainMemory,用于模拟内存;int registersNumTotalRegs为CPU寄存器的模拟;TranslationEntry *tlb 为TLB页面转换表的对象;TranslationEntry *pageTable 为线性页面转换表的对象;unsigned int pageTableSize 定义了线性页面转换表的大小。machine.cpp 用于模拟用户程序的运行。Machine:Machine(bool debug)1)、初始化所有的系统寄存器内存储值为0;2)、如果使用TLB的话,初始化TLB表,并设置TLB表内的每一个表项有效值为FALSE,设置线性页面转换表为空3)、如果不使用TLB,设置TLB、线性页面转换表为空Machine:RaiseException(ExceptionType which, int badVAddr)函数1)、将出错陷入(Exception)时用户程序的逻辑地址放入r39中;2)、执行一次延迟载入,以结束程序中所有运行这的指令;3)、通过中断调用,设置程序状态为管态;4)、调用异常处理函数ExceptionHandler(which),将异常处理转入到ExceptionHandler函数中进行处理5)、通过中断调用,设置程序状态为目态。translate.h 类TranslationEntry定义了用户程序从逻辑地址转换到物理地址的数据结构线性页面地址转换和TLB页面地址转换,都需要一张地址转换表,地址转换表是由若干个表项(Entry)组成的,TranslationEntry定义的就是每一个表项,每个表项记录程序逻辑页到内存实页的映射关系,和实页的使用状态、访问权限信息。int virtualPage记录用户程序的虚拟地址,int physicalPage记录用户程序经过转换后的物理地址,bool valid用于记录此条表项是否已经进行了地址转换,TRUE为已经进行了转换,则下次进行地址转换时此条表项会被忽略。bool readOnly用于设置页表项的属性,如果为TRUE的话,则只能进行读不能进行改写。bool use每当页表项被引用或修改后硬件都会改写此项,以记录此页表项是否被使用过;bool dirty 用于记录也表象所是否被更改过,TRUE为更改过。translate.cpp ExceptionType Machine:Translate(int virtAddr, int* physAddr, int size, bool writing)参数分析:传入参数virtAddr为用户程序的逻辑地址,physAddr用于存储经过转换后得到的物理地址,size为用于读写的内存大小, writing值如果为TRUE则检查TLB中所有只读的表项功能实现:1)、进行判断用户的逻辑地址是否对齐,如果size为4但虚拟地址为3,或size为2而虚拟地址为1,则术语逻辑地址没有对齐,返回用于定义页面访问没有对齐或超出了页面的大小的异常AddressErrorException。2)、确保TLB表或线性页面转换表有且只有一项不为空。3)、通过虚拟地址与页大小相除得到虚拟页表数vpn,通过虚拟地址与页大小相余得到虚拟页表的偏移量offset。4)、如果系统使用的是线性页面转换表,首先判断vpn的大小是否大于等于pageTableSize,如果是,则说明虚拟页数过大,需要返回页面访问没有对齐或超出了页面的大小的异常AddressErrorException;其次判断此vpn所对应的页表项是否有效,如果无效,则返回页面转换出错异常PageFaultException;如果均无问题,得到相应的页表表项。5)、如果系统使用的是TLB转换表,则需要查找TLB表,如果查找到对应表项,则得到相应的页表表项;否则返回页面转换出错异常PageFaultException6)、如果所得到的相应的页表表项的信息是只读的,而函数参数bool writing值为TRUE,则返回试图访问只读页面异常ReadOnlyException,7)、如果所得到的相应页表表项中的物理地址大于实际现存的物理地址,则返回总线错导致转用户程序页面时出错异常BusErrorException。8)、如果函数参数bool writing值为TRUE,设置表项中的dirty标志,最终返回系统无异常信息NoException。bool Machine:ReadMem(int addr, int size, int *value)此函数的功能是读出指定用于虚拟地址空间内一定大小的内容,存储在value中。参数分析:传入参数add为用户程序的逻辑地址,size为需要读出的字节数,value用于暂存读出的内容功能实现:1)、将addr,size以参数的形式传入到Translate函数中去,并获得系统的异常,如果异常不是NoException,则转入到RaiseException函数进行相应的异常处理函数中去2)、如果系统异常是NoException,则说明通过Translate函数的处理,已经过了用户所提提供的虚拟地址空间得到了此指令所在的具体物理地址空间,根据参数size的大小(分1,2,4字节三种大小),将其转换成为相应的类型,通过machine读取该物理地址空间内的内容,存放在value锁指向的空间中exception.cpp 在Nachos中,系统调用其它异常陷入的入口处理函数都是ExceptionHandler函数,只是陷入的类型为SyscallException。在test目录下的start.s模块中描述了具体的系统调用过程,以Halt系统调用为例,在test目录下Halt.c中执行Halt()函数,系统调用HALT的系统调用,.globl Halt.ent HaltHalt: addin $2, $0, SC_HaltsyscallJ $31.end Halt其中Halt: addin $2, $0, SC_Halt为将SC_HALT放入到r2寄存器中。进入到EXceptionHandler函数中,首先从R2寄存器中取出系统调用的编号,并根据不同的系统调用编号进入其相应的系统调用异常处理操作中。其中对于有参数的系统调用,MIPS编译决定了参数传递的规则为:参数1r4寄存器,参数2r5寄存器,参数3r6寄存器,参数4r7寄存器。Exercise 2 TLB MISS异常处理 被选中的代码为Nachos现有对TLB异常判断的代码,循环查找TLB页表,如果没有找到一个TLB表项,使得表项信息有效,表项所存储的虚页号与所传入的VPN号一致,则会返回PageFaultException异常,表明此时TLB发生错误,所要查找的虚拟地址并没有在TLB的页表内。对于TLB中PageFaultException异常的处理,在ExceptionHandler函数内加入代码,代码如下图所示:ExceptionHandler根据所传入进来的which参数判断异常类型,如果异常类型是PageFaultException时,获得BadVaddrReg寄存器内所存储的当出错陷入(Exception)时用户程序的逻辑地址。Exercise 3 置换算法由于Nachos默认调用的不是TLB,而是使用线性页面地址转换,因此目前所有对TLB的算法都是无法实现的。但是我不知道在哪一个Makefile里加入对USE_TLB的定义,因此只能将Machine的构造函数修改为如下形式:即将使用线性页面地址转换的定义注释掉。而在每次调用用户程序之前,Nachos都需要调用Addrspace类对用户程序的地址空间进行初始化,因为原有的系统使用的是线性页面地址转换,所以在这里需要修改Addrespace的代码如下所示: 即将在AddrSpace构造函数中初始化好的pageTable对象,赋值给Machine类中的tlb对象,而之前是将pageTable对象赋值给了Machine类的pageTable函数。 在本次实验中,我采用的调度算法是,最少匹配成功的页表项最先被替换出去的思路。对于每一个页表项均增加一个整数型变量,记录这个页表项被寻找到的次数,每选中一次使这个页表项的命中率增加1,在出现页面转换出错异常的时候,寻找整个页表中页表项命中率最低的页表项,将新的页面替换此命中率最低的页面。首先在ExceptionHandler函数中的处理PageFaultException部分,增加此代码:即每次系统出现PageFaultException异常后,系统首先获得出错用户程序的虚拟地址,将此虚拟地址address以形参的形式传入到TLBSwap函数中,TLBSwap(int address)为我在Machine类中新添加的函数,用于为TLB机制实现页面替换算法。其实现方法为:1)、对TLB的数据结构TranslateionEntry类增加一项以记录每一个页表项的命中率,其代码如下所示:2)、对TranslationEntry对象的初始化进行修改,增加对hitRate的初始化,其每次初始化时值均为0,代码修改如下图所示,需要修改Machine构造函数和AddrSpace构造函数。3)、增加TlBSwap函数,进行没有命中的页表项的置换。首先需要判断这次PageFaultException异常是不是TLB异常,如果tlb对象为空,则系统当前使用的是线性页面地址转换方法,直接退出程序;如果tlb不为空,则进入到tlb置换算法中。首先计算出此用户程序的虚拟页表号vpn和用户程序的偏移量offset,之后遍历整个TLB页表,寻找到命中率即hitRate最低的页表项,之后将此命中率最低的页表项内的virtualPage对象置换为现有的vpn,并将hitRate重新设置为0,完成此次页表项的置换。其代码如下图所示:4)、修改ReadRem和WriteRem函数,当进行了转换后所得到的exce
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 云南省元谋县2025年上半年事业单位公开遴选试题含答案分析
- 云南省禄劝彝族苗族自治县2025年上半年事业单位公开遴选试题含答案分析
- 河北省文安县2025年上半年公开招聘城市协管员试题含答案分析
- 河北省巨鹿县2025年上半年公开招聘城市协管员试题含答案分析
- 2025年房屋过户产权转移备案服务合同
- 2025版股权收购居间服务合同规范市场秩序合同范本
- 2025版国际贸易担保贷款合同
- 2025版砂石料行业碳排放权交易合同样本
- 2025年陕西房屋租赁合同书(含押金管理)
- 2025版学生违纪行为教育管理协议书
- 班级小组建设
- 2025河南上市公司白皮书
- 客服人员岗位月度绩效考核表
- 北京版英语1-6年级单词表
- 清洁消毒隔离技术课件
- 2025年云南省高考生物试卷真题(含答案)
- 中国美容仪器市场调研及发展策略研究报告2025-2028版
- 2025年浙江省山海联盟中考数学模拟试卷(五)
- Q-CSG1211016-2025 光伏发电站接入电网技术规范
- JG/T 162-2009住宅远传抄表系统
- 人工智能与无人机课件
评论
0/150
提交评论