异常控制流详解
前言
异常控制流(Exceptional Control Flow, ECF) 是指程序执行过程中,因硬件或软件事件触发的、偏离正常顺序 / 分支 / 循环逻辑的控制流跳转机制。它区别于由指令直接定义的 “正常控制流”,是操作系统实现硬件交互、错误处理、多任务并发的核心基础,贯穿硬件层和软件层两个维度。
异常处理
注:
陷阱最重要的用途是在用户程序和内核之间提供一个像过程一样的接口,叫做系统调用
例如,执行
syscall指令会导致一个到异常处理程序的陷阱
故障可能能够被故障处理程序修正,否则则会返回到内核中的
abort例程终止通常是一些硬件错误
Linux 中的异常
故障和终止:
除法错误:Unix 不会从除法错误中恢复,而是选择终止程序
一般保护故障:通常是因为一个程序引用了一个未定义的虚拟内存区域,或者因为程序试图写一个只读的文本段。
缺页:处理程序将适当的磁盘上虚拟内存的一个页面映射到物理内存的一个页面,然后重新执行故障指令。
机器检查:检测到致命的硬件错误时发生,不返回。
系统调用:
比如,C 语言可以用
syscall函数调用任何的系统调用,通过一条称为syscall的陷阱指令来提供的。注意,不是通过栈传递参数:%rax包含系统调用号,%rdi、%rsi、%rdx、%r10、%r8、%r9最多 6 个参数;在返回时,会破坏%rcx、%r11这两个寄存器,%rax包含返回值。
参考资料:
《深入理解计算机系统》P501~507
- 感谢你赐予我前进的力量
赞赏者名单
因为你们的支持让我意识到写文章的价值🙏
本文是原创文章,采用 CC BY-NC-ND 4.0 协议,完整转载请注明来自 LinJHS
评论
匿名评论
隐私政策
你无需删除空行,直接评论以获取最佳展示效果

