【发布时间】:2016-02-12 18:46:01
【问题描述】:
在操作系统中,系统调用和中断有什么区别?所有系统调用都会中断吗?所有中断都是系统调用吗?
【问题讨论】:
-
最小中断示例以及一些 Linux 如何将其用于系统调用:stackoverflow.com/questions/1817577/…
标签: operating-system interrupt system-calls
在操作系统中,系统调用和中断有什么区别?所有系统调用都会中断吗?所有中断都是系统调用吗?
【问题讨论】:
标签: operating-system interrupt system-calls
简答: 它们是不同的东西。
我说通常是外部的,因为有些中断可以由软件引发(软中断)
所有系统调用都是中断吗?视情况而定
所有中断都是系统调用吗?没有
长答案: 操作系统管理 CPU 时间和连接到 CPU 的其他硬件(内存 (RAM)、HDD、键盘等等)。它公开了允许用户程序访问底层硬件的服务,这些是系统调用。通常这些处理分配内存、读取/写入文件、打印文档等。
当操作系统与其他硬件交互时,它通常通过驱动程序层进行,该驱动程序层设置硬件执行的任务并在作业完成后中断,因此打印机可能会在文档打印或运行时中断页外。因此,系统调用通常会导致产生中断。
是否所有系统调用中断 - 取决于它们可能被实现为软中断。因此,当用户程序进行系统调用时,它会导致软中断导致操作系统暂停调用进程,并自行处理请求,然后恢复进程。但是,我引用维基百科,
“对于许多 RISC 处理器,这种(中断)是唯一提供的技术,但是 x86 等 CISC 体系结构支持其他技术。一 例如 SYSCALL/SYSRET、SYSENTER/SYSEXIT(这两种机制是 分别由 AMD 和 Intel 独立创建,但本质上 做同样的事情)。这些是“快速”控制传输指令 旨在快速将控制权转移到操作系统的系统 在没有中断开销的情况下调用"
【讨论】:
您的问题的答案取决于底层硬件(有时是操作系统实现)。我稍后会回到那个。
在操作系统中,系统调用和中断有什么区别?
中断处理程序和系统调用(以及故障处理程序)的目的大致相同:将处理器切换到内核模式,同时防止无意或恶意访问内核结构。
中断由异步外部事件触发。 通过执行代码同步触发系统调用(或故障或陷阱)。
所有系统调用都是中断吗?所有中断都是系统调用吗?
系统调用不是中断,因为它们不是由硬件异步触发的。进程在系统调用中继续执行其代码流,但不在中断中。
话虽如此,英特尔的文档经常将中断、系统调用、陷阱和故障混为一谈,称为“中断”。
某些处理器以大致相同的方式处理系统调用、陷阱、故障和中断。其他公司(尤其是 Intel)提供了不同的方法来实现系统调用。
在以相同方式处理上述所有问题的处理器中,每种类型的中断、陷阱和故障都有唯一的编号。处理器期望操作系统设置指向处理程序的指针向量(数组)。此外,还有一个或多个可供操作系统使用的处理程序来实现系统调用
根据可用处理程序的数量,操作系统可能为每个系统调用提供单独的处理程序,或者使用寄存器值来确定要执行的特定系统函数。
在这样的系统中,可以像调用系统调用一样同步执行中断处理程序。
例如,在 VAX 上,CHMK #4 指令调用第四个内核模式处理程序。在英特尔领域,有一条 INT 指令的作用大致相同。
英特尔处理器支持SYSCALL 机制,该机制提供了一种不同的方式来实现系统调用。
【讨论】: