第五章 走得太远别忘了回家的路(1) ——《箴言》第三章 Windows运行机理之读书笔记


第五章 走得太远,别忘了回家的路(1)
——《箴言》第三章 Windows运行机理之读书笔记之一


【内核分析  运行机理 LE文件的格式 VxD的设计实现】(略)

一、“整个消息的处理就很简单了”

“我们首先从16位的Windows来认识消息。在16位时代,Windows的整个内核是32位的、分时的、抢占的。所以从Windows的内核模型得知,有两种VM,一种是SYSTEM VM,一种是DOS的VM。一个系统中可以运行很多的DOS窗口,因为在16位的时代,能运行DOS的程序很重要的,所以在当时,Windows的主要任务之一,就是能同时运行很多DOS窗口。Windows的内核实现上用了很多微内核,而微内核的工作很多是靠消息来完成的。”

梁先生云:“在16位时代,Windows的整个内核是32位的、分时的、抢占的。”我第一次听到这样说,别的就不说了,就看看那时成熟的Windows3.1吧,还是来看看MS自己的说法吧:关于16位还是32位:“Windows 3.1 and Windows 3.11 (called Windows for Workgroups) are the 16-bit version of the Windows operating system family.”(《Windows Architecture Training for Developers》1998 Microsoft Corporation) “Windows 3.1 is a 16-bit operating environment that runs on the MS-DOS operating system.”可见16位时代的Windows决不是“整个内核是32位”的;关于抢占性:“There are two types of multitasking: cooperative (or nonpreemptive) and preemptive. In a cooperative multitasking environment such as Windows 3.1, use of the processor is never taken from a task. Instead, a task must voluntarily yield control of the processor before any other task can run.”,由此可见,16位时代也不是“Windows的整个内核是抢占的”,而是非抢占性的(nonpreemptive)。非抢占性的而想要同时又是“分时的”,孤陋寡闻的我又算是开了一回眼。

至于说到16位时代的Windows要能运行DOS程序,我想,如果16位时代的Windows这种座落在MS-DOS基础上的操作环境封杀了MS-DOS程序,那才是天大的笑话呢。16位时代的“Windows的内核实现上用了很多微内核”?如果不是作者把VM与微内核混为一谈的话,那么就又是我的孤陋寡闻了。


“到Windows 32位时,消息的运行机理就不相同了。从内核中可以看出,有一个Win32的VxD,把DOS的抢占分时都放在这个VM中完成,系统VM就进一步和系统底层融合。然后在这个基础上分出时间片。这样,每个应用程序就自己有自己的消息队列。所有的消息队列看上去是放在USER32的模块内,但每个应用程序自己有一个USER32,因为每个应用程序在内存内都是从4000000B(也就是4MB的位置开始的),这样,每个GetMessage和PeekMessage都在处理事件。实际上,每个GetMessage都会成为一个WaitsingleMessage,当有事件来后࿰

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值