阅读:2006回复:1
由Windows驱动开发想到的
由Windows驱动开发想到的
author: cyliu 由于工作原因,很久都是在UNIX下,很少看Windows的驱动了。今天闲赋在家偶翻出来一篇windows驱动代码,突然产生了UNIX/LINUX和Windows的内核开发思路的对比,并把心得作为笔记录下。 1 分层的概念好(北京好,奥运好)。无论linux还是Windows的核心,分层的概念都运用的得心应手。其实,可能也是不可避免的。因为这世界越来越复杂了,任务不进行分解工作,还能真做不好了。合作式,交互式任务成为了社会的主流。 2 统一的沟通桥梁。Linux下网络是分层的,但是各个模块间需要交流。如何交流才省时间呢?哦,统一的认知就行了,所以有了skb_buffer作为网络分层的交流物质。Windows下呢,其本身OS就是分层的,无论网络模块还是文件系统,都是分层的。有上文件驱动,下有磁盘驱动。这又如何交流呢?哦,原来是通过irp,又一个统一认知。 3 对象的概念。linux下内核对对象的概念运用得很纯熟。哦,对了,是对象的概念,概念哦。可不是c++实现的,而是通过c来实现的,太优雅了。非常喜欢。windows下有吗?回答是肯定的。万物都是相通的了。你没有看到?不会的,windows内核那么多结构就说明了一切。不要被表象掩盖了现实。如果还不知道,那就看看ndis的代码,只需要看注册部分就可以了,会有所体会的。 4 模式的运用。模式语言很流行阿。特别说明,这里的模式不是那各23中模式哦。这个23种模式是属于编码级别的。我这里说的是系统模式,目前有5本丛书。国内我看到只有前三本由译本(系统模式化分析,网络开发模式,资源利用模式),后两本我是从网站的得到电子英文版。 模式是个思想,它能够激活你的思维,并会创建给多模式。利用模式开发系统,多快好省。但是模式的理解也是最抽象的,需要多年的经验才行。而在开发过程中,我认为应该注重模式的思想。当然ACE是这些模式的具体实现。ACE与模式的关系就是C++与对象概念的关系。 跑题了,重新来过。linux的模式运用很多,而且版本越高,运用得越多。如usb框架中,虚拟文件系统,内核设备的管理Ksys系统等。Windows下模式也很多,如pipe模式,主动模式,反应模式,监控者模式(IO管理器)等等 5 Windows内核简单理解 IO管理器是内核的监控者,其它的内核再它的围墙内保护起来了。 现在描述一下简单的通信。RING3 通过INT调用门进入内核的门槛了。IO管理器拦住来访者,说“对不起,你太脏了。请在此等候。我会为你处理所有事情的”。然后根据来自外星(RING3)的访问者提供的请求,签发一个电子证件(irp),找到能够处理这个任务的对象,通过传送链把电子证件传递过去(保持清洁,拒绝有人在内核里面走动)。记住,在到达最终的目的时,也就是转送链途中会有其它站点(设备栈)来检查是否有自己想要的。也可把他们当作检查员(监控类)或者翻译器(加密类)对数据处理。最后到达目的地。 目的地对象处理完成后,返回一个结果,也签在电子证件上(irp),并最终由IO管理器翻译成RING3能理解的数据。如果目的地对象很忙,他会告诉请求者(RING3),“我很忙,你先请回。处理完成后,我会根据你给的电话(完成历程)答复你的。” 6 LINUX内核简单理解 linux内核可没有irp了。但是也是比较简单的,去读就可以了。 7 mips的risc和x86的cisc的指令和汇编代码比较 他们的差异不说了阿,大家都知道。就是说一句体会:mips指令的汇编真的是乱序阿,读起来费尽阿。特别是加上了延迟槽,会看晕的。还是x86的cisc指令体贴人,看着舒服。 各位大牛们也把自己学习新的说说,让我等来学习。坚信经验是重要的 |
|
|
沙发#
发布于:2008-08-05 15:11
不错!多看看系统的架设,表被表面的小伎俩所蒙住眼睛
|
|