原创 Windows系统技术的研究收藏

新一篇: 2007年夏天在北大软件学院的一次讲课 | 旧一篇:  推荐《编程之美》

Windows系统技术的研究

潘爱民,2008.5.23

最近两年来,一直在钻研Windows系统技术,之所以做这件事情,源于两年前的一个想法,我想看看Windows系统到底是怎么响应用户请求的,特别是当系统性能表现很差的时候,更想知道应用程序和操作系统在忙些什么。

一个看似简单的想法,在实现过程中走了不少弯路,前前后后有许多名来自国内最好学校的大学生和研究生跟我一起探索。真的要感谢他们,要不然我未必能坚持下来。

从某种程度上,我感觉差不多已经实现了当初的想法,虽然仍有不少细节尚待完成,但那已经不很重要了。我们有了一套比较系统化的方法,可以揭开许多谜团。每当发现一些意想不到的问题根源的时候,那种感觉真的很好。下面是两个很有意思的例子,写出来跟大家分享。

(1) 在我的一台电脑上,每当进入一个目录的时候,窗口总要停滞好一会儿,有时候,右键菜单也有这问题。这给我的感觉很不好,我下决心要找到原因。可重现的问题总是不难查找根源,尤其对于有好奇心和耐心的人而言。后来我们发现,这是因为有一个文件类型关联到一个远程路径上,而远程路径所指的那台机器已经不存在了。所以,每次当Explorer处理这种文件类型时(比如显示图标、增加有关的菜单项等),发出的远程请求都要等到超时,如果远程请求发生在用户界面线程中,那么界面停滞也就不可避免了。

(2) 有一天深夜在家,我的系统在搜索无线网络的时候发生极不正常的现象,而且不可重现,幸好,我当时打开了我们开发的一个工具,把那段纪录信息拿下来分析,半自动半手动地很快找到了原因。在Windows底层的一个驱动程序中,有一个5000次的循环,在循环中,它检查一个标记值然后睡眠1毫秒。但是我可以清楚地观察到,循环中实际的睡眠时间总是15或16毫秒。所以,程序代码本身的意图是执行5000*1ms=5秒,但实际执行时间超过了5000*15ms=75秒。至于为什么Sleep(1ms)变成了Sleep(15ms),我只做简单解释。在现代操作系统中,线程调度精度差不多都在10ms以上,多核版本的Windows XP是15ms。

钻研的过程非常有乐趣,我们搞清楚了Windows底下的线程们是如何协作做事情的。抓住这些要点,我相信,大多数异常行为我们都有可能解释清楚,但如何自动完成做并非易事。

其实我写的程序非常少,但是我们对于程序的理解在不断加深,最初我特别关注调用栈(call stack),到后来更加关注系统全局的协作,一步步的经验积累,让我们不断地化解系统的复杂性。向系统的复杂性挑战,非常有意思!

除了沿着已有的操作系统实现来考虑问题,我们也在研究和思考现代操作系统的发展和变革。毕竟硬件技术的飞速发展,使得个人电脑的系统环境发生了质的变化。多核处理器和64位系统的普及,将会带来挑战和机遇。

顺便提一下,根据这几年的工作经历,我发现精通系统技术的人才太少,无论是学生还是工业界的从业人员,都鲜有碰到者,或许是因为我接触人太少的缘故。我很希望能做些工作来带动一些人,但似乎个人的努力总是很渺小。如果在校学生对系统技术很有兴趣,也有不错的基础,我很愿意跟你们交流。

发表于 @ 2008年05月24日 00:06:10|评论(loading...)|编辑

新一篇: 2007年夏天在北大软件学院的一次讲课 | 旧一篇:  推荐《编程之美》

评论

#waterxfire 发表于2008-05-24 10:44:18  IP: 118.144.17.*
一直对系统技术很感兴趣,您的几本书c++primer,com 原理与应用,com本质论,inside windows也让我收益匪浅。您说系统人才太少,我感觉这和国内的风气也有关吧,我去年毕业,现在做COM的东西。现在也有些担心,因为国内做windows底层系统开发的企业太少了,感觉做linux的都有很多,但Win的貌似只有一些杀毒软件公司。害怕以后工作都不好找,不过也是我水平还不够高,呵呵。
另外,做的越深,越有一种被微软套牢的感觉,毕竟花了很大的经历在里面,想离开很舍不得。但是win又不像linux一样,核心代码在微软外都是不可见的。这样很大程度上束缚了开发人员。
就业前景、技术前景综合在一起,再加上国内win技术群体的水平因素。我想,windows的系统开发,要想发展,目前很难。
#waterxfire 发表于2008-05-24 10:52:54  IP: 118.144.17.*
另外,也想请教潘老师您一下。您觉得,有志于从事系统技术的人员,该如何规划自己的职业生涯呢。也许是因为囿于我自己学识、见识的原因(本科毕业、工作一年),现在老是感觉做win的系统级的开发,发展面太窄。现在我的前进动力,基本是对系统开发的爱好占大半。
#tomclarence 发表于2008-05-25 15:48:06  IP: 221.201.117.*
我也很感兴趣, 但目前学的不好, 希望有机会可以交流一下...
#dafengfei 发表于2008-05-28 09:14:27  IP: 61.183.133.*
你好,潘老师,请教下非计算机专业出身的有些mfc的经验的人员怎么学习系统知识呢,我学过数据结构,数据库,程序设计语言,对windows操作系统的api有一定了解,我的工作是测绘高分辨率的遥感影像处理以及地理信息系统的软件开发,我的想法是在专业应用的带动下学习系统知识,如果只深入学习系统知识,我感觉就我的背景来说没什么优势,不知道潘老师怎么看,能不能给我写学习系统知识的指导建议?我的邮箱是dafeng6052@163.com thanks
#mickey139 发表于2008-06-02 08:50:51  IP: 221.13.22.*
你好潘老师,我也对windows内核有着非常浓厚的兴趣。不过我看的是ReactOS的代码,听说ReactOS里面存在windows的代码,我想问一下,ReactOS 中的代码到底和windows相似吗?是不是仅仅只是ntoskrnl部分存在相似?
#yangchio 发表于2008-06-24 15:49:10  IP: 61.172.253.*
看了楼上很多回复,为什么大家觉得做底层系统技术会发展面窄呢?越是稀有的东西,越是有前景.我对技术最大的爱好就是想做偏底层的,可惜现在进得工作是做企业计算这块,天天跟数据库打交道,要不就是一些虚有其表的web界面,一点都不喜欢...有机会我一定要转向系统技术
#cheungmine 发表于2008-06-26 19:01:10  IP: 211.148.7.*
真不知道你专研了几年就专研出这个东西来。不客气地说,你的COM书籍,除了翻译的Inside COM比较好看,其余的都没看的必要
#gpgqqd 发表于2008-09-01 10:59:09  IP: 124.16.139.*
刚接触COM,COM学习ing~
想说一句,waterxfire“对系统技术很感兴趣”,但是却又有“做的越深,越有一种被微软套牢的感觉,毕竟花了很大的经历在里面,想离开很舍不得。但是win又不像linux一样,核心代码在微软外都是不可见的。这样很大程度上束缚了开发人员。”的顾虑。
不知道waterxfire对linux系统了解多少;个人觉得:一来,如果说怕浪费时间和精力,咱们现在这二三十年浪费的时间也不少,也不在乎再浪费这一点,而且这也不算是浪费时间;二来,怕对windows系统技术钻研很深被束缚了,这与对系统技术钻研很深,这之间其实并不矛盾,您完全可以去钻研linux的系统技术。或许,将来某一天,您对linux系统精通之后,你会发现原来系统其实也殊途同归。
小弟个人一点陋见,还望各位大侠见笑了。
#wangxy200696 发表于2008-09-07 10:42:22  IP: 219.146.82.*
你好潘老师,我是今年刚毕业的本科毕业生,现在正在做directshow,我也对Windows的底层很感兴趣,曾看过dos32a源码40%,dos3.3内核源码(60%),AMIBios(%10)Window3.0或者window1.0(%1),LINUX0.95源码(%10)电脑刚被偷了,现在面临工作,没时间去研究这些东西了!!!!!!!!!!!!!!!!!!!!!
"如果在校学生对系统技术很有兴趣,也有不错的基础,我很愿意跟你们交流"
"在校学生"?
发表评论  


当前用户设置只有注册用户才能发表评论。如果你没有登录,请点击登录
Csdn Blog version 3.1a
Copyright © 潘爱民