7.3.1 页式虚拟内存管理概念

物理内存(即实内存)管理

特点 缺点
1 源程序直接使用内存的物理地址 程序间容易访问冲突
2 程序必须全部装入内存才能运行 内存太小程序无法运行
3 程序占用连续的一片内存 产生内存碎片
4 多程序同时运行容易相互干扰 不安全

改善物理内存管理的相关技术

  • 内存拼接
  • 交换技术(Swapping)
  • 覆盖技术(Overlay)

虚拟内存管理的目标

  • 使得大的程序能在较小的内存中运行
  • 使得多个程序能在较小的内存中运行(/能容纳下)
  • 使得多个程序并发运行时地址不冲突(/方便、搞笑)
  • 使得内存利用效率高:无碎片,共享方便

虚拟内存管理的实现思路

程序运行时,只把当前必要的很小一部分代码和数据装入内存中,其余代码和数据需要时再装入,不再运行的代码和数据及时从内存删除。

实际内存很容易就能满足上述的内存需求。

程序运行的局部性

  • 程序在一个有限的时间段哪访问的代码和数据往往集中在有限的地址范围内。
  • 把程序一部分装入内存在较大概率上也足够让其运行一小段时间。

典型虚拟内存管理方式

  • 页式虚拟内存管理
  • 段式虚拟内存管理
  • 段页式虚拟内存管理

页式虚拟内存管理

概念

把进程空间(虚拟)和内存空间划成等大小的小片

  • 小片的典型大小:1K、2K或4K
  • 进程的小片—页
  • 内存的小片—页框

  • 内存以页框为单位分配使用
  • 进程以为单位装入内存
    • 只把程序的部分页装入内存即可运行
    • 页在内存中占用的页框不必相邻
    • 需要新页时,按需从硬盘掉入内存
    • 不再运行的页及时删除,腾出空间

7.3.2 页式和页式地址映射

页式系统中的地址

虚拟地址(VA)可以分解成页号P和页内偏移W

  • 页号(P)

    VA所处页对的编号=VA/页的大小

  • 页内偏移(W)

    VA所处页的偏移=VA%页的大小

例子

VA=2500;页面大小1K(\(10^{12}\))

\[P=\frac {2500}{1024} = 2\\
W=2500\, \% \,1024 =452
\]

P和W的另一种计算方法(计算机中)

已知

页的大小:\(2^n\)单元

P和W计算

页号\(P=VA>>n\)

页内偏移\(W=低n位=VA\, \&\&\,(2^n-1)\)

页面映射表

记录了页框之间的对应关系,也叫页表

页号:登记程序地址的页号

页框号:登记页所在的物理页号

页面其他特性:登记含存取权限在内的其他特性

页表例子:一个进程、4页

页式地址映射

功能

虚拟地址(页式地址)→物理地址

过程【三步】

  1. 从VA分离页号P和页内偏移W

  2. 查页表:以P位索引查页框号P'

  3. 计算物理地址MA

    \(MA=P'\times 页大小 + W\)

页式地址映射的例子

MOVE R1, [2500]

解:

  1. 分离P,W

    \[P=\frac {VA}{页面大小}=\frac{2500}{1024}=2\\
    W=VA\,\%\,页面大小=2500\,\%\,1024=452
    \]

  2. 查找页表

    P=2,P'=7

  3. 计算\(MA=P'\times 页大小 + W\)

    \[MA=7\times1024+452=7620
    \]

7.3.3 快表技术和页面共享技术

快表机制(Cache)

快表的概念

  • 慢表:页表放在内存中
  • 快表:页表放在Cache中

快表的特点

  • 容量小、访问快、成本高

  • 快表是慢表的部分内容的复制

  • 地址映射时优先访问快表

    • 若在快表中找到所需数据,则称为“命中”
    • 没有命中时,则需要访问慢表,同时更新快表
  • 合理的页面调度策略能使快表具有较高命中率

快表机制下地址映射过程

页面的共享

代码共享的例子—文本编辑器占用多少内存

  • 文本编辑器:150KB代码段50KB的数据段
  • 有10进程并发执行该文本编辑器
  • \(占用内存=10\times(150+50)KB=2M\)
  • 如果采用代码段共享,代码段在内存中只有一份真实存储
    • \(占用内存=150+10\times50=650KB\)

页面共享原理

  • 在不同进程的页表中填上相同的页框号,多个进程能访问相同的内存空间,从而实现页面共享
  • 共享页面在内存中只有一份真实存储,节省内存。

【av68676164(p48-p50】虚拟内存管理(1)的更多相关文章

  1. 【av68676164(p51-p53)】虚拟内存管理(2)

    虚拟内存管理(2) 7.3.4 缺页终端 分级存储体系 cache+内存+辅存 页表扩充-带中断位的页表 页号 页框号 中断位I 辅存地址 访问位 修改位 1 1 0 0 0 1 中断位I-标志该页是 ...

  2. 十问 Linux 虚拟内存管理 (glibc) (二)

    版权声明:本文由陈福荣原创文章,转载请注明出处: 文章原文链接:https://www.qcloud.com/community/article/184 来源:腾云阁 https://www.qclo ...

  3. SoC嵌入式软件架构设计II:没有MMU的CPU虚拟内存管理的设计和实现方法

    大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其它代码. 我们PC然在同一时间大量的应用,地址空间差点儿能够整个线性地址空间(除了部分留给操作系统或者预留它用).能够觉 ...

  4. SoC嵌入式软件架构设计II:否MMU的CPU虚拟内存管理的设计与实现方法

    大多数的程序代码是必要的时,它可以被加载到内存中运行.手术后,可直接丢弃或覆盖其他代码.我们PC然在同一时间大量的应用,能够整个线性地址空间(除了部分留给操作系统或者预留它用),能够觉得每一个应用程序 ...

  5. windows虚拟内存管理

    内存管理是操作系统非常重要的部分,处理器每一次的升级都会给内存管理方式带来巨大的变化,向早期的8086cpu的分段式管理,到后来的80x86 系列的32位cpu推出的保护模式和段页式管理.在应用程序中 ...

  6. OS之内存管理 --- 虚拟内存管理(二)

    关于虚拟内存管理之前的请看:OS之内存管理 - 虚拟内存管理(一) 帧分配 每个进程对的最小帧数是由操作系统的体系结构决定的,但是最大帧数是由可用物理内存的数量决定的.所以在这之间,对于进程的帧的分配 ...

  7. linux内核内存分配(三、虚拟内存管理)

    在分析虚拟内存管理前要先看下linux内核内存的具体分配我開始就是困在这个地方.对内核内存的分类不是非常清晰.我摘录当中的一段: 内核内存地址 ============================ ...

  8. Linux的虚拟内存管理-如何分配和释放内存,以提高服务器在高并发情况下的性能,从而降低了系统的负载

    Linux的虚拟内存管理有几个关键概念: Linux 虚拟地址空间如何分布?malloc和free是如何分配和释放内存?如何查看堆内内存的碎片情况?既然堆内内存brk和sbrk不能直接释放,为什么不全 ...

  9. Unix系统编程()虚拟内存管理

    在之前学到过进程的内存布局中忽略了一个事实:这一布局存在于虚拟文件中. 因为对虚拟内存的理解将有助于后续对fork系统调用.共享内存和映射文件之类的主题阐述,这里还要学习一下有关虚拟内存的详细内容. ...

随机推荐

  1. 数据可视化基础专题(四):Pandas基础(三) mysql导入与导出

    转载(有添加.修改)作者:但盼风雨来_jc链接:https://www.jianshu.com/p/238a13995b2b來源:简书著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明出处 ...

  2. 数据可视化之powerBI基础(四)深入了解PowerBI的工具提示功能

    https://zhuanlan.zhihu.com/p/36804592 在PowerBI上个月的更新中,增加了工具提示功能,这项功能允许您将自己的可视化作品放置到工具提示中,通过鼠标悬停的方式来展 ...

  3. POJ 1050 To the Max 最详细的解题报告

    题目来源:To the Max 题目大意:给定一个N*N的矩阵,求该矩阵中的某一个矩形,该矩形内各元素之和最大,即最大子矩阵问题. 解题方法:最大子序列之和的扩展 解题步骤: 1.定义一个N*N的矩阵 ...

  4. Kubernetes实战指南(三十一):零宕机无缝迁移Spring Cloud至k8s

    1. 项目迁移背景 1.1 为什么要在"太岁"上动土? 目前公司的测试环境.UAT环境.生产环境均已经使用k8s进行维护管理,大部分项目均已完成容器化,并且已经在线上平稳运行许久. ...

  5. scrapy shell 遇到的问题

    有时候用scrapy shell来调试很方便,但是有些网站有防爬虫机制,所以使用scrapy shell会返回403,比如下面 有两种解决方法: (1):第一种方法是在命令上加上-s USER_AGE ...

  6. Java中多线程的使用(超级超级详细)线程池 7

    Java中多线程的使用(超级超级详细)线程池 7 什么是线程池? 线程池是一个容纳多个线程的容器,线程池中的线程可以重复使用,无需反复创建线程而消耗过多的资源 *使用多线程的好处: 1.降低消耗,减少 ...

  7. DEP(Data Execution Prevention) 数据执行保护

    1.原理 数据执行保护,简称“DEP”,英文全称为“Data Execution Prevention”,是一组在存储器上运行额外检查的硬件和软件技术,有助于防止恶意程序码在系统上运行. 此技术由Mi ...

  8. IDEA添加注释常用的快捷键

    1.行注释Ctrl+/ 2.块注释Ctrl+Shift+/ 3.生成类注释 输入/**,然后按回车 (idea上没有生成类注释快捷键的,可以看这里 :idea生成类注释和方法注释的正确方法 ) 4.生 ...

  9. 题解 洛谷 P4695 【[PA2017]Banany】

    考虑用动态点分治来解决像本题这样带修的树上路径问题. 首先对原树进行点分治,建出点分树,在点分树每个节点上用动态开点线段树来维护以该节点为起点,到其点分树子树中每个节点的利润. 查询时只需在点分树上当 ...

  10. 占个坑 未来学qt的时候专用

    今天看了一个大佬发了一个上位机图片便向大佬问道 ”上位机是用什么软件做的“大佬抛下一句qt ,在业界内很通用,windows和linux通吃,便让我萌生了一个想法,去学qt.虽说上位机时常听到,但是自 ...