有人可以解释一下“你好世界!”吗?与现代 Linux 或 Unix 机器上的现代软件和硬件堆栈有关吗?$ strace
对以下 helloworld.c 程序生成的二进制文件执行 a以write()
系统调用结束。我希望有人能够指导我们这些想成为专家的人了解当字节“Hello World!”时操作系统、加载的设备驱动程序以及 CPU、GPU、PCIe 和 USB-C 端口(连接到外部显示器)等硬件之间发生的所有交互。是从 helloworld 程序的虚拟内存中复制的。最好知道各种软件和硬件事务的发起者是谁,它们如何交互,如中断、总线事务等。
#include<stdlib.h>
#include<stdio.h>
int main() {
puts("Hello World!");
return EXIT_SUCCESS;
}
注:这个问题在某些方面可能显得过于宽泛,但实际上非常有针对性。它只是询问“Hello World!”的 12 个字节的流程。从我们的 helloworld 程序的虚拟内存到连接到显示器的 USB-C 端口。
答案1
X11:
程序 -> 虚拟控制台 -> 终端应用程序 -> 终端应用程序调用 GTK/Qt 渲染例程 -> X11 渲染 -> Xorg 的合成器(可选) -> Xorg 的 GPU 驱动程序(现在通常是 KMS) -> 内核 GPU 驱动程序 -> 显示
韦兰:
程序 -> 虚拟控制台 -> 终端应用程序 -> 终端应用程序调用 GTK/Qt 渲染例程 -> Wayland 的缓冲区 -> Wayland 合成器 -> 内核 GPU 驱动程序 -> 显示