考虑到Linux环境,它们之间有什么区别?
系统调用与正常函数调用有何不同?
答案 0 :(得分:2)
根据UnholeSheep, TRAP 是个例外。根据您的谈话对象,例外情况有不同的定义。在通用形式中,中断是例外。例外可能是页面错误(代码或数据),对齐,未定义指令,除以零等。
一般来说,它们都非常相似。他们将上下文切换到OS以处理问题,从而导致寄存器保存(用户空间到OS上下文切换)和可能的进程上下文切换,具体取决于请求或环境。转换到OS时,不同的MMU保护(内存的CPU视图)生效,并使用不同的堆栈。在大多数情况下,导致 fault 的指令是在切换发生时执行的指令。
中断的不同之处在于任何用户空间指令都可能被中断。对于大多数其他人来说,只有特定类别的指令可能会导致错误。这对于需要以原子方式(对线程,进程或全局系统)执行操作的编译器和库具有分支。更多细节实际上取决于使用的CPU。
考虑到Linux环境,它们之间有什么区别?
这种方式几乎无法解决。 Linux版本,CPU版本以及这些版本的定义会影响答案。但是,我认为以上是一个很好的概念指南。
系统调用与正常函数调用有何不同?
正常的函数调用不会转换到内核空间'。进入内核空间时,许多访问权限会更改。通常这有一些物理硬连线进入CPU。然而Linux' mm'和' io'层是绝对不同的,可能需要代码来实现它。它还取决于系统调用的内容'确实。在某些情况下,Linux已经过优化,因此不需要系统调用(从一个版本到另一个版本)。例如,参见Difference between library and system calls。在其他情况下,C库或其他机制可能会避免系统调用;例如DNS名称缓存等