加入收藏 | 设为首页 | 会员中心 | 我要投稿 桂林站长网 (https://www.0773zz.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 外闻 > 正文

聊聊操作系统的内存管理

发布时间:2021-04-20 17:24:44 所属栏目:外闻 来源:互联网
导读:段号: 标志着该虚拟地址属于整个虚拟地址空间中的哪一段 段内地址(段内偏移): 相对于该段起始地址的偏移量 当 cpu 读取指令时,发现指令的地址是虚拟地址,那么CPU中的MMU 首先判断这个段号是否合法,如果合法, 则通过 段表基址寄存器 找到段表的位置,通
  • 段号: 标志着该虚拟地址属于整个虚拟地址空间中的哪一段
  • 段内地址(段内偏移): 相对于该段起始地址的偏移量

“当 cpu 读取指令时,发现指令的地址是虚拟地址,那么CPU中的MMU 首先判断这个段号是否合法,如果合法, 则通过 段表基址寄存器 找到段表的位置,通过虚拟地址中的段号,找到该段的起始地址,再加上段内地址(段内偏移),就可以得到最终的物理地址

在分段机制下,虚拟内存和物理内存都划分成了不同的段

分段缺点

之所以这样构造是因为会使操作系统很方便的为每个应用程序构造页表,即虚拟页和物理页映射关系表

  • 在虚拟地址空间中,相邻的段所对应的物理内存空间可以不相邻,操作系统能够实现物理内存资源的离散分配,但是这种段式分配方式容易导致在物理内存上出现外部碎片
  • 思想:
    • 将应用程序的虚拟地址空间划分为连续的、等长的虚拟页(4K)
    • 物理地址也是划分为连续的、等长的的物理页
    • 物理页和虚拟页页长固定且相等
    • 在分页机制下,应用程序虚拟地址空间中的任意虚拟页可以被映射到物理内存中的任意物理页上,可以避免外部碎片的问题
    • 分页机制下的虚拟地址也由两部分组成:虚拟页号: 页内偏移量:流程就是:
      1. MMU首先解析虚拟地址中的虚拟页号,检查这个虚拟页号是否合法,通过这个虚拟页号取该应用程序的虚拟页表中找到对应条目(页表起始地址放在页表基地址寄存器)
      2. 然后取出该条目中的物理页号
      3. 最后用该物理页号对应的物理起始地址加上虚拟地址中的页内偏移得到最终的物理地址

      TLB

      首先要说一下局部性原理

      • 时间局部性: 如果执行了程序中的某条指令,那么不久后这条指令很有可能再次执行,如果某个数据被访问过,不久后该数据很可能再次被访问(因为程序中存在大量的循环)
      • 空间局部性: 一旦程序访问了某个存储单元,在不久之后,其附近的存储单元也很有可能会被访问(因为很多数据在内存中都是连续存放的)

      所以,能不能弄一个缓存,缓存这些有可能会被经常被访问的数据呢,从而减少访问页表的次数呢?

      为了减少地址翻译的访问次数,MMU引入TLB(转址旁路缓存 Translation Lookaside Buffer)

      • TLB 硬件采用分层架构,分为L1、L2两层。
        • LI又分为数据TLB和指令TLB,分别缓存数据和指令的地址翻译
        • L2不区分数据和指令
      • TLB缓存了虚拟页号和物理页号的映射关系,类似map,key是虚拟页号,value是物理页号。
        • 如果在TLB中找到则称为TLB命中
        • 没有找到则称之为TLB未命中

(编辑:桂林站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读