• 计组-虚拟地址-上


    虚拟内存

    为什么要有虚拟内存?

    一个系统中的进程总是共享着cpu以及主存资源,但是当一个系统同时运行很多程序的时候就存在问题了。

    1. 不同的进程可能会不小心修改其他进程正在使用的内存,从而导致意想不到的错误。
    2. 当并行程序多的时候每个程序可以使用的内存就会变得很小,程序的性能收到影响,影响用户体验,并且会加剧上述1的情况。

    虚拟内存能提供什么?

    为每个进程提供一个较大的私有的一致的地址空间。并且它所做的所有事情对于上层开发人员,是透明的,上层开发人员只需要享受这些福利。

    它的工作机制是怎样的?

    在虚拟存储器中有三种地址空间:

    1. 虚拟地址空间(虚地址 VA)
    2. 主存地址空间(物理地址 PA)
    3. 赋存地址空间(磁盘地址)

    当CPU通过VA寻找指令或者数据的时候首先将VA交给MMU(存储管理控制部件),这个MMU主要的作用就是通过查位于主存上的地址表将VA转化为PA,然后访问主存数据返还给CPU。大致的工作流程就是这样。接下来我们一步步进行详细分析。
    常见的虚拟存储器将以页为单位进行数据的替换,查找。虚拟地址被划分一个虚拟页号(VPN)和虚拟偏移(VPO)。物理页地址被划分一个物理页号(PPN)以及物理偏移(PPO)。
    image-20210603220535499

    虚拟地址与实地址的低位被划分为偏移,页偏移的大小也相同。
    物理地址与虚拟地址的映射表一般常驻内存,并且每个进程都有自己的页表,页表采用VPN作为索引进行访问,每个表项主要包括有效位以及PPN,读写权限,模式访问权限等信息。页表属于进程控制信息,存放在进程地址空间的内核区。页表在主存中的首地址记录在页表基址寄存器PTBR中。进程切换的时候只用PTBR中的基址值就可以替换页表了。

    image-20210603221027846

    磁盘的空间被划分为交换分区以及数据分区,交换分区主要存放主存中的页面换出的动态修改的数据。数据分区用于存储程序和数据。主存和磁盘的地址空间合称为虚拟地址空间。
    image-20210603221833555

    MMU使用VA查找PA的时候只需将VA中的VAN取出加上PTBR中的值就是主存之中PTE(页表项)的地址,再把VPO直接加在PPN后边就可以得到PA了。
    我们来看一下虚拟地址的完整访问流程
    image-20210603222255010

    上图为页命中的情况:
    CPU使用VA访问MMU,MMU则根据PTBR的值以及VAN得到PTEA访问主存的PTE,若是当前页有效(还在主存之中,找到了物理页号,并且有效)就是用PA访问主存,主存直接将数据返回给CPU.
    image-20210603222652965

    当发生缺页的情况:
    刚开始同样是MMU访问主存中的PTE,但是这次返回的PTE却是无效的,表明要访问的页不在主存之中,MMU触发异常调用OS的缺页异常程序,从磁盘调入页到主存并且更新所有进程的页表,MMU从步骤2开始工作。
    image-20210603223250885

    由于cache经常缓存CPU经常用到的数据,因此会把部分连续的页表项置换到cache当中,MMU访问cache的时候就可能先访问到页表项并且拿到了PA这样MMU再次访问先访问cache看其是否命中如是不命中就将页表数据置换进cache并从MMU中取数据。

    由于cache缓存页表项的颗粒度较大(就是一次缓存一个数据块)。为了提高缓存的命中概率处理器维护一个TLB(转换旁路缓冲区)专门缓存经常用到的页表项。由于TLB表离CPU很近经常称之为块表将主存包括cache当中的表称之为慢表。
    现代处理器一般在查询PA的时候会同时查询块表与慢表,块表如果查到就停止慢表的查找。

    image-20210603224531410

    由于页表需要OS与硬件同时工作(缺页异常处理,页表的维护),当开机的时候OS还没有完全启动(引导完成前)CPU只能采用物理地址访问主存(实模式),引导完成后进入保护模式(虚地址模式)。

  • 相关阅读:
    ps cs5 gif 动画 分解
    api 生成方法
    AVAYA 交换机
    jQuery操作input值
    CMM3 软件升级
    ehcache 使用 缓存:健值,页面,Hibernate,监控
    网络封包分析软件Wireshark
    Hacking Windows 7 SP 1 Using Java Signed Applet Social Engineering Code Execution
    以太网历史
    转:web应用开发的发展方向
  • 原文地址:https://www.cnblogs.com/FCY-LearningNotes/p/14847536.html
Copyright © 2020-2023  润新知