8

系统调用——它是一条产生中断的指令,使操作系统获得对处理器的控制。

因此,如果正在运行的进程发出系统调用(例如创建/终止/读/写等),则会产生一个中断,导致内核控制处理器,然后执行所需的中断处理程序例程。正确的?

那么任何人都可以告诉我处理器如何知道该指令应该阻止进程,进入特权模式并带来内核代码。

我的意思是,作为一名程序员,我只需键入 stream1=system.io.readfile(ABC) 或其他内容,这将转换为打开和读取文件 ABC。

现在是什么监控这个进程的执行,cpu里有什么神通可以检测到这个吗?

从我读过的内容来看,一个处理器一次只能执行一个进程,那么监视器程序在哪里运行?

当它不在运行状态时,内核如何监视是否进行了系统调用!

或者计算机是否有一个系统调用指令表,在执行任何指令之前它会与之进行比较?

请帮忙

感谢你

4

5 回答 5

8

内核不监视进程以检测系统调用。相反,该进程会生成一个中断,将控制权转移给内核,因为根据指令集参考手册,这是软件生成的中断所做的事情。

例如,在 Unix 上,进程将系统调用号填入eax并运行一条int 0x80指令,该指令会生成中断0x80。CPU 通过查看中断描述符表以找到内核处理该中断的处理程序来对此作出反应。这个处理程序系统调用的入口点。

因此,在 32 位 x86 Linux中调用_exit(0)(原始系统调用,而不是刷新缓冲区的 glibc函数):exit()

movl  $1, %eax   # The system-call number.  __NR_exit is 1 for 32-bit
xor   %ebx,%ebx  # put the arg (exit status) in ebx
int   $0x80
于 2012-09-01T10:35:51.060 回答
2

让我们分析您提出的每个问题。

  1. 是的,你的理解是正确的。

  2. 看,如果任何进程/线程想要进入内核,只有两种机制,一种是通过执行 TRAP 机器指令,另一种是通过中断。通常中断是由硬件生成的,因此任何其他进程/线程想要进入内核它都会通过 TRAP。所以像往常一样,当进程执行 TRAP 时,它会向内核发出中断(主要是软件中断)。与陷阱一起,您还将提到系统调用号,这将作为内核内部中断处理程序的输入。根据系统调用号,您的内核在系统调用表中找到系统调用函数并开始执行该函数。当内核开始处理中断时,内核将在 cs 寄存器中设置模式位以提示处理器,因为当前指令是特权指令。这样,您的处理器将知道当前指令是否具有特权。一旦你的系统调用函数完成它的执行,你的内核将执行 IRET 指令。这将清除 CS 寄存器中的模式位,以告知从现在开始向内的任何指令都来自用户模式。

  3. 处理器内部没有神奇的力量,在用户和内核上下文之间切换让我们认为处理器是一个神奇的东西。它只是一个硬件,能够以非常高的速率执行大量指令。

4..5..6。所有这些问题的答案都在上述案例中得到了解答。

我希望我在一定程度上回答了你的问题。

于 2016-08-04T21:02:08.317 回答
0

您正在寻找的是mode bit. 基本上有一个寄存器叫做cs register. 通常它的值设置为 3(用户模式)。对于特权指令,内核将其值设置为 0。查看此值,处理器就知道它是哪种指令。如果您有兴趣挖掘更多内容,请参阅这篇出色的文章

其他参考。

模式位在哪里

于 2020-09-22T14:18:21.033 回答
0

中断控制器向 CPU 发出中断已经发生的信号,传递中断号(因为中断被分配了优先级以处理同时中断),因此中断号以确定要启动的处理程序。CPU 跳转到中断处理程序,当中断完成时,程序状态重新加载并恢复。

[参考:Silberchatz,操作系统概念第 8 版]

于 2017-04-24T04:10:14.057 回答
-1

现代硬件支持多个用户会话。如果您的硬件支持多用户模式,我提供了一种称为中断的机制。中断基本上停止当前代码的执行以执行其他代码(例如内核代码)。执行哪个代码由传递给中断的参数决定,由发出中断的代码决定。硬件将增加运行级别,将内核代码加载到内存中并强制 cpu 执行此代码。当内核代码返回时,它再次直接通知硬件并且运行级别降低。然后,硬件将恢复中断前的 cpu 状态,并将 cpu 设置为启动中断的代码的下一行。完毕。由于代码在主动调用硬件,而硬件又主动调用内核,内核本身不需要进行任何监控。

旁注:尽量让你的问题简短。明确你想要什么。第一个答案对于您发布的问题是正确的,只是您没有很好地表达它。明确表明您是该主题的新手,需要对基本概念进行详细解释,而不是解释到目前为止您所理解的内容并且不要使用大写锁定。

请接受 cnicutar 提供的答案。谢谢你。

于 2014-10-08T19:39:06.627 回答