自从2007年10月Windows 7的第一条新闻发布以来,我们就一直听说这个操作系统有个叫MinWin的新组件,一个听起来像轻型系统内核的东西。现在,Windows 7已经出现在了许多愿意买账的客户的计算机上;而在它的内部——以及Windows Server 2008 R2的内部,就是传说中的MinWin内核架构……但是很少有人知道它究竟是什么。
前几个星期,微软的技术工程师Mark Russinovich——绝对是Windows性能和架构方面的世界级权威(“内核神童”——译者注)——在洛杉矶的PDC 2009会议上花了一些时间向开发者们解释了MinWin到底是什么。简单的说,它就是把那些Windows该有的架构层全部加上了——谁让1980年的时候,Windows的架构师们没有高瞻远瞩地看到大家在30年后是怎么使用Windows的呢。它让现在和以后的微软开发者们可以改进系统的架构,而不必重写核心服务,也不必担心会破坏上层API和核心服务之间的依存关系。
“如果你回头看这些年Windows的进化,你会发现这是一种非常有机的进化,因为进化的过程中加了无数的新功能和新组件,却完全忽视了系统架构和层次,”Russinovich解释道。“这就是为什么我们经常被迫要搞那些临时的解决方案,”“当我们想搞那些简化版本的Windows,比如服务器核心,或者嵌入版Windows,或者Windows PE预安装环境的时候,我们得把Windows拿出来拆成一块一块的。但关键问题是,这一块有时候依赖于那一块,而我们又搞不清楚这些依赖关系。”
可能“视窗”这个名字对于描述系统内核该是啥样来说不大合适。Windows Server 2008服务器核心取得的突破性进展,是它最大限度地减少了运行的系统服务的数量,减少到系统刚好能运行并对外提供网络服务的程度。但即使是这些服务,也还是有一堆依赖关系,比如提供图形界面的动态链接库,即使这些服务根本用不到这个功能。所以你也可以想到,在这个服务器核心之上还可以进行突破,打造一个完全最小化的内核,加上模块化的组件来实现其它功能,完全不需要搞什么跟图形,鼠标,声音之类相关的动态链接库。
MinWin就是朝着这个方向迈出的重要一步。“我们想搞得更严密一点,”Russinovich说,“因为每次我们想改进一下Windows,就会把新版本搞得完全不能用。我们想找个我们能搞得懂的服务器核心,就是除了自己以外什么都不需要的那种,然后我们就可以在这个基础上改进。这样我们就可以单独改进,而不用担心把服务器核心搞坏了,或者每一版都要重新定义。”
Windows 7上最基本的MinWin大约有161个文件,总共大概28 兆。我估计你马上就打算买个最便宜的优盘把它装着到处晃,但我提醒你一下,MinWin连命令提示符都没有。它只运行内核,基础的系统服务,以及TCP/IP栈,没别的了。
操作系统的功能是由API来实现的。自从Windows 3.1以来,这些由各种动态链接库组成的集合被称为Win32。在Win32里面,“苦力分界线”一直是纵向的,不是横向的。横向分界可以将处理用户输入的内核函数和图形显示函数分开。虽然现在Windows架构已经改进到整个图形部分对于主流程序来说可以基本废弃不用的程度了,但GDI32.DLL还是被假定存在的。
微软的工程师们要想实现横向分层,他们必须要把API函数设计成像原来那样工作,即使原来的分界已经不存在了。这就是我们要谈到的最关键的一个词——“虚拟”。在新的MinWin架构下,只有KERNELBASE.DLL里一小撮别有用心的内核函数负责处理系统的基本服务。其它不明真相的API调用被直接转发,就像互联网域名系统里无法解析的地址一样,被转发到系统核心外的其它动态链接库。
但是和80年代就有的那种将API“解析”到相同的一系列动态链接库的方式不同,在新的MinWin架构下,一切都不一样了。在揭示了25年前的构成效率理念和现在的完全不同之后,Russinovich道出了一个惊人的细节:在以前版本的Windows里,一些没有任何逻辑关系的API被胡乱绑在一起,纯粹是为了缩短启动时间。越是大的API集合,就越和文件名没有任何关系。
“我们不想再那么搞了,我们想让磁盘上的文件和真正的API没有任何关系,这样我们就可以动态地构造它们。” Russinovich说。“换句话说,我们想让大家调用那些虚拟的动态链接库,然后系统会将虚拟的动态链接库映射到真正实现这些功能的逻辑动态链接库。”“所以对于一个程序员来说,一个虚拟动态链接库的功能是由哪个逻辑动态链接库来实现的都是无所谓的,到底怎么构成实现这些功能的最佳组合是由我们来决定的。”
这样做确实是会牺牲一些性能的,比如会在依赖关系中出现一些“人工制品”,比如Russinovich自己编写的Dependency Walker就可以跟踪到。另外,进程必须要建立一个虚拟动态链接库到逻辑动态链接库的映射表。而且虚拟动态链接库的文件必须要真实存在,哪怕文件里面全是空指令。
但利大于弊,比如API调用更快了,因为定位操作都是虚拟、动态的。而且微软自家的开发者们,在Russinovich称作三年的“抑扬顿挫”的新产品研发周期中,又有更多的时间来研究除了新系统架构、新硬件以外的东西了。
MinWin可能带来的意外惊喜之一可能是更好用的服务器核心。就像Russinovich演示的那样,直到Vista系统为止,命令提示符还在依赖一个(无关紧要的)高层进程,CSRSS。这个高层进程又与图形函数相关联。全新的MinWin架构使每个进程都能访问一个和系统核心更接近的子系统,名为CONHOST,这样就不用去折腾那些根本不会用到的动态链接库。下一代Windows (“Server 2011?”)会用以MinWin为基础的横向分层架构代替目前的服务器核心。
Windows桌面版本的另一个可能的巨大变化——Russinovich没有提到,但反正大家都可以预见——就是使用以MinWin为基础的功能层来管理硬件和运行系统服务,外加一个也是基于MinWin的虚拟层来运行程序和提供用户环境。这种设计估计比目前的系统要安全无数倍。
网友评论