执行了多少次系统调用?

时间:2015-01-17 21:19:52

标签: linux system call

我的问题是关于Linux中的系统调用。我听说过一个简单的程序,只打印" hello world"在提示中最多可能需要50个系统调用。这是正确的吗?如果是这样,所有这些电话会发生什么?

3 个答案:

答案 0 :(得分:2)

您可以使用工具strace打印出系统调用。只需启动任何带有strace的程序,如下所示:strace echo "Hello World"。您可能需要是root用户才能使用它。

以下是manpage for strace

答案 1 :(得分:0)

因此,即使软件很简单,您仍然需要考虑硬件在幕后所发生的一切。在您的示例中,“一个简单的程序仅在提示中显示'hello world'”,因此正在发生很多事情。要开始思考为什么涉及这么多的系统调用,请问一下自己,其底层机制是从磁盘上获取文件并在CPU上执行其指令(其中一部分涉及写入输出流并更改监视器上的像素)。每当我们的用户空间应用程序想要访问这些硬件时,我们都需要进行系统调用。对于hello world,我们需要在hello-world.c文件和stdio.h文件之间创建链接。这将需要大量的系统调用。然后,我们需要将链接的文件映射到内存中(以便处理器可以执行),这需要更多的系统调用。依此类推。

答案 2 :(得分:-1)

在Linux(和Windows)中,通常通过将SysCallId传递到EAX寄存器并执行int 80(软件中断)或SYSENTER(新指令)来执行系统调用

基本上这会将控制转移到内核,然后内核会使用传递的索引找到要在其系统服务表中执行的函数并执行它。