设为首页 收藏本站
查看: 788|回复: 0

[经验分享] Windows系统技术的研究

[复制链接]

尚未签到

发表于 2016-5-23 08:51:48 | 显示全部楼层 |阅读模式
  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位系统的普及,将会带来挑战和机遇。
  顺便提一下,根据这几年的工作经历,我发现精通系统技术的人才太少,无论是学生还是工业界的从业人员,都鲜有碰到者,或许是因为我接触人太少的缘故。我很希望能做些工作来带动一些人,但似乎个人的努力总是很渺小。如果在校学生对系统技术很有兴趣,也有不错的基础,我很愿意跟你们交流。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-220535-1-1.html 上篇帖子: VC获取windows 安装内存(RAM) 下篇帖子: Visual Studio 2008 SP1 补丁安装时发生严重错误-安装失败-解决方法整合版!-分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表