PA3 - 穿越时空的旅程: 批处理系统
穿越时空的旅程
概览
需求
程序内部的执行流切换:函数A和函数B可以简单地通过call/jal
指令实现;
程序之间的执行流切换:因为安全问题,程序Prog1和程序Prog2的执行流切换只能交给操作系统和硬件来共同实现。
为了满足程序之间的执行流切换,需要硬件和操作系统(或AM)共同协作。
实现目标
通过软硬件协作,实现程序的执行流切换
下面本节具体例子来帮助理解:通过am-tests
中的yield test
测试触发一次自陷操作!
实现的功能概览
- 实现“硬件响应机制”
- 实现CTE的异常处理功能
注意
本节中的描述中,“操作系统”其实就是一个管理各种硬件资源和软件资源的软件。在本节“穿越时空的旅程”中,硬件就是NEMU本身,而与硬件直接交互的“操作系统”软件就是库函数AM。所以实现最终目标的方法,就是通过实现NEMU和AM的相关指令和函数,来实现程序的执行流切换.
硬件的异常响应机制
为满足程序之间的执行流切换,硬件提供了名为“异常响应机制”的功能。
- 扩充寄存器
- 添加指令
CTE的异常处理功能
异常入口地址是硬件和操作系统(或AM)约定好的, 接下来的处理过程将会由操作系统来接管
初始化CTE环境
cte_init()
异常处理
__am_asm_trap
- 保存上下文
- 异常处理函数
__am_irq_handle()
- 回复上下文
- 异常返回指令