HITEA 版 (精华区)

发信人: hfl (凤凰·风中轻舞), 信区: HITEA
标  题: VxD世界——Win95 的线性地址分配
发信站: 哈工大紫丁香 (2002年04月02日20:46:55 星期二), 站内信件


  图1是一张描述Win95线性地址空间的图。下面我们对这张图加以详细说明。


  图1 Windows 95线性地址分配图


  0~4MB:


  这部分在图上标的是DOS内存区,其实这是不确切的。我们知道16位的DOS应用程

  序只能存取0~1MB的内存空间,那为什么还要把1MB~4MB的3MB内存也算作

  DOS内存区呢?答案就在我们前面讲过的分页机制中。我们再温习一下:一个页面

  (Page)是4kB,一个页面表(Page Talbe)有1024个页面,一个页面表目录(

  Page Table Directory)有1024个页面表。那么一个页面表目录项就可以映射1024×


  4k=4MB的线性地址。其实DOS只能利用到0MB~1MB的内存空间,那1MB~4MB

  的地址空间留给谁了呢?关于这个问题,笔者曾经问过Karen Hazzah、Walter

  Oney和Geoff Chappell,他们的回答是:这一部分是空的。Win95为了图省事,就

  把1MB~4MB的线性地址空间也当作DOS内存区,这样Win95在DOS VM之间切换

  时,就可以页面表目录项(Page Table Directory Entry)为单位来进行。这样虽说


  浪费了3MB的地址,却换来了DOS VM切换的高效率。


  那图1中标出的①又是指的什么呢?呵呵,Win95有趣得很,为了使系统、Win16应

  用程序能与DOS应用程序互相协作,于是在0~1MB之间,其实是紧挨着1MB的下

  面,放了一个Win16全局堆(其实是Win16全局堆很小的一部分)。说到这里,笔者

  想起了一个深受大家喜爱的DOS下的编辑器Quick Edit 4.0,这个编辑器有一个非常


  有趣的功能:能与Windows共享剪贴板。当时我们猜想它一定用到了未公开的DPMI

  调用,现在从图1来看,肯定是①部分的Win16全局堆帮了它的忙啦。


  同时请注意图1中还有一个②,这部分我们称作Win16全局堆的高端部分。为什么要

  在这里安置一个Win16的全局堆?它是用来作什么的呢?


  这个问题的答案是:为了高效率地切换DOS VM。


  每一个DOS VM在大于3GB的地址空间都有一个备份,Win95在DOS VM之间进行

  切换时,只是简单切换一下页面表目录的第一项就可以了。所以说,如果一个VxD

  想访问某个DOS VM,没有必要一定要等到该DOS VM成为当前VM才能访问,它可

  以直接去②访问那个DOS VM的备份。这个DOS VM备份的地址我们称作High-

  linear address。


  后面的文章中,我们将详细讲到如何在VxD中访问DOS VM。



--

    寻寻觅觅,冷冷清清,凄凄惨惨戚戚。乍暖还寒时候,最难将息。  
    三杯两盏淡酒,怎敌他晚风来急!雁过也,正伤心,却是久相识。  
    满地黄花堆积,憔悴损,如今有谁堪摘!守着窗儿,独自怎生得黑?
    梧桐更兼细雨,到黄昏,点点滴滴。这次第,怎一个愁字了得!    

※ 来源:·哈工大紫丁香 bbs.hit.edu.cn·[FROM: 202.118.229.253]
[百宝箱] [返回首页] [上级目录] [根目录] [返回顶部] [刷新] [返回]
Powered by KBS BBS 2.0 (http://dev.kcn.cn)
页面执行时间:6.619毫秒