系统调用,消息传递和中断之间有什么关系?


15

我正在阅读有关过程管理的Wikipedia文章。我的重点是Linux。我无法弄清楚系统调用,消息传递和中断之间的关系和区别。它们全都用于向内核请求资源和服务的进程吗?

文章中的某些语录和其他一些语录:

  1. OS有两种可能的方法可以在程序执行期间重新获得对处理器的控制,以使OS执行取消分配或分配:

    1. 该进程发出系统调用(有时称为软件中断);例如,发生I / O请求,请求访问硬盘上的文件。
    2. 发生硬件中断;例如,按下键盘上的一个键,或定时器用完(用于抢先式多任务处理)。
  2. 在用户模式下执行的程序可以通过两种技术来请求内核的服务:

    * System call
    * Message passing
    
  3. 中断是表示需要注意的异步信号,或者是表示需要更改执行方式的软件中的同步事件。

    硬件中断使处理器保存其执行状态并开始执行中断处理程序。软件中断通常以指令集中的指令的形式实现,这导致上下文切换到类似于硬件中断的中断处理程序。


2
很好的问题!
斯蒂芬·吉梅内斯

Answers:


12
  1. 所有现代操作系统都支持多任务。这意味着系统能够同时执行多个进程。要么是伪并行(当只有一个CPU可用时),要么是当今多核CPU并行(一个任务/内核)。

    让我们以只有一个CPU可用的简单情况为例。这意味着,如果您同时执行两个不同的过程(例如,Web浏览器和音乐播放器),则系统实际上不能同时执行它们。发生的情况是CPU一直在从一个进程切换到另一个进程。但这发生的速度非常快,因此您永远不会注意到它。

    现在,假设在执行这两个过程时,您按下了重置按钮(坏男孩)。CPU将立即停止所有操作,然后重新引导系统。恭喜:您产生了一个中断。

    当您要编程并想从CPU寻求服务时,情况也是如此。不同之处在于,在这种情况下,您执行软件代码-通常是正在执行系统调用(例如,fopen用于打开文件)的库过程。

    因此,1描述了两种不同的方法来引起CPU的注意。

  2. 大多数现代操作系统都支持两种执行模式:用户模式和内核模式。默认情况下,操作系统在用户模式下运行。用户模式非常有限。例如,所有I / O均被禁止。因此,不允许您从硬盘上打开文件。当然,这绝不会真正发生,因为当您打开文件时,操作系统会透明地从用户模式切换到内核模式。在内核模式下,您可以完全控制硬件。

    如果您想知道为什么存在这两种模式,最简单的答案就是保护。基于微内核的操作系统(例如MINIX 3)的大多数服务都在用户模式下运行,因此危害较小。整体内核(例如Linux)几乎所有服务都以内核模式运行。因此,在MINIX 3中崩溃的驱动程序不太可能导致整个系统崩溃,而这在Linux中并不罕见。

    系统调用是单片内核(共享数据模型)中用于从用户模式切换到内核模式的原语。消息传递是微内核(客户端/服务器模型)中使用的原语。更准确地说,在消息传递中,系统程序员还使用系统调用来引起CPU的注意。消息传递仅对操作系统开发人员可见。使用系统调用的单片内核速度更快,但可靠性较差,而使用消息传递的微内核速度较慢,但​​具有更好的故障隔离能力。

    因此,2提到了从用户模式切换到内核模式的两种不同方式。

  3. 为了进行修改,创建软件中断(即陷阱)的最常见方法是执行系统调用。另一方面,中断完全由硬件产生。

    当我们中断CPU(通过软件或硬件)时,它需要将其当前状态保存在某个位置,即它所执行的进程,并在该点停止了,否则,当切换回该进程时,它将无法恢复该进程。 。这就是所谓的上下文切换,这很有意义:在关闭计算机以执行其他操作之前,首先需要确保保存了所有程序/文档等,以便您可以从停止该操作的位置继续进行操作。下次您将其打开:)

    因此,第3节解释了执行陷阱或中断后需要做什么以及这两种情况有多相似。


1
谢谢!(1)在1中,您表示从CPU引起注意的两种方法是软件中断(带有系统调用示例的程序)和硬件中断(复位键示例)吗?(2)在2中,您是否表示系统调用和消息传递是软件中断的两种方式?(3)软件中断的目的是为了向进程请求内核服务和资源,而硬件中断的目的不是吗?如果是,硬件中断的目的是什么?
全部

1
(1)正确。(2)那么,系统调用和消息传递是可以用于实现进程间通信的两种不同技术。但是,这两者都是基于软件的,因此,请执行陷阱(软件中断)以吸引CPU的注意力,这是事实。(3)从某种意义上说是的。要求内核服务的一个示例是执行一个库过程(将转换为1个或多个系统调用),就像creat创建一个新文件一样。中断的一个示例是打印机向CPU发送信号以通知其打印已完成。
sakisk 2011年

1
谢谢!关于(3),您在某种意义上是说不?硬件中断和软件中断的一般用途是什么?
StackExchange为所有

1
系统复位不是中断;它不保存状态以在以后恢复。
psusi 2011年

1
@faif reset和NMI(不可屏蔽中断)是CPU上的两个不同的引脚。后者导致中断,这意味着保存状态并跳转到处理程序。前者将初始化CPU(故意放弃所有状态),就像上电时一样(上电时自动置位复位)。由于中断的部分定义是保存状态,因此复位无法满足该定义。
psusi 2011年

9

系统调用,消息传递(如Wikipedia文章中所述)和中断都是导致上下文切换或从用户模式切换到内核模式的所有因素。如您所知:

  • 内核模式:程序具有内存的平面或真实视图,并且程序可以不受限制地直接自由地对所有内存和所有硬件设备进行读写。

  • 用户模式:程序具有内存的虚拟视图,程序无法自由读取/写入所有内存,也不能直接读取/写入硬件设备。为了获得更多的内存或访问硬件设备,用户模式程序必须调用内核。系统调用和消息传递是执行此操作的两种方法。

系统调用涉及执行一条特定的CPU指令或一组指令,这些指令使CPU跳转(首先在堆栈上保存返回地址)到预定义的地址(不可写到用户模式),并将CPU从用户模式移到内核模式(环3,以Intel架构响0)。

硬件中断的作用大致相同,它们使CPU跳转(首先在堆栈上保存返回地址)到预定义的地址,并将CPU从用户模式转移到内核模式。因此,在许多CPU中,相同的机制可以由软件调用(称为“软件中断”),并且可以用于CPU调用。

消息传递暗示着(至少对我而言)内核是一个“正在运行的进程”,它将接收消息流,并且存在一个将发送此类消息的用户模式可访问功能。也可能是“发送”功能只是将值推到堆栈上,而下一次内核控制时(无论是进程阻塞还是中断发生),它将消息从堆栈弹出并相应地调度到内部例程。

在微内核体系结构中,实际的“内核”非常小,内核提供的大多数功能都移到了“服务器”进程中,所有这些进程可能在多CPU系统上同时运行,而这种情况可能更多。比普通的旧系统调用方法有用。将“消息”解释和路由到适当的内核“服务器”将是微内核的少数工作之一。


3
内核模式使用与用户模式相同的页表,并提供相同的虚拟内存视图。不同之处在于,它可以访问标记为仅限内核模式的页面。
psusi 2011年

5

消息传递是一个进程向另一个进程发送消息的高级概念。它是通过系统(内核)调用实现的,该调用要求内核将消息传递给其他进程。系统调用要求内核为该进程执行各种服务。它们是通过软件中断/系统陷阱实现的,该陷阱使CPU在堆栈上保存一些状态,以便稍后返回,然后切换到内核模式并跳转到内核处理程序。

硬件和软件中断都会导致CPU保存状态,切换到内核模式并跳转到该中断的已定义处理程序。区别在于,硬件中断在需要引起注意时由外部硬件生成,例如键盘表示已按下某个键。然后,键盘处理程序可以去读取键盘IO端口以查看按下了什么键,并采取适当的措施,然后返回被中断的程序。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.