• 【虚拟内存机制】


    虚拟内存机制

    1. 计算机的存储系统

    在这里插入图片描述

    2. 为什么要有虚拟内存

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

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

    3. 进程的虚拟地址空间

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

    在这里插入图片描述

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

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

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

    分页和分表

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

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

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

    5. 页表共享

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

    在这里插入图片描述

    6. 虚拟内存带来的好处

    进程内存管理

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

    虚拟技术

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

    内存交换与内存覆盖

    • 内存覆盖及特点

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

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

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

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

    总结

    • 页表当中存放的是虚拟地址与物理地址的映射,当映射的物理地址存在,则直接从物理内存中取出数据,如果不存在,则需要进行页面置换,从磁盘当中换入所需要的页面。
      • 也就相当于虚拟地址 = 物理内存 + 磁盘
  • 相关阅读:
    系列三、其他流
    责任链模式
    复习C部分://1.练习:打印1000~2000的闰年 //2.写一个代码,打印100~200之间的素数 3.goto 跳去哪里
    C语言_文件_进程_进程间通讯 常用函数/命令 + 实例
    Delaunay三角网之逐点插入法(优化版本一)
    【论文阅读】VideoComposer: Compositional Video Synthesis with Motion Controllability
    面试官这一套 Framework 连环炮;看看你能撑到第几步?
    《王家视频教程图书馆》
    java: 将json字符串转换为Map对象,如何保证其顺序不变.
    测试/开发程序员值这么多钱么?“我“不会愿赌服输......
  • 原文地址:https://blog.csdn.net/weixin_45043334/article/details/127758525