up duan:为什么user space的东西要比kernel space的东西快?
kernel安全大于效率?
up duan:为什么user space的东西要比kernel space的东西快?
kernel安全大于效率?
不是说指令快, 而是库的支持等等.
内核的内存管理是整个system的, 不能想用户空间那样随便申请,申请速度也比用户空间慢, 栈也不能随便要多大就多大
内核的内存很关键, 不能随便放一个c库或其他库
可能不能使用浮点计算器.
等等等很多.
内核本来就是为用户空间提供虚拟的cpu和虚拟"无限"的内存, 如果内核要跑应用, 谁为内核虚拟.
还有安全问题.
很关键的应用可以跑在内核上: 网络, 文件系统, 等等, 这两个"真"的是是内核的一部.
像windows 的GDI, 和linux 曾经加进内核的web程序(好像的, 谁修正我?)
所以内核比用户空间慢.
2008/9/3 EC <NetCl...@gmail.com>:
回家翻了一下书,故事是这样的。
保护级别0最高,3最低。操作系统核心工作在0上,用户程序工作在3上。如果用户程序想要得到系统服务,必须call ring0上的代码。但是保护系统规定,低级别的代码不能直接call高级别的代码,也不能访问高级别的数据。否则,用户程序便可以随便访问核心的代码和数据了。为了完成ring3到ring0的call,cpu提供了"门"的机制。切换门以及相关的环境状态(一堆寄存器)需要开销。gdi属于访问频繁的服务,对程序性能影响很大。放在ring0里,每次调用都需要切换cpu保护状态,开销甚大。nt3.5是ms第一种真正完全利用了intel保护模式的操作系统。结果发现图形性能很差。应用程序只能在ring3中执行,无法搬进ring0,那么只能将图形处理部分分离出来,放进ring3。进而在nt4.0之后,将gdi移到ring3,以提高性能。代价就是可靠性变差。
回家翻了一下书,故事是这样的。
保护级别0最高,3最低。操作系统核心工作在0上,用户程序工作在3上。如果用户程序想要得到系统服务,必须call ring0上的代码。但是保护系统规定,低级别的代码不能直接call高级别的代码,也不能访问高级别的数据。否则,用户程序便可以随便访问核心的代码和数据了。为了完成ring3到ring0的call,cpu提供了"门"的机制。切换门以及相关的环境状态(一堆寄存器)需要开销。gdi属于访问频繁的服务,对程序性能影响很大。放在ring0里,每次调用都需要切换cpu保护状态,开销甚大。nt3.5是ms第一种真正完全利用了intel保护模式的操作系统。结果发现图形性能很差。应用程序只能在ring3中执行,无法搬进ring0,那么只能将图形处理部分分离出来,放进ring3。进而在nt4.0之后,将gdi移到ring3,以提高性能。代价就是可靠性变差。
呵呵,还是redsea说的对。:)
关于指令,我记反了,很多指令在ring3下会引发0D中断。比如cli,int等等。
另外,我也问个问题:在win32下,通常应用程序的非法操作不会引发整个操作系统的崩溃。但如果在kernal mode中的驱动程序存在非法操作,基本上就出蓝屏了。但我听说在unix中,一般设备驱动出现问题,也不会引发整个操作系统的崩溃。不知是真是假?
如果是真的,unix采用了什么样的方法做到的呢?
2008/9/4 wing fire <wing...@gmail.com>:
--
专注 高性能 容错 分布服务器的实现(erlang)
http://mryufeng.javaeye.com
我记不清那里看来的,时间太长了。gdi和设备驱动还不完全是一回事,gdi的接口算是高级图形接口。下面扎得很深,就看扎得多深了。好像原本高级图形部分也在ring0里,后来再提出来的。底层与硬件打交道的当然是不可能出来的。好像记得还有那么个图的。
gdi调用频繁,能总穿透ring0性能不行。底层图形接口就相对少一些了。
bwt:nt3.5好象是C2的,4.0以后ms似乎就不理这茬了。
2008/9/4 莫华枫 <longsh...@gmail.com>我记不清那里看来的,时间太长了。gdi和设备驱动还不完全是一回事,gdi的接口算是高级图形接口。下面扎得很深,就看扎得多深了。好像原本高级图形部分也在ring0里,后来再提出来的。底层与硬件打交道的当然是不可能出来的。好像记得还有那么个图的。
gdi调用频繁,能总穿透ring0性能不行。底层图形接口就相对少一些了。
bwt:nt3.5好象是C2的,4.0以后ms似乎就不理这茬了。
没记错的话,NT 4.0有达到C2的,但是,是特别的裁剪版本。那个安全级要求用户代码不能直接访问硬件,那个什么后来,微内核的性能问题越来越多,这个要求早就被打破了,微软从此就不提这个了。不过安全隐患确实很多。
其实GDI的本身的代码慢也有限,主要的瓶颈还是在系统调用上,但这个很难改,因为GDI不仅仅是绘图这一件事。他想定义一个通用绘制层,还要考虑到安全因素,还要兼容各种显示设备,以至于只能用最保守的方式绘图。除非改动这些目标,否则,很难快的起来。
2008/9/4 redsea <red...@gmail.com>这个 windows video driver 的历史, 我的记忆是和 wing fire 说的差不多, 和老莫说的不太一致.
On Sep 4, 11:33 am, "wing fire" <wing.f...@gmail.com> wrote:
> 我怎么记得当初慢是因为微内核的架构呢?GDI最终需要访问硬件,而用户代码是决不能访问硬件的。这是HAL导致的必然结果。微内核的情况下,GDI的最初由特定的service来完成,core负责维持通信,这个开销太大,于是,取消service,直接到到核心。这是我所听到的历史。
> 陷入到ring0虽然慢了点,但是比起微内核的通信还是快多了啊。后来的directX,才是真正的从用户空间直接访问硬件的,因为数据量太大,都通过ring0的话都慢的不行。也因为directX直接访问硬件的这个特性,所以,只要上了directX,好像C2,还是B2什么的安全级就不可能达到了。
> 另外,好像从XP还是2003开始,Audio这样的服务出现在了系统服务中,大概是因为现在机器性能够强,Audio这样开销不太大的功能重新回到微内核的service中去了吧。
--
SevenCat 写道:
SevenCat 写道:
首先我觉得你们对微内核的印象还是来源于第一代,Mach之类的那种内核,现在的L4不仅仅是理论上比单体内核好,实际上也比单体内核好。其次,Linux是比Windows的驱动好些的多,但是这并不证明Linux的驱动模型比Windows的驱动模型好,其实反而可能是相反,Windows的驱动模型考虑的更周详和全面,程序员确实需要了解更多的概念和框架才能进入,而Linux却非常直接,所以进入门槛比较低。我还是坚持认为X比GDI性能低主要原因是X采用UNIX Domain Socket方式交互而Windows采用直接的函数调用。
现在 X 可用的 dri、xshm、xv、gl 这些呢?
WindowsGDI下层不是IPC方式的呀。有证据证明吗?
DestopManager和DisplayDriver是两个层次吧。图形资源是由DisplayDriver处理【管理】的。说Windows性能高过X,主要是指其DisplayDriver层次的,而不是DestopManager层次的。
人们在用的,都是你所谓"改变了构想的 X",或说"作弊"的高性能的 Xorg。
而你"纯粹"的,性能低于 Windows 的 X ,是没人用的。
Intel、ATI 的显卡驱动都是依据 DRI 的
http://dri.freedesktop.org/wiki/
像 Ubuntu 的 Xorg 在多数 Intel 显卡和部分 ATI/AMD 显卡上都是默认开启了 DRI 的。
而 RHEL 之类应该默认没有。