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

How are trap handlers, exception handlers, and interrupt handlers different from system calls?

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

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

根据wikipediaTRAP是一个例外。例外情况的定义因与您交谈的对象而异。在一般形式中,中断是异常。异常可能是页面错误(代码或数据)、对齐、未定义的指令、被零除等。

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

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

  • Difference between library and system calls

Considering Linux environment, what is the difference between them?

这几乎无法确定地回答。 Linux 版本、CPU 版本以及您对这些版本的定义会影响答案。但是,我认为以上内容是一个很好的概念指南。

How is a system call different from a normal function call?

正常的函数调用不会转换为 'kernel space'。许多访问权限在进入内核时发生变化 space。通常这有一些物理硬接线到 CPU。但是 Linux 'mm' 和 'io' 层绝对不同,可能需要代码才能做到这一点。它还可以取决于 'system call' 的作用。在某些情况下,Linux 已经过优化,因此不需要系统调用(从一个版本到下一个版本)。例如参见 [​​=14=]。在其他情况下,C 库或其他机制可能会避免系统调用;例如 DNS 名称缓存等