QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 1797|回复: 12

关于图形部分的一点想法,欢迎大家和我讨论

[复制链接]
发表于 2003-7-4 11:11:06 | 显示全部楼层 |阅读模式
有的文档里提到linux的内核是对console的输入提供抢先的,而X却不行,我想,这是因为consloe被编译到内核里而X是作为普通用户程序运行的缘故。
好像这两个东西各有一套图形驱动,code page,键盘映射,和鼠标驱动,当然Xfree86也可以使用console的driver。
我觉得现在之所以linux对最终用户是不友好的一个原因就是它不像windows有一个真正的图形核心子部件。我的意思不是说图形子部件是核心必须的,但应该也可以作为可选的编译选项,作为核心标准化的东西,就不用再有xfree86这么笨拙而吞噬资源的设计,只要实现一个X指令解释器就可以了,各种driver也可以统一到一种设计下。
我的这种想法另外还是基于以下的考虑,一个没有图形卡的机器实在想不出来鼠标,键盘等人工输入设备还有什么用,也就是说,显示设备和人工输入设备要么都有要摸都没有,所以kernel里有输入输出设备驱动和Xfree86也有输入输出设备驱动纯粹是个设计的失败。
发表于 2003-7-4 11:21:12 | 显示全部楼层
no idea about xfree86. i used it long long time ago and at that time i am very stupid. so ...
回复

使用道具 举报

发表于 2003-7-4 15:07:34 | 显示全部楼层
有道理的,不过这样一来就会走M$的路了
回复

使用道具 举报

发表于 2003-7-4 20:35:11 | 显示全部楼层
which road is not important, the best is to do best but not to be greedy.
回复

使用道具 举报

发表于 2003-7-5 20:00:58 | 显示全部楼层

121

“xfree86这么笨拙而吞噬资源的设计”

哈哈,你把MIT做出来的西西骂了个爽。

这样设计的符合C/S模型。
回复

使用道具 举报

发表于 2003-7-5 20:31:24 | 显示全部楼层
可不可以这样设计:
对于本地用户登录后,可以把X连接到内核??做成module??

这想法是不是够stupid的?
回复

使用道具 举报

发表于 2003-7-5 22:09:05 | 显示全部楼层
c/s model allow xserver support diskless workstation, remote desktop easier. but for local performance, it do has some problems.

i do not know the structure of x, so i haev no idea about whether can connect it to kernel or now.
回复

使用道具 举报

 楼主| 发表于 2003-7-5 23:11:34 | 显示全部楼层
>_<!   XFree86并不是MIT做的,X协议是MIT制定的,windows的消息机制应该是参照的X协议的设计(X协议的历史比windows api的历史长),两者的编程方法,包括API都非常像,本质上也是C/S结构。

XFree86慢的原因是因为以下因素
1。X本身设计上的因素
X的消息是不定长的,解释器要做额外的工作进行校验,解释。数据在客户端和服务器端是隔离的,即使运行在local也要进行流拷贝。相反windows的消息就全部是等长的,解释起来很简单。
2。Unx本身的问题
在做交互时,由于X是运行在普通用户模式下,即使一次简单的交互也不得不等待时间片。
3。Xfree86本身的问题
传说Xfree86的编程水平很一般,与IBM,SUN等商业产品相比相距较远,特别是一些硬件驱动上。

我的想法简单的说就是在内核级没有一个真正的图形子系统,那只能指望硬件来加速X了,sign
回复

使用道具 举报

发表于 2003-7-5 23:49:09 | 显示全部楼层
kakuyou, u looks know so much.

memcpy and context switch are problems in current cpu. but i am not sure about xfree86 code skill. i am not a good programmer, so i dare not to evaluate other guy.
回复

使用道具 举报

发表于 2003-7-14 14:17:29 | 显示全部楼层
微软的东西也并不是不好啊,只要是好的,哪怕拿过来用,也没有什么问题的。
回复

使用道具 举报

发表于 2003-7-14 21:32:10 | 显示全部楼层
yes, but kernel is a complex place. i think kernel should be better before considering add graphic part.
回复

使用道具 举报

发表于 2003-7-18 17:41:14 | 显示全部楼层
最近正在考虑这个问题,并慢慢写了一些代码,希望能够出一套比较完整的窗口系统。如果哪位感兴趣,可以一起交流交流。

以下是我的一些大致思路(on linux),
前期完成的是一个小型窗口系统(及基本的绘图操作),包含了
(这个小型窗口系统,相当于X中的Server,采用多线程实现必要的事件处理)
- 底层硬件驱动。(VESA on linux,因为VESA比较通用,所以先用这个做Driver)
- 基本绘图操作
- 层管理、操作,每一个窗口都包含一个最基本的层,其他的控件在这个层上叠加
- 字体(文本)显示,位图显示,rect基本操作(绘制,复制)
- 基本窗口由:window和border组成
- 引入基本的wm theme,负责实现不同的窗口管理主题(仅仅是窗口,还并不是菜单、工具栏、按钮);采用plug-in的方式动态载入(如果载入有错,很可能整个窗口崩溃,如果这个server完全在内核中,可能内核崩溃^-^)
- 消息驱动(未定。关于windows定长的消息格式,能否再多提供些信息?Thanks)
- 基本控件(button,menu,checkbox等)直接引入到小型窗口系统中(?)
- 输入法接口

以上大致是这个小型窗口系统的结构。但一些算法现在还不是太清楚,努力的thinking中……
第二步,添加client Applications的API,最有可能的是,引入整套Gtk+,把其中的GDK部分重新实现。这个时候,client和server之间的通信将是关键。
- 基本不可能再走X的老路线,用TCP socket or Unix socket方式。
- 如果这个小型图形系统完全放到内核中,做为一个module,那么这个module将提供额外的linux 系统调用,以支持两者的通信。
- 如果这个小型图形系统放在用户态,
     - 传统的socket方式
     - 仍然添加一个module来提供额外的通信机制。

等第二步完成时,它应该是一个和X11不兼容,但和Gtk+ API大部分兼容的窗口系统。

Others, please not look this as a full features window system, window system for embedded is better.
回复

使用道具 举报

发表于 2003-7-18 21:29:12 | 显示全部楼层
interesting, maybe good for embedded linux.

but i have no idea on windows, ui part. i prefer to read i/o, fs part code.  
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-16 09:51 , Processed in 0.054805 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表