从程序员先进事迹的角度看,Windows 有哪些先进的地方

从程序员的角度看,Windows 有哪些先进的地方? - 知乎829被浏览<strong class="NumberBoard-itemValue" title="8,057分享邀请回答375 条评论分享收藏感谢收起不符合问题的限制条件7添加评论分享收藏感谢收起从程序员的角度看,Windows 有哪些先进的地方? - 知乎829被浏览<strong class="NumberBoard-itemValue" title="8,057分享邀请回答1添加评论分享收藏感谢收起从程序员的角度看,Windows 有哪些先进的地方? - 知乎829被浏览<strong class="NumberBoard-itemValue" title="8,057分享邀请回答168 条评论分享收藏感谢收起Windows的驱动模型。&br&NT时代的东西,简写WDM,WIndowsDriverModel, .Net后好像又出现了Windows Driver Framework (WDF),没研究过。我最开始接触编程就是从WDM那本书开始的,因为对Windows驱动硬件很感兴趣,看完后但发现书里面并没有告诉我计算机是如何让硬件工作的,很失望,在多年后再次看WDM,才发现这又是微软在复杂工程上的一次很宏伟的实践。&br&WDM把一个设备驱动程序和OS以及硬件之间可能的业务需求做了很彻底的抽象。很多当时以及现代的硬件技术在驱动模型里都有体现,比如PCI总线/USB总线设备上的自枚举,WDM将其抽象为描述硬件资源和状态的“设备对象”的构造过程,这和面向对象的思想不谋而合。因为微软在OS领域的强势地位,驱动模型反过来也对硬件总线协议标准产生了影响。&br&WDM根据驱动程序同上层OS的接口到底层硬件总线的交互的不同的关注点,分离出堆栈式的层次结构,以体现最大化的代码复用。比如只关心怎么同最底层的总线硬件打交道的miniPort driver,关心功能点的Functional Driver,还有根据硬件类型抽象了各种可复用的helper function如协议处理的class driver,不同的driver之间通过一种叫I/O Request Packet交流,I/O Reqeust Racket(IRP)抽象了I/O请求,不管是storage driver,network driver,video capture driver从OS到Hardware之间的I/O请求和服务都被该IRP抽象。IRP的Reqeust还定义了同步/异步 Request,以满足驱动性能同系统整体性能的负载平衡。Driver同Driver之间交互,不再是基于函数调用sigture的静态的绑定关系,而是更动态的运行期消息传递的关系,dynamic binding对复杂系统设计的重要意义是不言而喻的。&br&相比较于Linux到2.6才出现类似的驱动模型,其实还远远没有WDM这么彻底,Linux的驱动模型相当于只有抽象到WDM的总线驱动的层次,比如如何根据PCI总线的自枚举功能创建硬件对象和生命周期的管理。但对于业务相似的一些subsystem之间,并没有一个更统一的抽象模型。不同的subsystem(比如storage和network)大家都实现有自己的业务相似的基础架构,不像WDM那样围绕IRP设计了一个更infrasture的系统。&br&当然对于驱动程序的编写者来说,Windows代表的是更大一统,更heavy weight的框架,Linux代表的是学习曲线更平缓,更light weight的reference design,哪种更好,每个开发者的喜好是不一样的。但不管怎样,还是很佩服Windows的工程师从复杂业务过程中抓住本质的对象的系统设计能力。
Windows的驱动模型。 NT时代的东西,简写WDM,WIndowsDriverModel, .Net后好像又出现了Windows Driver Framework (WDF),没研究过。我最开始接触编程就是从WDM那本书开始的,因为对Windows驱动硬件很感兴趣,看完后但发现书里面并没有告诉我计算机是如何…
题主的话题既然包括了编程,那么就是我就从程序员的角度来看这个问题。&br&作为一个曾经的Windows Driver开发者,就从内核驱动这一块来回答。&br&&br&当时是刚毕业时入职华为,就被安排去做一块板卡的Windows Driver开发工作,由于是miniport驱动,则是需要和板卡firmware协议强相关的,很多代码需定制化去编写,而且Windows 驱动也没有相关的协议规定代码开源,因此市面上找不到开源的代码。微软提供的也都是一些基础的接口,而且由于无法看到源码,很多接口从描述和实际功能来看都是无法满足实际的功能需要的。更为恶心的是,每次蓝屏或是系统崩溃,需研究微软生成的错误日志,根据错误id去找到其统一描述的出错原因(比如,您的这个bug可能是由于内存踩踏导致的),但这个错误日志除了对一些低级别的bug有用以外,没有其他任何作用。&br&&br&而Linux则不同,因为市场上友商已经发布了同样的板卡,该板卡Linux驱动代码也是开源的,Linux开发同事结合友商的代码还有我们自己的协议,很快就搞定了Linux驱动,先提交测试开测。测试过程中,出错的日志及内核打印也都很清楚,即使实在搞不明白,也可以翻查Linux系统代码去看究竟是个什么逻辑。&br&&br&而Windows 开发,则像盲人摸象,微软还特恶心的开了一个帮你进行错误定位的服务,大概是100-200USD一次吧,真心黑。Windows 驱动开发好了后,还得提交微软进行WHQL认证,认证一次的费用也是100-200USD一次。各个环节都不忘了收费,这也难为了这批Windows 平台上的开发者们。&br&&br&另外,Linux和Windows 服务器相关的事就不在赘述了。
题主的话题既然包括了编程,那么就是我就从程序员的角度来看这个问题。 作为一个曾经的Windows Driver开发者,就从内核驱动这一块来回答。 当时是刚毕业时入职华为,就被安排去做一块板卡的Windows Driver开发工作,由于是miniport驱动,则是需要和板卡firm…
已有帐号?
无法登录?
社交帐号登录
1709 人关注
412 条内容
194 人关注
1153 人关注
551 条内容

我要回帖

更多关于 程序员记录笔记的地方 的文章

 

随机推荐