荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: Jobs (温少), 信区: Program
标  题: Windows 95内存管理
发信站: BBS 荔园晨风站 (Thu Mar 18 16:01:28 1999), 转信


                 Windows 95内存管理

    安徽广播电视大学计算中心 李宁辉
    Windows 95较之Windows 3.X在系统稳定性方面具有很大改进,系
统更加完善,如对GPF(General Protect Fault,常规保护错误)之类的
问题的处理。那么,Windows 95采取了哪些措施来提高系统稳定性呢?
我们先从内存管理说起。
    32位保护模式是Windows 95和Windows NT采用的内存管理方式,
而DOS采用的是16位实模式,Windows 3.X采用的是16位保护模式。下
面分别介绍这三种方式。
    16位实模式
    80286、80386、80486、Pentium处理器都可以使用实模式。在实
模式里,由于地址总线宽度为20位(220=1MB),因此寻址空间被限制在1
MB以内。实际寻址是通过成对"段地址:偏移地址"来实现的,通过成对
使用不同的值,就可以访问1MB物理内存内的任何位置。例如,通过下
面这张表可以看出:不同的"段地址:偏移地址"对可能指向内存中的同
一个物理位置。
    "段地址:  偏移地址"对   物理地址
    1000:    40       10040
    1001:    30       10040
    1002:    20       10040
    在实模式,段地址代表的值已经是内存段的起始基准地址;实际的
地址是由CPU计算出来的——只需段地址向左移动4位再加上偏移地址
即可。使用这种寻址方式,用户应用程序可以在1MB的物理存储空间内
访问任何位置。这种寻址方式不能实施多任务运行环境,因为它没有
提供任何一种起码的内存保护机制,用户应用程序在内存中有可能互
相冲突。对于多任务运行环境,内存保护是不可缺少的。实模式寻址
方式的优点是简单、快速,这就是为什么DOS系统性能比较高的原因。
    16位保护模式
    16位保护模式与实模式的根本区别在于用于访问物理内存位置的
逻辑不同。在16位保护模式内,我们看到的也是一对16位值——"段地
址:偏移地址"。但"段地址"代表的值已不是"实模式"中段的起始基准
地址了,而是被分成了三部分,分别称为RPL、TI、SELEC TOR。它们的
含义分别是:
    · RPL(Requestor Privilege Level):请求符优先级,占用"段地
址"的第1、2位,可以有四种选择:00、01、10、11,用于指示处理器和
操作系统对正在执行的处理进行检查,看看它们的优先级之间是不是
有不一致的地方。这是一种简单的对系统执行的处理进行保护的方式

    ·TI(Table Indicator):表指示符,它占用"段地址"的第3位。可
以有两种选择:0、1,用于指示描述符是在LDT(局部描述表,Local Des
cription Table)中,还是在GDF(描述表,Global Description Table)
里。
    ·SELECTOR:选择符,它占用"段地址"的第4位到第16位,长度为13
位二进制位,共有8192种可能的组合(213=8192)。选择符起着对LDT或
GDT表进行索引的作用。LDT或GDT中存放的是进程的描述符,共有8192
个描述符,每个描述符有8个字节长。因此LDT和GDT的大小不能超过64
K字节(8192×8=64K)。
    描述符反映了进程在内存中的基本情况。每个描述符的头两个字
节没有使用,第三个字节叫做"存取字节"(Access Byte),它描述了正
在引用的内存区域的一些特征。表1阐述了存取字节里,这8个二制进
位在16位保护模式处理器内的运用情况。表1 存取字节的结构
    在这张表中,DPL是一种特定的数据,处理器把它与当前段地址内
的RPL进行比较,从而比较出指令的优先级别。描述符的第四到第六个
字节存放的是系统的基准地址,由于有24位可用,所以物理寻址空间就
成了16MB(224=16MB)。描述符的最后两个字节叫做"范围限制",系统
利用这种信息来定义内存段的总长度。
    从以上叙述可知,在16位保护模式下,段地址代表的值用于访问一
个正确的描述符,从描述符中,我们可以得到要访问段的基准地址及段
的总长度。由于段的总长度有16位,因此它可以表达一个64K大小的区
域。很显然,计算一个内存的物理地址时,"基准地址值+偏移地址值"
的值必须小于"基准地址值+范围限制"的值。否则,处理器就会产生一
个"常规保护错误",这是一种致命的错误,会导致系统崩溃,Windows 3
.X把它解释成"不可恢复的应用程序错误"。事实上,这就是"保护模式
"这个术语的全部含义。处理器本身会禁止应用程序访问它自己以外
的内存区域,以保护正在执行的其它程序,系统作为一个整体也得到了
保护。
    Windows 3.X在进行系统实施的时候,所有的应用程序都在一个单
一的物理地址空间内运行,这个空间大小不能超过16MB。虽然它不是
直接生成物理地址,而是通过GDT或LDT 表来生成物理地址,但用户程
序使用实际物理地址寻址这一点并没有改变。这就为由于应用程序编
写不好或由于其它原因造成的系统崩溃埋下了伏笔。16位保护模式这
种方案可以获得较高的性能,并能够实现简单的进程间的通信,但它的
健壮程度和可靠性还是远远不够。
    32位保护模式
    32位保护模式的工作原理类似于16位保护模式。起点还是一个"
段地址:偏移地址"对,但是一个显著的区别在于:第二部分(偏移地址)
变成了32位。另一个区别在于它们的描述符,在32位方式下,8个字节(
64个二进制)全部派上了用场,其中定义了下述条目:
    条目    长度
    基准地址  32位
    范围限制  20位
    存取权限  12位
    存取权限含义与16位保护模式基本相同,但增加了4位,其中一位
用字母G标识,它有两种选择0、1。G位称为"间隔尺寸"位,它为范围限
制值提供了一个乘法因子。假如间隔尺寸为0,量度单位就是一个单字
节,这样,一个段不能超过1MB(1×220=1MB)。假如间隔尺寸为1,量度
单位就成了4096个字节,一个段的大小就是4GB(4096×2020=4GB)。这
种方案把描述符的长度调节在8个字节以内,所以它和以前的16位模式
是兼容的。
    32位保护模式在计算内存地址时,段地址包含的值不再计入其中
。段地址的目的是标识指向内存区的一个描述符,拥有一定数目的描
述符就意味着有一定数目的内存段。寻址方式完全以偏移值为基础,
内存的量度单位是页,内存分段消失了。Windows 95或NT系统使用了4
GB的虚拟地址空间,4GB的虚拟地址空间共被分割成一百个页,每个页4
K字节。通过分页技术,我们可以仿真4GB范围内的一个物理地址,而不
管其真正安装的物理内存容量是多少(前提是使用一部分硬盘空间)。
通过偏移地址,我们可以把一个线性地址转换成等同的物理地址。
    在Windows 95或NT里,32位偏移地址被真正分割成页目录条目、
页表条目、偏移地址三个部分:
    · 页目录条目(PDE):从第22位到31位,共10位,用于指出页目录
条目在页目录中的位置。
    · 页表条目(PTE):从第12位到第21位,共10位,用于指出页表条
目在页表中的位置。
    · 偏移地址:从0位到第11位,共12位,用于指出在一个帧内的偏
移值。  当操作系统建立一个新的Win 32进程时,会为其分配一块内
存,并为其建立自己的页目录、页表,页目录的地址也同时放入进程的
现场信息中。整个寻址方案至少要用到三种页(页目录、页表和页帧)
,如下图所示。
图1 存取字节的结构
    Windows 95的寻址方式
    从图中可以看出,每当计算一个地址时,系统从控制寄存器CR#3中
读出页目录所在的地址;然后根据PDE的前20位读出页表所在的地址;
再通过PTE的前20位,分页算法最终能够指向包含了实际数据或代码的
页,即页帧;最后通过与偏移地址相加就能指向页帧中的每一存储单元
。可见,应用程序进程是在自己的页目录、页表中寻址,这样就防止了
进程的相互冲突。那么,操作系统是如何防止内存区域重叠的呢?决定
页在内存中位置的是操作系统,而非应用程序。这个位置对应用程序
来说完全是透明的,操作系统的职责是把虚拟地址映射到真正的物理
位置处。
    虚拟8086模式
    为了实现与DOS的兼容性,即在不考虑32位保护模式的前提下执行
8086指令,Windows  95提供了常说的虚拟8086模式。即通过一些软件
组件对硬件进行特殊的控制以及这些软件组件之间的相互作用,实现
在一个虚拟机内对8086处理器进行仿真,如:
    · 处理器提供一套虚拟寄存器、一个虚拟内存地址空间以及相
应的中断,它们可以支持执行所有相关的指令。
    · 根据当前的执行环境,并且依从特定的规则,软件对外部接口(
I/O、中断和异常事件处理)进行控制,使其成为一个VM,即虚拟机。
    我们把对VM进行控制的软件组件叫做虚拟8086监视程序。这是一
种32位的软件模块,它可以对实施虚拟机所需的功能进行控制。这种
方案实现了与DOS的兼容。
    Windows 95的内存映射
    Windows 95和NT将16位的Windows和DOS应用程序与32位的应用程
序在内存中相互隔离开来,这样一旦有某个16位应用程序崩溃,不会影
响整个操作系统。Windows 95内存映射如表2所示。
表2 存取字节的结构
    表2 Windows 95的内存映射
    但对于4GB内存的映射方式来说,Windows 95与NT是各不相同的,
这反映了这两个产品处理Win16代码时的内部区别。Windows NT采纳
了Windows ON Win32(WOW)技术,而Windo ws 95则在它的基础DLL内包
含了真正的Win 16代码。Windows NT可以在它的Win 16层上仿真16位
代码运行,而Windows 95则运行真正的Win16代码。从这点上来说Wind
ows NT的稳定性要好于Windows 95。
    从以上所述可知,Windows 95和NT与Windows 3.X最显著的区别在
于内存寻址方式的全然不同。Windows 3.X使用一个16位的分段内存
寻址方式,所有应用程序共用一个16MB 的单一物理地址空间,应用程
序使用物理地址进行寻址。Windows 95使用的是线性内存寻址方式,
这是一种分页式的内存管理方式,消除了段的限制,数据的读写以每页
4K字节为单位,而不像Win 16那样采取长度变化的分段机制。这种分
页机制最终结果是大大简化了读写操作,降低了整体存取时间。使用3
2位的线性内存寻址方式,用户应用程序在一个4GB的虚拟内存空间中
运行,应用程序只能使用虚拟地址进行寻址,不能进行绝对地址的操作
,每一个进程都分配一个唯一的虚拟地址空间,且互不干扰。总之,Win
dows 95通过采用虚拟内存、线性内存寻址的措施极大地提高了系统
的稳定性,为实现抢先式多任务、多线性的操作打下了基础。

                                   (*红茶馆*)

--
※ 来源:.BBS 荔园晨风站 bbs.szu.edu.cn.[FROM: 192.168.2.88]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店