陷阱处理程序,异常处理程序和中断处理程序与系统调用有何不同?

问题描述 投票:0回答:1

考虑到Linux环境,它们之间有什么区别?

系统调用与普通函数调用有何不同?

c linux system-calls interrupt-handling
1个回答
2
投票

根据wikipedia的说法,TRAP是一个例外。根据您的谈话对象,例外情况有不同的定义。在通用形式中,中断是例外。例外可能是页面错误(代码或数据),对齐,未定义指令,除以零等。

一般来说,它们都非常相似。他们将上下文切换到OS以处理问题,从而导致寄存器保存(用户空间到OS上下文切换)和可能的进程上下文切换,具体取决于请求或环境。转换到OS时,不同的MMU保护(内存的CPU视图)生效,并使用不同的堆栈。在大多数情况下,导致故障的指令是在切换发生时执行的指令。

中断的不同之处在于任何用户空间指令都可能被中断。对于大多数其他人来说,只有特定类别的指令可能会导致错误。这对于需要以原子方式(对线程,进程或全局系统)执行操作的编译器和库具有分支。更多细节实际上取决于使用的CPU。


考虑到Linux环境,它们之间有什么区别?

这种方式几乎无法回答。 Linux版本,CPU版本以及这些版本的定义会影响答案。但是,我认为以上是一个很好的概念指南。

系统调用与普通函数调用有何不同?

普通函数调用不会转换为“内核空间”。进入内核空间时,许多访问权限会更改。通常这有一些物理硬连线进入CPU。然而,Linux'mm'和'io'层绝对是不同的,可能需要代码来实现它。它还可以取决于“系统调用”的作用。在某些情况下,Linux已经过优化,因此不需要系统调用(从一个版本到另一个版本)。例如,参见vdso man page。在其他情况下,C库或其他机制可能会避免系统调用;例如DNS名称缓存等

© www.soinside.com 2019 - 2024. All rights reserved.