虚拟内存机制

计算机的存储系统

寄存器是cpu的小太监,通过寄存器递数据给cpu最快
在这里插入图片描述
为什么要有虚拟内存?
进程物理地址不隔离,没有权限保护。
内存使用效率低,从磁盘和内存间来回切换。
程序运行的地址不确定,分配随机。

进程的虚拟地址空间
每个进程都有自己独立的4G内存空间(32位机)
虚拟内存空间通过MMU来和真实的物理地址产生联系
计算机明明没有那么多个内存(n个进程就需要n*4G内存)

虚拟内存和物理内存如何建立起来联系的呢?

Linux的虚拟内存
Linux把虚拟内存若干个大小相等的存储分区,Linux把这样的分区叫做页。为了换入换出的方便,物理内存也就按大小分为若干个块。由于物理内存中的快空间是用来容纳虚存页的容器,所以物理内存中的块叫做页框。
==页和页框==是Linux实现虚拟内存技术的基础。

在这里插入图片描述

分页和分表

在系统启动时,操作系统将真个物理内存以4K为单位,划分为各个。之后进行内存分配时,都以页为单位,那么虚拟内存页对应物理内存页的映射表就大大减小了,在4G内存的情况下,只需要8M的映射表即可,一些进程没有使用到的虚拟内存,并不需要保存映射关系,而且Linux还为大内存设计了多级表,可以进一步减少了内存消耗。操作系用虚拟内存到物理内存的映射表,就称为页表(放在4G中的虚拟地址空间的内核虚拟内存中)。
在这里插入图片描述

在这里插入图片描述

页表(映射表)

在这里插入图片描述
处理器遇到的地址都是虚拟地址,虚拟地址和物理地址都分成页码(页框码)和偏移值两部分。
在由虚拟地址转换为物理地址的过程中,偏移值不变,而页码和页框码之间的映射就在一个映射记录表—页表中。
在这里插入图片描述

页表共享

在多程序系统中,常常有多个程序需要共享同一段代码或数据的情况。在分页管理的存储器中,这个事情很好办:让多个程序共享同一个页面即可。
具体方法:当这些相关程序的虚拟空间的页面在页表中指向内存中的同一个页框。这样,当程序运行并访问这些相关页面时,就都对同一个页框中的页面进行访问,而该页框中的页就被这些程序所共享。

在这里插入图片描述

虚拟内存带来的好处

进程内存管理
内存完整性:由于虚拟内存对进程的“欺骗”,每个进程都认为自己获取的内存是一块连续的地址,我们在编写应用程序时,就不用考虑大块地址的分配,总是认为系统有足够的大块内存即可。
安全:由于进程访问内存时,都要通过页表来寻址,操作系统在页表上添加各种访问权限标识位,就可以实现内存的权限控制。

数据共享(windows的动态链接库就是使用了这种技术(dll文件))
通过虚拟内存更容易实现内存和数据的共享。
在使用虚拟内存时,系统只需要将进程的虚拟内存地址指向库文件所在的物理内存地址即可。
通过虚拟内存使用共享内存也很简单,系统只需要将各个进程的虚拟内存地址指向系统分配的共享地址即可。

SWAP
时间和理论证明:一个应用程序总是逐段被运行的,而在一段时间内会稳定运行在某一段程序里。
虚拟内存可以帮助进程“扩充”内存。
linux提出swap概念,Linux中可以使用swap分区,再分配物理内存,但可用的内存不足时,将暂时不用的内存数据放到磁盘上,让有需要的进程先使用,等进程在需要使用这些数据时,再将这些数据加载到内存中,通过swap技术,可以让进程使用更多的内存。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值