为什么X Window系统使用服务器?


25

我从未真正理解为什么窗口系统必须具有服务器。为什么桌面环境,显示管理器和窗口管理器需要xorg-server?显卡顶部是否只有抽象层?为什么窗口系统采用客户端-服务器模型?通过命名管道进行进程间通信会不会更简单?


2
命名管道将不会更简单,因为管道仅用于单向通信。如果要双向通信,请使用套接字而不是管道。实际上,某些较新的系统默认情况下使用命名的(unix域)套接字而不是TCP套接字。例如,在Ubuntu 14.04上,默认情况下X配置为不侦听TCP套接字。
kasperd 2014年

5
Unix和X在PC变得如此强大和廉价之前就已经发展起来,这通常使您将许多相当简单的终端连接到一台或几台更强大的计算机上。这种划分是通过X进行的:您拥有“终端”,即带有图形卡的廉价廉价计算机,仅运行X服务器,并从鼠标/键盘收集输入并绘制屏幕...实际程序(X-客户端)在一台或几台功能更强大的计算机上运行-由使用终端的所有用户共享。因此,将X分为两部分(可以分开运行)是有意义的。
巴德·科珀罗德

@BaardKopperud X Terminals是X Window开始流行的几年之后,因此它们不是X Window如此构建的原因。X从运行比X服务器更多的Unix工作站开始。
jlliagre

Answers:


39

我认为您已经注意到需要某种“服务器”。每个客户端(桌面环境,窗口管理器或窗口程序)都需要与其他所有客户端共享显示,并且他们需要能够在不了解硬件细节或不知道谁在使用显示的情况下显示内容。因此,X11服务器通过提供IPC接口来提供您提到的抽象和共享层。

X11可能可以在命名管道上运行,但是命名管道不能做两件事。

  • 命名管道仅在一个方向上通信。
  • 如果两个进程开始将数据放入命名管道的“发送”端,则数据将混合在一起。

实际上,大多数X客户端使用称为UNIX域套接字的“新的和改进的”命名管道与服务器通信。它非常类似于命名管道,不同之处在于它使进程可以双向交流,并且可以跟踪谁在说什么。这些是网络必须要做的事情,因此UNIX域套接字使用与提供网络通信的TCP / IP套接字相同的编程接口。

但是从那里开始,真的很容易说:“如果我将服务器运行在与客户端不同的主机上怎么办?” 只需使用TCP套接字而不是UNIX套接字,就可以使用voila:一种比Windows RDP早几十年的远程桌面协议。我可以ssh访问四个不同的远程主机,并synaptic在每个远程主机上运行(图形程序包管理器),所有四个窗口都出现在本地计算机的显示屏上。


2
X在SysV系统上使用命名管道,其中命名管道是双向的,包括Solaris和SCO Unixes。
alanc 2014年

14

窗口系统不必具有服务器,但是您可以决定基于客户端-服务器模型来实现窗口系统。这样做有几个优点,因为您可以清楚地将客户端和服务器中的活动分开,它们无需在同一台计算机上运行,​​并且为多个客户端提供服务更加容易。当前这仍然非常方便(例如,当您ssh进入另一台计算机时),但是您必须意识到,在X开发时,这被认为是必要的:您的本地计算机可能不够强大,无法运行客户端。

命名管道不会像TCP实现那样具有自动运行网络的优势。但是,例如,命名管道在DOS上不可用,DosExtender运行Desqview / X(1992),而AFAIK在VMS上也不可用。对于那些实现,特定于Unix的通信将是一个问题。

TCP不是特定于Unix的,可以在VAX / VMS(X开发于1984年开始)下运行客户端,并将输出提供给基于UNIX的本地图形工作站。从“ X Window系统:Xlib,X协议,ICCCM,XLFD的完整参考”¹:

在1986年秋天,Digital决定将其整个台式机策略用于X X的ULTRIX,VMS和MS-DOS。尽管这使我们感到满意,但也意味着我们有更多可以与之交谈的人。这导致了一些延迟,但最终也导致了更好的设计。Digital的Ralph Swick在此期间加入了Athena项目,并在第11版的开发过程中发挥了至关重要的作用。最新的版本10于1986年12月提供。

从“ X协议参考手册”²:

责任分工

在设计X协议的过程中,在服务器和客户端之间的功能划分上进行了很多考虑,因为这决定了必须通过请求,答复和事件来回传递哪些信息。Robert W. Scheifler和Jim Gettys撰写的《 X窗口系统》一文是有关在设计协议时进行某些选择的依据的极好的信息来源,该文章发表在计算机协会《图形事务》第5卷第5期中。 1986年4月2日,最终的决定基于客户端程序的可移植性,客户端编程的难易程度和性能。

首先,服务器被设计为尽可能隐藏客户端应用程序中底层硬件的差异。...

我记得TOG中的文章很有趣。毫无疑问,这引起了我对X的兴趣,(这是在WorldWideWeb之前的),直到O'Reilly开始出版他们的X系列丛书之前,我们一直难以掌握更多信息。

¹X 版本11,版本4,第2-X页,PDF可在此处在线获得
² 这是我于1990年购买的O'Reilly出版的第二版的第9页。这些以及它们都是AFAIK,也仅提供纸质版本。我认为他们没有改变责任划分的理由。


2
我们还使用了专用的X终端,这些终端无盘,被动冷却并且可以立即更换,如果您需要100个座位,这些都很棒。
西蒙·里希特

7

窗口系统意味着几个独立的程序共享一个公共资源,屏幕和输入设备。共享资源只能通过两种方式安全地实现:

  • 资源可以由内核控制,应用程序进行内核调用以访问它。
  • 该资源可以由专用进程(服务器)控制,并且应用程序与服务器联系以访问它。

当然,对实际显示硬件的访问是由内核控制的,但这对于窗口系统是不够的:必须有一种方法可以为进程分配显示器(窗口)的某个特定部分确保没有其他进程会干扰,并且必须对某个应用程序何时可以访问资源的哪一部分进行一定程度的保护。

现在整个事情可能已经进入内核,这就是Windows所使用的AFAIK。这具有更快的优点(通常调用内核比联系另一个进程快得多),但是它的缺点是可能会打开安全漏洞(对系统的任何利用都是内核级别的利用)时间限制了可移植性(在内核中实现的系统与内核紧密耦合;您将无法轻松地将其移植到另一个操作系统,如果您无法访问内核代码,则完全无法这样做)。

如果您不想在内核中实现它,则实现它的唯一另一种方法是作为专用进程,即服务器。请注意,通过命名管道联系的服务器仍然是服务器。同样,当在同一台机器上运行时,这些天X服务器和客户端之间的许多通信都是通过共享内存进行的;仍然不会改变显示服务器是服务器这一事实。

现在,为什么使用套接字而不是使用命名管道联系服务器?好吧,如果使用套接字进行操作,则只需要为整个服务器使用一个套接字即可完成所有通信。如果与管道通信,则每个客户端需要两个管道。除了管理所有这些管道非常麻烦之外,如果有足够多的程序尝试同时与服务器通信,您可能还会遇到一些操作系统限制,以限制开放管道的数量。

当然,套接字相对于管道的另一个优点是,通过套接字,您可以跨机器进行连接,这在许多人坐在专用终端上共享实际计算机的情况下尤其重要,因此计算机上的程序必须进行通信到不同的终端,但即使在当今的网络环境中,它仍然非常有用。


你的MS Windows的假设是部分真实的- 一些需要的窗口系统结构是排序的内核里-但它很复杂。Windows可能会让您感到惊讶的是,我们与之关联的许多东西实际上都是特定于单个用户模式子系统 -Win32子系统-类似于vm。内核本身及其组成的执行模块与其他所有模块分开。正是这种分离允许一个单独的POSIX子系统在NT内核之上运行。看看
mikeserv

1
虽然我确实不知道具体的设计,但查看链接文章中的图像,我在内核空间中看到一个包含“窗口管理器”术语的框。由于实际的窗口装饰是由各个程序绘制的(因此没有像X11窗口管理器那样的东西),我只能得出结论,该组件的作用与X11显示服务器基本相同。Win32部分可能是X11窗口管理器(不是 X11服务器的一部分!)和X11工具包(在X的客户端环境中)的功能的组合。
celtschk 2014年

是的-这就是我的意思,某种程度上 -这是执行服务层-就像是服务的大杂烩,它们在内核模式下运行,但它们本身是独立的模块。我猜那是内核-不需要编译Linux内核驱动程序,而是可以模块化加载/卸载。对于Windows来说这很奇怪,因为它全都被隐藏了。无论如何,我一直认为这很有趣-但我不是专家。您的回答让我想起了。
mikeserv

2

X最初是由MIT开发和维护的,它具有MIT的开源许可证,并不是那么重要。

虽然被视为非常规,但请考虑一下;您将如何解释在一个软件中使用客户端-服务器范例的选择?而且,也许我应该对首席执行官说。

这就是我学会了欣赏大学选择的方式。在客户端-服务器,服务器管理的资源,以及特别是,任何资源必须进行共享。因此,X服务器是向客户端应用程序提供键盘,鼠标和帧缓冲区(或者,但是您写入系统屏幕)的过程。

虽然不是很正确,但通常会这样解释窗口管理器:就是将东西和其他装饰放在应用程序的框架,窗口,对话框等上。


0

客户端-服务器模型是适用于各种应用程序的流行设计,即使只有一个服务器也只有一个客户端。它们允许在责任域之间建立干净,定义明确的接口。

尽管服务器和客户端可以通过多种方式进行通信,但是X(不管其他人提到的优点如何),服务器的选择并不是多余的:您可以连接到X另一台计算机上的服务器,并在台式机(或其他协作计算机)上打开窗口桌面)。这在X开发的时代曾经很普遍,当时许多大学和企业都拥有Unix服务器和许多与之对话的“ X终端”。通过使用可用于Internet的通信协议,X可以在主机内部或主机之间无缝使用。

X是第一个可以透明地显示来自另一台计算机的窗口的GUI环境,这与UNIX作为多用户环境而不是一台计算机上的单个用户的OS的历史一致。如果您是唯一与计算机进行(物理或远程)交互的人,则许多UNIX功能似乎有些过头。


-1

我相信x服务器被设计为客户端服务器体系结构,因为最初的计算资源是稀缺的,大型机承担了大部分繁重的工作。X终端只是连接到X服务器的瘦客户机,并显示需要显示给用户的任何内容。

它确实有很多好处(尽管如今X的通信协议非常繁琐),特别是您可以在多个客户端上显示相同的显示,在X中轻松与多个用户共享屏幕。


X终端出现于X窗口开始流行很多年之后,因此它们不是X窗口如此构建的原因。另一点:X终端未连接到X服务器,它们正在运行X服务器。
jlliagre
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.