Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/joomla/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux';s系统调用GUI?_Linux_Operating System - Fatal编程技术网

Linux';s系统调用GUI?

Linux';s系统调用GUI?,linux,operating-system,Linux,Operating System,我在学习操作系统。我读到windows有很多管理窗口和GUI组件的系统调用。我已经读到你可以改变你的Linux操作系统的GUI管理器。那么Linux是否有GUI管理的系统调用?GUI在Linux中如何工作?Linux和Windows属于不同的类别;Linux只是一个内核,也就是说,它为我们提供了运行程序所需的基本功能,如线程、内存和进程管理等。Windows是一个完整的操作系统,包括面向用户的组件和许多系统库。一个更恰当的比较是特定的Linux发行版和Windows 在这一点上,发行版作为独立的

我在学习操作系统。我读到windows有很多管理窗口和GUI组件的系统调用。我已经读到你可以改变你的Linux操作系统的GUI管理器。那么Linux是否有GUI管理的系统调用?GUI在Linux中如何工作?

Linux和Windows属于不同的类别;Linux只是一个内核,也就是说,它为我们提供了运行程序所需的基本功能,如线程、内存和进程管理等。Windows是一个完整的操作系统,包括面向用户的组件和许多系统库。一个更恰当的比较是特定的Linux发行版和Windows


在这一点上,发行版作为独立的操作系统,显然可以有任何操作系统组件的不同实现。有些发行版,比如Arch,默认情况下根本没有GUI。也就是说,整个Linux生态系统基本上都使用Xorg和/或Wayland;我建议您研究一下这两种图形用户界面的实现细节。

Linux图形用户界面与Windows图形用户界面有很多不同之处。例如,GUI不是操作系统的一部分,而是操作系统的外部部分;这意味着没有系统调用(不嵌入操作系统中)。毕竟,正如前面的回答所说,Linux是一个内核,这意味着它只是一个真正基本的东西(允许程序执行、内存/线程管理、进程管理,但实际上没有更多)。接下来(例如GUI)将使用软件包添加功能。
例如,这允许在任何Linux发行版(例如CentOS)的最小安装上安装GUI,并且该GUI可以是您想要的(Gnome、KDE…)

我在学习操作系统。我读到windows有很多管理窗口和GUI组件的系统调用。我已经读到你可以改变你的Linux操作系统的GUI管理器。那么Linux是否有GUI管理的系统调用?GUI在Linux中是如何工作的

系统调用(由内核提供)通常是隐藏的(例如,在某些情况下,故意未记录和专有),不应使用。在动态链接库/共享库中,您看到的几乎所有内容实际上都是普通函数。这使得内核的系统调用可以在不破坏一切的情况下进行根本性的更改(因为一切只依赖于动态链接的库/共享库);并减少内核本身所需的功能

例如,;您认为windows拥有的大多数“用于管理windows和GUI组件的系统调用”(内部,在相关DLL中)最终可能只使用一个“send_message()”系统调用(告诉另一个进程GUI您要创建窗口或更改其位置或…)


对于Linux,情况大致相似。内核的系统调用(实际上是有文档记录的,没有任何合理的原因——它违背了SYS-V规范的精神,意味着写得很糟糕的“linux可执行文件”与其他Unix克隆(如FreeBSD、Solaris或OSX)不兼容)存在于使用诸如低级内存管理和原始文件IO和套接字之类的东西;但是(像Windows)内核的系统调用隐藏在共享库的层下,而这些共享库(例如Xlib、GLib、KWindowSystem、Qt等)只使用内核提供的“某物”(文件IO、管道、套接字等)与另一个进程(显示服务器、GUI等)进行对话.

我将以x86为例,因为我更了解x86而不是ARM。另外,我可能会得到一些错误的信息,因为我在回答这个问题时一直在做一些研究。如果我错了,请随时纠正我

系统启动

不久前,Linux使用遗留引导加载程序(GRUB遗留版本)进行引导。GRUB引导加载程序将由BIOS在RAM中的0x7c00处启动,然后从硬盘读取内核。它将遵循多引导规范。multiboot规范提到了计算机在跳转到内核入口点之前需要处于的状态。然后内核将启动第一个进程(init),每个进程都是它的子进程

今天,大多数Linux发行版都使用UEFI引导(也可以使用遗留引导选项)。UEFI应用程序放置在引导分区上,作为GPT ESP(EFI系统分区)连接。启动此EFI应用程序,然后按照Linux引导协议启动Linux。init进程也被systemd所取代。因此,Linux将启动systemd作为计算机的第一个进程。实际上,正如systemd手册页上所述:

systemd通常不由用户直接调用,而是 作为/sbin/init符号链接安装,并在早期启动 靴子

因此,将启动的进程是/sbin/init,但它是到systemd的符号链接。然后,systemd进程将读取硬盘上名为
units
的几个配置文件。这些单位通常是指定要读取的几个单位的目标。因此,目标是指定要读取的几个单位的单位。首先,systemd将读取default.target,其中指定了几个其他单位。其中一些其他单元将启动一些进程,其中包括显示管理器(花哨的术语,意思是登录提示)。最近,Ubuntu启动了Gnome显示管理器(GDM),作为第一个显示程序(GDM.service unit)。此程序将在显示用户登录屏幕()之前启动X服务器

当display manager在用户的计算机上运行时,它会在向用户显示登录屏幕之前启动X服务器,并在用户注销时选择性地重复

登录后,GDM将启动其他几个二进制文件,让您与系统进行交互(实际桌面、用于收集此桌面输入的二进制文件等)。所有这些组件都依赖于X服务器才能正常工作

数字版权管理