在操作系统中,系统调用和中断之间有什么区别?

时间:2015-11-11 16:00:10

标签: operating-system interrupt system-calls

在操作系统中,系统调用和中断之间有什么区别?所有系统调用都是中断吗?所有中断都是系统调用吗?

2 个答案:

答案 0 :(得分:17)

简答: 它们是不同的东西。

  • 系统调用是由OS上运行的软件调用服务 由操作系统提供。
  • 中断通常是 外部硬件组件,通知CPU /微处理器需要在软件中处理的事件(通常是驱动程序)。

我说通常外部,因为某些中断可以通过软件引发(软中断)

所有系统调用都是中断吗?取决于

所有中断都是系统调用吗?否

答案很长: 操作系统管理CPU时间和连接到CPU的其他硬件(内存(RAM),HDD,键盘等)。它公开了允许用户程序访问底层硬件的服务,这些是系统调用。通常这些处理分配内存,读/写文件,打印文档等等。

当操作系统与其他硬件交互时,它通常通过驱动程序层执行此操作,该驱动程序层设置完成作业后硬件执行和中断的任务,因此打印机可能会在文档打印或运行后中断没有页面。因此,系统调用通常会导致产生中断。

所有系统调用是否都会中断 - 取决于它们是否可以实现为软中断。因此,当用户程序进行系统调用时,它会导致软中断,导致操作系统暂停调用进程,并自行处理请求,然后恢复进程。但是,我引用维基百科,

  

"对于许多RISC处理器,这(中断)是唯一提供的技术,但是   诸如x86之类的CISC架构支持其他技术。一   例如SYSCALL / SYSRET,SYSENTER / SYSEXIT(这两个机制是   分别由AMD和英特尔独立创建,但实质上   做同样的事)。这些是"快速"控制转移指令   旨在快速将控制权转移到系统的操作系统   呼叫没有中断的开销"

答案 1 :(得分:1)

您的问题的答案取决于底层硬件(有时是操作系统实现)。我稍微回过头来看。

中断处理程序和系统调用(以及错误处理程序)的目的大致相同:将处理器切换到内核模式,同时防止对内核结构的无意或恶意访问。

异步外部事件触发中断。 通过执行代码同步触发系统调用(或故障或陷阱)。

那就是你第一个问题的答案。

您的部分问题的答案是系统调用不是中断,因为它们不是由硬件异步触发的。进程继续在系统调用中执行其代码流,但不在中断中执行。

也就是说,英特尔的文档通常会将中断,系统调用,陷阱和错误混为一谈,因为"中断。"

有些处理器以相同的方式处理系统调用陷阱,故障和中断。其他人(尤其是英特尔)提供了不同的方法来实现系统调用。

在以相同方式处理所有上述内容的处理器中,每种类型的中断,陷阱和故障都有唯一的编号。处理器期望操作系统设置指向处理程序的指针的向量(数组)。此外,还有一个或多个处理程序可供操作系统实现系统调用

根据可用处理程序的数量,OS可能为每个系统调用都有一个单独的处理程序,或者使用寄存器值来确定要执行的特定系统函数。

在这样的系统中,可以像调用系统调用一样同步执行中断处理程序。

例如,在VAX上

CHMK#4

指令,调用第4个内核模式处理程序。在英特尔的土地上,他们是一个

INT

大致相同的指令。

英特尔处理器支持SYSCALL机制,该机制提供了一种不同的方式来实现系统调用。