【av68676164(p48-p50】虚拟内存管理(1)
2024-08-27 13:28:53
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
\]
W=2500\, \% \,1024 =452
\]
P和W的另一种计算方法(计算机中)
已知
页的大小:\(2^n\)单元
P和W计算
页号\(P=VA>>n\)
页内偏移\(W=低n位=VA\, \&\&\,(2^n-1)\)
页面映射表
记录了页与页框之间的对应关系,也叫页表。
页号:登记程序地址的页号
页框号:登记页所在的物理页号
页面其他特性:登记含存取权限在内的其他特性
页表例子:一个进程、4页
页式地址映射
功能
虚拟地址(页式地址)→物理地址
过程【三步】
从VA分离页号P和页内偏移W
查页表:以P位索引查页框号P'
计算物理地址MA
\(MA=P'\times 页大小 + W\)
页式地址映射的例子
MOVE R1, [2500]
解:
分离P,W
\[P=\frac {VA}{页面大小}=\frac{2500}{1024}=2\\
W=VA\,\%\,页面大小=2500\,\%\,1024=452
\]查找页表
P=2,P'=7
计算\(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\)
页面共享原理
- 在不同进程的页表中填上相同的页框号,多个进程能访问相同的内存空间,从而实现页面共享
- 共享页面在内存中只有一份真实存储,节省内存。
最新文章
- React Native props &; state
- 两个NOI题目的启迪8皇后和算24
- Oracle补习班第十天
- input、button、文字的对齐水平对齐
- Unity3D——相机跟随物体移动
- android studio 更新 Gradle错误解决方法
- CocoaPods安装和使用及问题:Setting up CocoaPods master repo-b
- Android系统下的动态Dex加载与app速度优化
- 【Chromium中文文档】沙箱FAQ
- ubuntu 经常使用软件及环境
- <;video>;和<;audio>;标签,对视频和音频的支持
- POJ 1486二分图的必要边
- 分享一个C#创建Barcode的DLL
- <;![CDATA[ ]]>;是什么意思
- 很好用的php在线调试工具
- 这些JavaScript编程黑科技
- C语言 知识点总结完美版
- Openstack(七)keystone
- 表格隔行变色_jQuery控制实现鼠标悬停高亮
- vue.js的一些小语法v-for,v-text,v-html,v-on:click
热门文章
- 数据可视化之powerBI技巧(八)Power BI按多列排序的技巧
- 数据可视化之powerBI技巧(四)使用Power BI制作帕累托图
- 关于在JSP页面识别不了EL表达式的情况
- com.aliyun.openservices.shade.com.alibaba.fastjson.JSONException: exepct &#39;[&#39;, but {, pos 1, line 1, column 2
- java中int相除取小数点后两位或限定位数
- Python Ethical Hacking - Malware Analysis(2)
- vue 应用 : 计数器组件
- selenium自动爬取网易易盾的验证码
- 3c数码商城
- nginx 的return配置