读书频道 > 系统 > windows > Windows内核原理与实现
4.1 内存管理概述
2013-05-18 14:45:41     我来说两句 
收藏    我要投稿   

本文所属图书 > Windows内核原理与实现

本书从操作系统原理的角度,详细解析了Windows如何实现现代操作系统的各个关键部件,包括进程、线程、物理内存和虚拟内存的管理,Windows中的同步和并发性支持,以及Windows的I/O模型。在介绍这些关键部件时,本...  立即去当当网订购

在现代计算机系统中,内存(memory)是指处理器可以直接访问,但位于处理器之外的存储器。在硬件上,处理器通过一组地址线连接到这些存储器上,这组地址线构成了内存总线。而在软件上,处理器的许多指令允许用内存单元的地址作为指令的操作数,从而直接操纵这些内存单元。这里提到了内存地址,在Intel x86 体系结构中,内存地址有三种类型:
 
物理地址。即内存存储器的索引,处理器操纵内存芯片时,通过地址线管脚加上电信号来读或写相应的内存单元。在Intel x86 体系结构上,物理地址是一个32位或36位的无符号整数。

虚拟地址(有时候称为线性地址)。在32位系统上,虚拟地址空间可以达到4 GB大小,也就是说,整个空间可以有 232=4 294 967 296 个字节单元。Intel x86 芯片内有专门的电路负责把一个虚拟地址转译成物理地址。

逻辑地址。逻辑地址包含两部分:段(segment)和偏移(offset)。段部分指定了在整个地址空间中的一个基地址以及段空间的大小,当然还有段的一些其他属性。与寻址相关的是段的基址和大小。偏移部分指定了一个逻辑地址相对于段基址的偏移量。此偏移量不能超过段的边界。因此,逻辑地址的实际地址是段基址加上偏移量。Intel x86 芯片也有专门的电路把逻辑地址转译成一个虚拟地址或物理地址。

把一个地址告诉处理器,让它访问相对应的物理内存单元,这一过程是操作系统和处理器相互协作来完成的。处理器最终需要的是一个物理地址,所以,它必须把软件指令中的地址转译成物理地址,在转译过程中可能会涉及一些数据结构,甚至涉及I/O 操作。在这一章中,我们将会看到 Windows 如何利用 Intel x86 的寻址特性来有效地实施内存管理。
 
另外,从操作系统的角度来看,一方面,它需要有效地管理所有的物理内存,使得当一个进程需要内存时,能够分配足够的内存单元给这一进程;另一方面,正如上一章所讲,进程代表一个相对独立的任务,它有一个逻辑上独立的地址空间。不同进程的地址空间应该是相互隔离的。也就是说,在一个进程中用地址A 来访问的内存单元,与在另一个进程中用地址A 访问的是不同的物理内存。这样做可以避免一个进程有意或无意地侵入到另一个进程的地址空间中。这种性质称为地址空间的隔离性,它使得每个进程有自己的私有地址空间。

虽然现代计算机配备的物理内存越来越多,比如现在的PC通常配有1 GB~16 GB 内存,但是,当系统中进程数量增加以后,这些进程所需要的内存数量往往超过了机器的总物理内存,在这种情况下,操作系统必须合理地安排内存的使用,使得内存紧缺时,既不会波及系统本身的稳定性,同时也不会严重影响系统的性能。在现代操作系统中,当发生这种情况时,一般的做法是把不紧急的进程中的数据或代码先存放到外存(通常是硬盘)中,从而把它们占用的物理内存腾出来给紧急的进程使用,或者交给系统使用。以后,当内存紧缺的状况缓解时,系统再把外存中的进程数据或代码装回到已经空闲下来的内存单元中,从而使这些进程有机会继续运行。这两个过程称为内存换出和换入。几乎所有的多进程操作系统都支持这种内存管理。

接下来两小节将分别介绍页式内存管理和段式内存管理,这是两种主流的内存管理方式,并且 Intel x86 处理器都支持。从寻址角度而言,页式管理的核心是如何把虚拟地址转译成物理地址;而段式管理的核心则是如何把“段+ 偏移”形式的逻辑地址转译成物理地址。这里,转译的机制是由芯片硬件提供的,但是转译中用到的数据结构则可能是由操作系统来管理的。此后,我们将讨论一些常用的内存管理算法,然后介绍Windows 内存管理的总体结构,以及Windows 内存管理器包含的一些组件

点击复制链接 与好友分享!回本站首页
分享到: 更多
您对本文章有什么意见或着疑问吗?请到论坛讨论您的关注和建议是我们前行的参考和动力  
上一篇:概述
下一篇:4.1.1 页式内存管理
相关文章
图文推荐
3.4.4 进程生命期管
3.4.2 Windows应用商
3.4.1 Windows应用商
3.4 进程生命期管理
排行
热门
文章
下载
读书

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训
版权所有: 红黑联盟--致力于做最好的IT技术学习网站