gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:06:17 26 4
gpt4 key购买 nike

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

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

最佳答案

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

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

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


Considering Linux environment, what is the difference between them?

这在某种程度上几乎是无法回答的。 Linux 版本、CPU 版本以及您对它们的定义会影响答案。不过,我认为以上是一个很好的概念指南。

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

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

关于c - 陷阱处理程序、异常处理程序和中断处理程序与系统调用有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42679263/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com