operating-system - gem5 se模式如何执行具有操作系统依赖的程序?
问题描述
Gem5 se 模式是非 os 模式,但我能够在其上执行行锤代码,该代码具有具有 os 依赖关系的命令。但是如果 se 模式下没有 os,那么它们如何在 se 模式下执行。
解决方案
大多数用户态允许的指令只是做通常的事情,即稍微改变 CPU 的状态:触摸寄存器 + 缓存 + 内存。
然后当到达系统调用指令时,系统调用被转发到实际采取行动的主机。
但是,这也需要操作系统进行一些额外的记账,这就是为什么每个系统调用都必须单独实现的原因。
如果我想学习这个:-) 我会看看一个简单的系统调用的实现,比如 brk:
- https://github.com/gem5/gem5/blob/5d442571eff5116551609ee7a3b63a3b9d27ff45/src/arch/x86/linux/process.cc#L223
- https://github.com/gem5/gem5/blob/5d442571eff5116551609ee7a3b63a3b9d27ff45/src/sim/syscall_emul.cc#L212
我也会研究 QEMU 用户模式,我认为这将是一个类似的概念,但可能有更多可用的材料。
也许有更好理解的人可以更详细地解释,并进一步注释代码的特定部分。
推荐阅读
- android-studio - 华为模拟器驱动
- android - 图片已经关闭。CameraX 分析仪
- sql - 日期的 SQL 游标转换
- node.js - 如何在节点js中从模态窗口获取数据到主窗口
- python-3.x - 根据用户提供的迭代次数在循环中获取用户输入
- python - Python 闭包中有什么,习惯 OCaml 的人有什么注意事项?
- vb.net - 如何在不锁定 UI 的情况下处理我的 Windows 窗体上的“动画”?
- objective-c - 用于发送电子邮件的脚本桥 - 错误:对象尚未添加到容器中
- php - 在 Wordpress 管理员登录后强制重定向
- javascript - TypeError:从服务器获取数据时无法读取未定义的属性“地图”