【虚拟内存机制】

虚拟内存机制

1. 计算机的存储系统

在这里插入图片描述

2. 为什么要有虚拟内存

在早期的计算机中,是没有虚拟内存的概念的。我们要运行一个程序,会把程序全部装入内存,然后运行。当运行多个程序时,经常会出现以下问题:

  • 进程地址空间不隔离,没有权限保护。
    由于程序都是直接访问物理内存,所以一个进程可以修改其他进程的内存数据,甚至修改内核地址空间中的数据。
  • 内存使用效率低
    当内存空间不足时,要将其他程序暂时拷贝到硬盘,然后将新的程序装入内存运行。由于大量的数据装入装出,内存使用效率会十分低下。
  • 程序运行的地址不确定
    因为内存地址是随机分配的,所以程序运行的地址也是不确定的。

3. 进程的虚拟地址空间

  1. 每个进程都有自己独立的4G内存空间
  2. 虚拟内存空间通过MMU来和真实的物理内存产生联系

在这里插入图片描述

计算机实际没有折磨多内存,进程以为自己独自拥有4G内存(n个进程需要n*4G内存)
每个进程都存有自己的页表,是自己的虚拟内存和物理内存的映射,所以页表放在内核区

4. 虚拟内存和物理内存如何建立起联系的

  • 虚拟地址空间分成若干个大小相等的分区,叫页,为了换入换出方便,物理内存也分成了大小相等的若干个块。叫页框。页与页框是实现虚拟内存的技术的基础

分页和分表

  • 在系统启动后,操作系统将整个物理内存以4K为单位,划分各个页。之后进行内存分配时,都以页为单位。
  • 操作系统虚拟内存和物理内存的映射就称为页表

虚拟内存的页、物理内存的页框及页表
在这里插入图片描述

  • 为了使得虚拟内存和物理内存进行映射,则需要将虚拟内存的页码和物理内存的页框码,放到页表中,一一对应。
    在这里插入图片描述
    虚拟地址、物理地址的转换
    在这里插入图片描述
  • 处理器遇到的地址都是虚拟地址,虚拟地址和物理地址都分成页码(页框)和偏移量俩部分组成。在虚拟地址转换成物理地址的过程中,偏移值不变,而页码和页框码之间的映射就在一个映射记录表——页表中

5. 页表共享

  • 在多程序系统中,常常有多个程序需要共享同一段代码。可以让多个程序共享同一个页面即可
  • 具体方法:相关程序的虚拟地址空间页面在页表中指向内存中的同一个页框。

在这里插入图片描述

6. 虚拟内存带来的好处

进程内存管理

  • 内存的完整性:每个进程误以为自己拥有4G的内存,虚拟地址允许程序不用将地址空间中的每一页都映射到物理内存,同时不需要映射连续的物理内存,这使得运行大程序称为可能。
  • 数据共享:多个进程可能访问同一段代码,此时只需要将这些进程的页表的页框码指向同一个。
  • 让物理内存扩充成更大的逻辑内存,从而让程序获得更多的可用内存。

虚拟技术

  • 虚拟内存使用了空分复用技术,它将物理内存抽象为地址空间,每个进程都有各自的地址空间。地址空间的页被映射到物理内存,地址空间的页并不需要全部在物理内存中,当使用到一个没有在物理内存的页时,执行页面置换算法,将该页置换到内存中

内存交换与内存覆盖

  • 内存覆盖及特点

由于程序运行时并非任何时候都要访问程序及数据的各个部分(尤其是大程序),因此可以把用户空间分成为一个固定区和若干个覆盖区。将经常活跃的部分放在固定区,其余部分按照调用关系分段,首先将那些即将要访问的段放入覆盖区,其他段放在外存中,在需要调用前,系统将其调入覆盖区,替换覆盖区中原有的段。

  • 覆盖技术的特点:是打破了必须将一个进程的全部信息装入内存后才能运行的限制,但当同时运行程序的代码量大于主存时仍不能运行,再而,大家要注意到,内存中能够更新的地方只有覆盖区的段,不在覆盖区的段会常驻内存。
  • 内存交换及特点

交换(对换)技术的设计思想:内存空间紧张时,系统将内存中某些进程暂时换出外存,把外存中某些已具备运行条件的进程换入内存(进程在内存与磁盘间动态调度)

  • 换入:把准备好竞争CPU运行的程序从辅存移到内存。
  • 换出:把处于等待状态(或CPU调度原则下被剥夺运行权力)的程序从内存移到辅存,把内存空间腾出来。

总结

  • 页表当中存放的是虚拟地址与物理地址的映射,当映射的物理地址存在,则直接从物理内存中取出数据,如果不存在,则需要进行页面置换,从磁盘当中换入所需要的页面。
    • 也就相当于虚拟地址 = 物理内存 + 磁盘
  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小呆鸟_coding

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值