荔园在线

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

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


发信人: zzt (pig), 信区: Microsoft
标  题: windows的内存管理
发信站: 深大荔园晨风站 (Fri Jan  9 19:40:23 1998), 转信

发信人: Scott_Zhong@bbs.ustc.edu.cn (奇妙的微生物), 信区: windows
标 题: Re: 一个基本问题求教 (转载)
发信站: 中国科大BBS站 (Wed Jul 16 03:47:31 1997)
转信站: whbbs!rjgcnews!ustcnews!ustcbbs

> ==> joseph.bbs@bbs.whnet.edu.cn(痴情如我...) 说道:
> 众所周知,dos应用程序只能使用底端的640kb基本内存。但是,另一方面用HIMEN等程
> 序又使得扩展内存可以被使用。这我就不明白了:既然dos 的16bit寻址能力决定只能使

> 640k,那为什么又可以使用上位内存和1M以上的内存呢?

严格的说,寻址能力是与CPU及其所处的运行模式相关的。在实模式下,CPU是采取
段:偏移 的格式寻址的,只能寻到FFFF0+FFFF=10FFEF这么多的字节。对8086,由于
是20根地址线(0~19)这个限制,所以只能寻到2(20)=100000即1M以下这么多地址,
而在10000~10FFEF之间的地址无法存取。虽然这部分地址在形式上用 段:偏移
是可以运行的(如FFFF:0010),但是实际上第20位是没有意义的,如FFFF:0010实际
上等于0000:0000。这就是所谓地址回绕。
286增加到24根地址线,使这种情况发生了变化。在实模式下有了第20根地址线,
即A20。在A20 Enabled 的情况下,实模式可以寻到10000~10FFEF这一段约为64K的
地址,这就是所谓的HMA。386以上为32根地址线,自然也是如此。

以上说的是实模式的情况。在保护模式下,由于寻址方式不再是 段:偏移 的
格式,所以可以寻到地址线所能允许的最大内存范围。如286有24根地址线,就有
2(24)=16M可以利用。386以上是32根地址线,就有4GB这么大的地址空间。

在386以上,有了一种新的模式叫做Virtual 8086模式,也是一种保护模式,
但是绝大多数实模式下的应用程序依然可以在这种模式下运行,因为寻址方式依然
是 段:偏移。但是这种寻址在V86管理程序的控制下可以映射到扩展内存,即有一个
逻辑地址到物理地址的转换,而这个对用户程序是透明的。V86模式主要是为保护模式
操作系统(如Windows)兼容实模式程序而设计的。在这样的操作系统下,可以运行多
个DOS程序,它们都有自己的“低端640K”空间,但是在物理上却映射在不同的物理
地址上。
对于目前运行于386以上微机的DOS,在装入诸如EMM386这样的管理程序后,系统
实际上是处于Virtual 8086模式中。

DOS原先当然是为实模式设计的,但是随着CPU的发展和内存的增多,从DOS 5.0
开始,已经对DOS有了扩展,即可以利用UMB,HMA等等,可以使实模式下的程序直接
寻到0~10FFEF范围的地址。如果要利用所有的内存(如16M),程序需要调用象HIMEM
这样的扩展内存管理器,实际上是必须切换到保护模式,再切回实模式或者V86模式。
但是这样的利用只是有限的,比如将扩展内存用作磁盘缓存,或者设为虚拟盘等,即
只能用作储存数据的地方,而不能在10FFEF以上的扩展内存里直接运行代码。要想充
分发挥32位CPU的功能,就必须使用保护模式。


--
走过天涯路 终究还是回头
看尽花似海 如雪落

※ 来源: 中国科大BBS站 [bbs.ustc.edu.cn]

                                [返回首页] [分类讨论区] [全部讨论区]

--
日出东方,唯我不败;
    天上地下,唯我独尊。

※ 来源:.深大荔园晨风站 bbs.szu.edu.cn.[FROM: 202.192.140.210]


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

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