- 1、本文档共14页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
四川大学操作系统课的件week09实验
BY 蒋佳良 NACHOS用户程序 Nachos 对内存、寄存器以及CPU的模拟 Nachos用户进程运行机制 实验习题 Nachos 机器模拟很重要的部分是内存和寄存器的模拟。Nachos 寄存器组模拟了全部32 个MIPS 机(R2/3000)的寄存器,同时加上有关Nachos 系统调试用的8 个寄存器,以期让模拟更加真实化并易于调试 Nachos 对内存、寄存器以及CPU的模拟 寄存器名 编号 描述 StackReg 29 用户程序的堆栈指针 RetAddrReg 31 存放过程调用的返回地址 HiReg 32 存放乘法结果的高32位 LoReg 33 存放乘法结果的低32位 PCReg 34 当前PC指针 NextPCReg 35 下一条执行语句的PC指针 PrevPCReg 36 上一条执行语句的PC指针(调试用) LoadReg 37 需要延迟载入的寄存器编号 LoadValueReg 38 需要延迟载入的寄存器值 BadAddReg 39 当出错陷入(Exception)时用户程序的逻辑地址 系统陷入有两大类原因 1、进行系统调用陷入 2、系统出错陷入 系统调用陷入在用户程序进行系统调用时发生。系统调用可以看作是软件指令,它们有效地弥补了机器硬件指令不足 系统出错陷入在系统发生错误时发生,比如用户程序使用了非法指令以及用户程序逻辑地址同实际的物理地址映射出错等情况。不同的出错陷入会有不同的处理,比如用户程序逻辑地址映射出错会引起页面的重新调入,而用户程序使用了非法指令则需要向用户报告等等。 在用户程序运行过程中,会有很多系统陷入核心的情况 SyscallException 系统调用陷入 PageFaultException 页面转换出错 ReadOnlyException 试图访问只读页面 BusErrorException 总线错,转换用户程序页面时出错 AddressErrorException 页面访问没有对齐,或者超出了页面的大小 OverflowException 加减法时整数溢出 IllegalInstruException 非法指令访问 Machine 类中需要注意的函数 RaiseException 方法 语法: void RaiseException (Exception which, int badVAddr) 参数: which: 系统出错陷入的类型 badVAddr: 系统出错陷入所在的位置 功能: 当系统检查到出错陷入时调用,通过调用ExceptionHandler 来处理陷入(见exception.cc)ExceptionHandler 目前对所有的陷入都不进行处理,需要进一步加强。 实现: 调用 ExceptionHandler。 int ReadRegister(int num); // 读出寄存器中的内容 void WriteRegister(int num, int value); // 向一个寄存器赋值 Run 方法 语法: Void Run () 功能: 执行在模拟内存内的用户程序。 实现: 1. 将系统当前状态设置为用户模式 2. 取出一条指令(调用 OneInstruction 方法) 2.1 将该指令进行解码,分析出其中的操作代码、寄存器和立即数 2.2 根据操作代码将该指令模拟执行 2.3 时钟前进一个单位(Tick) 3. 转向 2,直到用户程序执行完毕。 Nachos 对内存、寄存器以及CPU的模拟 Nachos用户进程运行机制 实验习题 在第三章第三节中 Nachos 线程管理中提到,Nachos 的用户进程由两部分组成:核心部分和用户程序部分。核心部分同一般的系统线程没有区别,它共用了Nachos 的正文段和数据段,运行在宿主机上;而用户程序部分则有自己的正文段、数据段和栈段,它存储在Nachos 的模拟内存中,运行在Nachos 的模拟机上。 一、用户程序空间(文件address.cc, address.h) 二、系统调用(文件exception.cc, syscall.h, start.s) 前面提到过,系统陷入有两大原因:即系统调用和系统出错陷入。虽然计算机硬件本身提
文档评论(0)