系统调用如何工作

Roc*_*der 15 c operating-system process system-calls

系统调用如何工作?
系统调用期间会发生什么操作?
有各种各样的系统调用open , read, write, socket等我想知道他们一般如何工作?

hac*_*cks 26

简而言之,这是系统调用的工作原理:

  • 首先,用户应用程序设置系统调用的参数.
  • 参数全部设置完毕后,程序执行"系统调用"指令.
  • 该指令导致异常:导致处理器跳转到新地址并开始在那里执行代码的事件.

  • 新地址处的指令保存用户程序的状态,找出所需的系统调用,调用实现该系统调用的内核中的函数,恢复用户程序状态,并将控制权返回给用户程序.

调用open()系统调用的用户应用程序的直观说明:

在此输入图像描述

应该注意的是,系统调用接口(它用作操作系统可用的系统调用的链接)调用OS内核中的预期系统调用,并返回系统调用的状态和任何返回值.调用者不需要知道系统调用的实现方式或执行期间的操作.
另一个例子:AC程序调用printf()库调用,它调用write()系统调用

在此输入图像描述

有关更详细的说明,请参阅CH-1中的第1.5.1节和来自操作系统概念的 CH-2中的第2.3节.

  • 这是一个非常好的和准确的解释。我只想补充一点,中断的CPU指令是“int 0x80”和“syscall”。第二个更现代、更快。CPU 知道跳转到哪里(新地址)的原因也是因为操作系统之前已经设置了它(事先告诉 CPU)。同样,在中断指令之后,CPU 将模式从用户模式切换到内核模式,因为在用户模式下,CPU 不允许您直接触摸硬件。 (3认同)
  • 这个 [link](http://www.tldp.org/LDP/khg/HyperNews/get/syscall/syscall86.html) 也有帮助 (2认同)