2012年(17)
分类: 虚拟化
2012-07-11 20:59:04
APO Windows被设计成为一种客户端--服务器(client-server)的系统。这样做的优点是你可以把服务器运行于和你的显示器所在的机器不同的另一台机器上。
APO Window System的组成可以分为A server,A client,SNP protocol三部分。
一、A server 包括WM,Alib
就是APO的窗口服务器端,负责所有有关图形显示的操作,包括所有你可以见到的图形元素的绘制。如画直线、矩形、圆弧和多边形等;这些图形的颜色、线宽、填充类型都可以由客户端程序指定。A server同时提供了许多位图操作,这些位图操作可以作用于子窗口的各个区域。A server还会充分挖掘硬件的加速特性,像填充、画直线和图像叠加等操作,如果硬件支持相应的加速功能,就可以通过硬件实现,否则就用软件实现。A server提供了字体相关的操作。客户端程序可以请求A server在指定的区域用指定的字体显示指定的字符串,当然在此之前应该请求A server加载字体,加载后客户端程序可以得到关于字体的一些信息。A Server负责和设备打交道,负责具体的管理显卡,显示器的显示模式和参数设置。还包括最低层的与设备相关的图形库,目前主要是Alib。A server从键盘和鼠标接受输入,这些输入数据被当作“事件”传送给适当的客户端程序。至于哪个窗口应接受到这些事件,是依赖于窗口管理器的(窗口管理器实际上是A server进程中的一个线程),典型的事件包括按键,鼠标移动,鼠标按下/放开等。输入设备往往是与硬件平台相关的,而且又是独占资源,所以用A server管理是理所当然的。应用程序通常不需要关心具体的设备,只要处理相应的事件就行了,像mouse和笔点可能发出同样的事件,而应用程序不用区分它们。输入事件也可以通过XTest扩展,由软件模拟出来的(通常用来实现软件键盘)。A server主要功能之一就是负责管理按层次形组织的窗口节点树。所谓的窗口就是屏幕上的矩形区域,它是可以层层嵌套的,有很多操作可以作用于窗口(如,查询或改变窗口的大小和位置等)。窗口管理器(Window Manager)主要功能是:移动窗口,改变窗口大小,图标化(最小化)窗口,改变窗口层叠顺序窗口上的标题,按钮,漂亮的边框,全都是窗口管理器提供的。不同的机器在本机显示的窗口,由窗口管理器统一装饰和指挥。A server会支持3D,挖掘GPU的并行性能。
二、A Client
任何一个APO应用程序,A Client不负责任何图形相关的具体操作,只和A server交互,由Aserver负责完成其图形显示任务,这种交互一般来说是通过在底层调用alib实现的。Aclient的核心任务是计算和数据处理;更确切的说是消息处理。
1、执行初始化
2、连接到A服务器
3、执行A相关的初始化工作
4、在没有结束之前:
1)、接收来自于A服务器的下一个事件
2)、处理事件,也许向A服务器发送多种绘画请求
3)、如果事件是退出消息,跳出循环
5、关闭连接到A服务器的连接
6、执行清理操作
三、SNP是对象之间也是A server与A Cleint之间的通信协议。
由通信管理者和网络管理者实现本地和远程链接。
四、APO Windows 工作过程
(1) 用户通过鼠标键盘对A server下达操作命令
(2) A server利用Event传递用户操作信息给A client
(3) A client进行程序运算
(4) A client利用Request传回所要显示的结果
(5) A server将结果显示在屏幕上
五、APO window的网络透明性
在一个Aserer上面你可以显示多个机器上的A应用程序,而不必关心这些应用程序具体属于哪个机器。Ex:使用鼠标选择一段字符,然后就可以在另外的程序里按鼠标中间,把字符粘贴过去。不论这个程序运行在哪里。不同机器上的Aclient只要显示在当前的Aserver上,他们就具有相似的行为,就服从当前Aserver的统一的风格和工作方式。Aclient可以向Aserer暗示它要如何如何,但Aserver可以采纳也可以不采纳。
六、Alib
Alib库还定义了一套图形用户界面的编程接口。应用程序开发人员通过用Alib库来实现具体的用户界面,如按钮、菜单、滚动条、文本框等。程序员不需要理解X服务器的语言,Alib库会把"画一个按钮"这句话翻译成A服务器能够理解的表述方式。用于构造象按钮和菜单这样的标准控件,当各种对象被创造出来给A服务器使用-例如窗口,绘画区域和光标,相关的函数返回一个句柄(节点描述符)。这是实际存在A服务器的内存中的对象节点的标识符。我们能够在后面通过把这些句柄提供给各种Alib函数来操纵这些对象。服务器保存了这些句柄和它们管理的对象之间的映射。Alib提供各种型别定义给这些对象(窗口,光标,色表等等),它们实际上最终映射为简单的16位整数。我们在定义保存这些句柄的变量的时候仍然应当使用这些型别名-为了有更好的可移植性。X程序首先需要打开连接到X服务器的连接。在我们完成这件工作的时候,我们需要指定运行X服务器的机器的地址,以及display号码。X window系统能够支持全部连接于同一个机器的好几个display。然而,通常只有一个这样的display,它的display号是‘0;是我们想要连接到的本地display。
七、显示管理器(Display Manager)
显示管理器提供了一个登录界面,其任务就是验证用户的身份,让用户登录到系统。可以说,图形界面的一切(除了它自己)都是由这个显示管理器启动的,包括A服务器。
初步方案:
1、使用GPU显卡,显存1GB GDDR5。
2、字库,图元库(按钮、文本框、光标、鼠标、菜单等)全放显存。
3、做2D时,GPU闲得没事,线程又多;正好做A server的95%工作。
4、显卡驱动只是简单的通信接口吧。
5、A Client只是消息处理、用文本文件编辑构造窗口界面。