执行多少系统调用?

问题描述 投票:-1回答:3

我的问题是关于Linux中的系统调用。我听说一个简单的程序仅在提示符下显示“ hello world”,可能需要多达50个系统调用。这是正确的吗?如果是,那么所有这些调用中都发生了什么?

linux system call
3个回答
3
投票

您可以使用工具strace打印系统调用。只需使用strace开头的任何程序启动它,就像这样:strace echo "Hello World"。您可能需要成为root用户才能使用它。

这里是manpage for strace


0
投票

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


-1
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.