您的位置:首页 > 其它

X Window研究笔记(4)

2007-09-14 22:28 253 查看
X Window研究笔记(4)

转载时请注明出处和作者联系方式
作者联系方式:李先静 <xianjimli at hotmail dot com>

4.X Window的分层视图

X Window是一个严重依赖硬件环境的系统,输入依赖于输入设备,像键盘、鼠标和触摸屏等,输出设备依赖于显卡和显卡提供的接口。为了隔离与硬件的耦合,保持良好的可移植性,分层设计是必然的选择。X Window的分层视图如下所示:



DIX(与底层无关的核心代码): DIX是与平台无关的核心代码,DIX之意可能是指“不依赖任何硬件设备”的代码。它主要包括:

1.对下列资源的管理(有些资源的实现是硬件相关的,但对它们的管理是硬件无关的)。

●Window 提供窗口的创建/销毁,属性修改,和基于树形的管理和遍历操作等。
●Pixmap 是继承DrawableRec的,实现一些像画线这样的基本绘图操作。
●Screen 是对显示设备的抽象,一个Card可以有多个Screen,DIX提供像AddScreen和FreeScreen等函数管理Screen。
●Device 主要是指对输入设备,像键盘、鼠标和触摸屏的管理。
●Colormap 调色板的创建/销毁,修改和查询等操作。
●Font为客户端应用程序提供字体管理,比如打开/查询/显示/关闭字体等操作。
●Cursor 光标的创建/销毁。
●Graphics Contexts绘图上下文,包括像字体,颜色,线条类型等信息,提供GC的创建/销毁和修改属性等操作。

2.处理客户端的请求。

3.输入事件的分发。

这一部分的代码主要集中programs/Xserver/dix目录下。

EXT(扩展功能) :可以认为X Window的大部分功能特性都是在扩展中模块实现,这样可以根据需要进行裁剪。X Window提供大约40来个扩展模块。

Panorami:在公共场合和电视台常常需要超大屏幕的显示器,像一堵墙一样,要生产这样显示设备成本高,制造难度大,一般取而代之的方案是,用多个显示器拼装起来,比如,用16个显示器可以拼装出4x4的显示矩阵。本扩展模块的功能就是让一台机器上支持多个显示器,并把显示数据送到相应的显示器上。

Bezier:我们都知道像TrueType之类的矢量字体都是靠Bezier曲线来圆滑其线条的。本扩展模块可能就是做这件事的,不过好像X Window中并没有使用它。

Shape:大多数时候,我们看到的窗口都是一个方块,对一般用户来说并不是什么障碍,而在有时候,像一个娱乐性的软件,需要把窗口做成奇形怪状的,以增加对用户的吸引力。Shape扩展提供了一些功能用来创建非矩形的窗口。

Shm:X Window和客户端程序之间一般只是传递一些参数,数据量不大,对性能不会造成太大的影响。但有时可能要传递一些大块数据,比如说像图片,对性能就有较大明显的影响了,Shm扩展提供了共享内存的支持,以避免大块数据的传输。

EVI:X Window的Core服务提供了获取Visual的基本信息,有时候这些基本信息对客户端程序来说,是不够充分的。于是就出现了EVI(extended visual info)。

Pex: 不知是什么东西,没有找到相关的文档和源码。可能是一个过时的扩展吧。

Multibuffer:提供多缓冲区。

XInput:扩展输入设备。提供对键盘鼠标等之外的输入设备的支持。

XTest:测试扩展模块。除了测试之外,还可以用来支持软件键盘等虚拟输入设备。

BigReq: X Window本身对请求包的数据大小是有限制,通过这个扩展模块可以支持大的数据包。

MITMisc:一些杂项功能的扩展。就提供了两个功能X_MITSetBugMode/ X_MITGetBugMode。

ScreenSaver: 支持屏幕保护功能。

Xv:提供对视频播放如DVD、MPEG的支持和优化。

XvMC提供对视频播放如DVD、MPEG的支持和优化。

Sync:提供对多个客户端进行同步的机制。

Xkb:键盘扩展。不清楚到底扩展什么。

XCMisc: 杂项功能。

Record:它可以把X Window的事件和请求都记录下来,主要用于测试目的。

Lbx:Fast Server.

Dbe: 双缓冲支持。

Xag:应用程序分组管理。X Window只知道窗口之间的父子兄弟关系,并不知道这些窗口属于哪个应用程序。本扩展模块可以把窗口按AP分组。

Security:提供安全扩展,即认证机制。

Xp:打印功能。

Xcup:对颜色映射的支持。

DPMS:显示电源管理。

FontCache:字体缓存。

XFree86Bigfont: 大字体支持。

XFree86VidMode: 显示模式管理。

XFree86Misc:杂项功能。

XFree86DGA:显示加速功能。

XFree86DRI:直接渲染。

Glx:OpenGL支持。

DarwinGlx:Darwin的OpenGL支持。

DPS: Display Postscript,没有找到相关的文档和源码。

Render: 渲染扩展,增强X Window的画图功能。

RandR:对窗口的旋转和调整大小支持。

Res:资源管理支持。

DMX: Panorami要求所有显示器连接在一台电脑上,这常常有些难度,DMX允许这显示器在不同的机器上。

扩展模块的初始化是在miinitext.c里完成的,在函数InitExtensions中,它会把所需要的模块一一初始化。

OS(与特定OS相关的代码): 这一部分主要包括如下功能:

Scheduling and Request Delivery

New Client Connections

Reading Data from Clients

Sending Events, Errors And Replies To Clients

Font Support

Memory Management

Client Scheduling

Other OS Functions

Idiom Support

DDX(与设备相关的代码):所有与设备相关的功能,都是集成在X Server中的,客户端程序只知道”事件”, 而不知道设备的存在。关于输入和输出设备,在后续的章节中,我们会做专门的介绍。

(待续)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: