能力
1、隔离进程
物理内存通过虚拟地址空间访问,虚拟地址空间与进程一一对应
每个进程都认为自己拥有了整个物理内存,进程之间彼此隔离,一个进程中的代码无法更改正在由另一进程或操作系统使用的物理内存
2、提升物理内存利用率
有了虚拟地址空间后,操作系统只需要将进程当前正在使用的部分数据或指令加载入物理内存
3、简化内存管理
进程都有一个一致且私有的虚拟地址空间,程序员不用和真正的物理内存打交道,而是借助虚拟地址空间访问物理内存,从而简化了内存管理
4、多个进程共享物理内存
进程在运行过程中,会加载许多操作系统的动态库
这些库对于每个进程而言都是公用的,它们在内存中实际只会加载一份,这部分称为共享内存
5、提高内存使用安全性
控制进程对物理内存的访问,隔离不同进程的访问权限,提高系统的安全性
6、提供更大的可使用的内存空间
可以让程序拥有超过系统物理内存大小的可用内存空间
这是因为当物理内存不够用时,可以利用磁盘充当,将物理内存页(通常大小为 4 KB)保存到磁盘文件(会影响读写速度),数据或代码页会根据需要在物理内存与磁盘之间移动
主存
概念
主存又名物理内存,指的是硬件上的内存,因为CPU可以直接从物理内存中读取数据和指令
主存可以看做是一个由M个连续的字节大小的单元组成的数组。每个字节都有一个唯一的物理地址。第一个字节的地址是0,此后累加
CPU访问内存的最简单的方式是物理寻址
图解
这是一条加载指令,CPU在执行这条指令的时候,生成一个有效的物理地址,通过内存总线,把这个物理地址传递给主存,主存取出物理地址4处开始的4个字节,将它返回给CPU
缺点
1、内存空间利用率低
多个进程对内存的使用会使内存碎片化,当需要分配一片很大的内存空间,有足够的空闲内存,但是没有连续空闲内存,内存碎片被浪费
2、读写内存不安全
物理内存不限制访问,任何地址都可以读写
3、进程间不安全
进程之间没有独立的地址空间,一个进程有可能执行到恶意代码或者错误指令,修改了其他进程的数据,甚至修改内核地址空间的数据
4、内存读写的效率低
多个进程同时运行,需要分配给进程的内存总和大于实际可用的物理内存时,需要将其他程序暂时拷贝到硬盘中,然后将新的程序装入内存运行
由于大量的数据频繁装入装出,内存的使用效率会非常低
虚拟内存
概念
虚拟内存是计算机系统管理的一种技术。它使得应用程序认为它拥有连续可用的内存(一个连续完整的地址空间),可以使得大型程序的编写变得更容易
虚拟内存也可以使多个进程共享一个运行库,并且通过分割不同进程的内存空间来提高系统的安全性
使用虚拟地址取代物理地址
核心概念
物理地址
是真正的物理内存中地址,更具体点来说是内存地址寄存器中的地址
地址转换
操作系统一般通过 CPU 芯片中的一个重要组件 MMU(Memory Management Unit,内存管理单元) 将虚拟地址转换为物理地址,这个过程被称为 地址翻译/地址转换(Address Translation)
好处
1、多个虚拟内存可以指向同一个物理地址
2、虚拟内存空间可以远远大于物理内存空间
映射方式
1、分段机制
概念
以段(—段 连续 的物理内存)的形式管理/分配物理内存
应用程序的虚拟地址空间被分为大小不等的段,段是有实际意义的,每个段定义了一组逻辑信息,例如有主程序段 MAIN、子程序段 X、数据段 D 及栈段 S 等
核心概念
段表
分段管理通过 段表(Segment Table) 映射虚拟地址和物理地址
虚拟地址组成
段号
标识着该虚拟地址属于整个虚拟地址空间中的哪一个段
地址翻译过程
过程
1、MMU首先解析得到虚拟地址中的段号
2、通过段号去该应用程序的段表中取出对应的段信息(找到对应的段表项)
3、从段信息中取出该段的起始地址(物理地址)加上虚拟地址中的段内偏移量得到最终的物理地址
2、分页机制
概念
把主存(物理内存)分为连续等长的物理页,应用程序的虚拟地址空间也划分为连续等长的虚拟页。
核心概念
页表
分页管理通过 页表(Page Table) 映射虚拟地址和物理地址
分页机制下,每个应用程序都会有一个对应的页表
虚拟地址组成
页号
通过虚拟页号,可以从页表中取出对应的物理页号
页内偏移量
物理页其实地址+页内偏移量=物理内存地址
地址翻译过程
过程
1、MMU首先解析得到虚拟地址中的虚拟页号
2、通过虚拟页号去该应用程序的页表中取出对应的物理页号
3、用该物理页号对应的物理页起始地址(物理地址)加上虚拟地址中的页内偏移量得到最终的物理地址
3、段页机制
实现方式
1、先将程序划分为多个有逻辑意义的段,就是前面提到的分段机制
2、再把每个段分为多个页,也就是对分段划分出来的连续空间,再划分固定大小的页
虚拟地址组成
1、段号
2、段内页号
3、页内位移
地址变换
1、访问段表,得到页表的起始地址
2、访问页表,得到物理页号
3、将物理页号和页内位移组合,得到物理地址