
文章插图
虚拟地址空间
由于程序的运行必须运行在真实的物理内存上,而直接操作物理内存的危险性较大,所以通过创建了一个虚拟地址空间,虚拟地址和物理地址之间存在一一映射的关系,程序运行地址和物理地址的隔离,确保不同的进程地址空间被映射到不同的人物理地址空间上去 。从而解决了同一计算机相同程序运行地址不确定的问题,也解决了因程序运行时被其它程序修改物理内存数据直接导致系统奔溃的弊病 。但是物理内存使用效率低下的问题依然没有得到解决 。
三、分页
为了解决物理内存使用效率低下的问题,于是人们又提出了分页的办法 。分页的基本方法是,将地址空间分成许多页,每页的大小由CPU决定,然后由操作系统选择执行页的多少 。有些CPU页的大小为4KB,也有些CPU页的大小为4MB 。假设页大小为4KB,那么4GB的虚拟内存空间共可分为4×1024×1024÷4=1048576页,如果此时计算机安装的内存条大小为512MB,那么512MB的物理内存可分为512×1024÷4=131072页,显然虚拟内存地址空间的页数要比物理内存空间的页数多得多 。
在分段方法中,每次程序的运行都会被全部加载到虚拟内存中;而分页方法则不同,它是将程序的大部分存在硬盘中,此时该部分硬盘称为"交换区",而将少部分要运行的加载到虚拟内存中,通过映射在物理内存中运行,从而提高了物理内存的使用率 。

文章插图
【物理内存与虚拟内存】物理内存与交换区
为了方便CPU高效执行管理物理内存,每一次都需要从虚拟内存中拿一个页的代码放到物理内存 。虚拟内存页有三种状态,分别是未分配、已缓存和未缓存状态 。
未分配:指的是未被操作系统分配或者创建的,未分配的虚拟页不存在任何数据和代码与它们关联,因此不占用磁盘资源;
已缓存:表示的是物理内存中已经为该部分分配的,存在虚拟内存和物理内存映射关系的;
未缓存:指的是已经加载到虚拟内存中的,但是未在物理内存中建立映射关系的 。

文章插图
四、页表
虚拟内存中的一些虚拟页是要缓存在物理内存中才能被执行的,因此操作系统存在一种机制用来判断某个虚拟页是否被缓存在物理内存中,还需要知道这个虚拟页存放在磁盘上的哪个位置,从而在物理内存中选择空闲页或者更新缓存页,并将需要的虚拟页从磁盘复制到物理内存中 。这些功能是由软硬件结合完成的,他存放在物理内存中一个叫页表的数据结构中 。页表的结构如下图所示:

文章插图
页表实际上是一个数组 。该数组存放的是一个称为页表条目(PTE)的结构 。虚拟地址空间的每一个页在页表中,都有一个对应的页表条目(PTE) 。虚拟页地址翻译的时候就是查询的各个虚拟页在页表中的PTE,从而进行地址翻译的 。地址翻译的过程如下所示:

文章插图
假设每一个PTE都有一个有效位和一个n位字段的地址 。其中有效位表示对应的虚拟页是否缓存在了物理内存中 。0表示未缓存 。1表示已缓存 。n位地址字段表示如果未缓存(有效字段为0),n位地址字段不为空的话,这个n位地址字段就表示该虚拟页在磁盘上的起始的位置 。如果这个n位字段为空,那么就说明该虚拟页未分配;如果已缓存(有效字段为1),n位地址字段则不为空,它表示该虚拟页在物理内存中的起始地址 。

文章插图
在上图中,四个虚拟页VP1 , VP2, VP4 , VP7 是被缓存在物理内存中 。两个虚拟页VP0, VP5还未被分配 。但是剩下的虚拟页VP3 ,VP6已经被分配了,但是还没有缓存到物理内存中去执行 。
五、内存管理单元MMU(Memory Management Unit)
内存管理单元MMU的主要功能是虚拟地址到物理地址的转换 。除此之外,它还可以实现内存保护、缓存控制、总线仲裁以及存储体切换 。也就是说程序运行的过程所需要的物理内存地址都是经过一个叫内存管理单元的东西完成的,需要注意的是内存管理单元是硬件管理,而不是软件实现内存管理的 。内存管理单元使每一个程序都有自己独立的虚拟地址空间,提高了物理内存的使用率,它还提供了内存保护功能,可以将特定的内存块设置为读、写或者可执行属性,可以防止被程序恶意窜改内存 。它的工作流程如下所示:
推荐阅读
- 浅析普洱茶的形成历史与发展
- 海都斗茶赛 铁观音与红茶专场今日开赛
- iOS和Android OS的内存管理机制,这才是流畅的根本原因
- 茶叶入菜的技巧与禁忌
- 茶与点心花样搭配 配搭食物需考究
- 邦崴古茶山简介与其普洱茶口感特色
- 经济学界与茶界论道理想好茶
- 茶树次生代谢与茶叶质量安全获教育部资助
- 茶与咖啡,东西文化碰撞的火花
- 齐云道茶,道与茶的完美融合
