内存管理 —— 虚拟存储的基本概念
一、传统存储管理方式的特征、缺点
二、虚拟存储器的定义
主存和辅存共同构成了虚拟存储器。对于应用程序员来说,虚拟存储器是透明的。虚拟存储器即对磁盘存储器进行抽象,将磁盘存储器组织成一个连续的存储器,将主存看成是磁盘存储器的一个高速缓存。因此,虚拟存储器具有主存的速度和辅存的容量,提高了存储系统的性价比。
三、访问过程的步骤
(1)CPU使用虚地址时,由辅助硬件找出虚地址和实地址之间的对应关系,并判断这个虚地址对应的存储单元内容是否已装入主存。
(2)若已在主存中(装入位为1),则通过地址变换,得到一个主存地址,CPU通过该主存地址访问主存指示的实际单元(CPU访问:即以主存地址访问“Cache-主存"体系,如果该主存地址在Cache中,则访问Cache;如果不在Cache中,则访问主存,并把该字所在的块一次性地从主存调入Cache。)
(3)若不在主存中(装入位为0),则把包含这个字的一页或一段调入主存后再由CPU访问。若主存已满,则才采用替换算法置换主存中的一页或一段。
四、虚拟内存的特征
五、虚拟存储技术的实现
(1)请求分页存储管理
虚拟空间与主存空间都被划分成同样大小的页,主存的页称为实页,虚存的页称为虚页。
虚拟地址:分为两个字段,分别是虚页号和页内地址
页表:是一张存放在主存中的虚页号和实页号的对照表,用来实现虚地址和实地址之间的转换。
页表基址寄存器:存放当前运行程序的页表的起始地址,它和虚页号拼接成页表项地址,可以找到对应的页表项。
页表项:分为三个字段,分别是虚页号、实页号和装入位。(装入位为1,表示该页面已在主存中将对应的实页号和虚地址中的页内地址拼接,得到完整的实地址;装入位为0,表示该页面不在主存中,此时要启动 I/O 系统,将该页从辅存调入主存后再供 CPU使用)
虚地址到实地址的变换过程:
- 虚页号和页表起始地址拼接 = 页表项地址
- 页表项地址 → 页表 → 实页号
- 实页号和页内地址拼接 = 主存实地址
优点:页面的长度固定,页表简单,调入方便。
缺点:由于程序不可能是页面的整数倍,最后一页的零头将无法利用而造成浪费。
(2)请求分段存储管理
段式虚拟存储器中的段是按程序的逻辑结构划分的,各个段的长度因程序而异。
虚拟地址:分为两个字段,分别是虚页号和页内地址
段表:是一张存放在主存中的段号和段起点的对照表,用来实现虚地址和实地址之间的转换。
段表基址寄存器:存放当前运行程序的段表的起始地址,它和段号拼接成段表地址,可以找到对应的段表项。
段表项:分为四个字段,分别是段号、段起点、段长和装入位。(装入位为1,表示该段已在主存中将对应的段起点和虚地址中的段内地址相加,得到完整的实地址;装入位为0,表示该段不在主存中,此时要启动 I/O 系统,将该段从辅存调入主存后再供 CPU使用)
虚地址到实地址的变换过程:
- 段号和段表起始地址拼接 = 段表项地址
- 段表地址 → 段表 → 段起点
- 段起点+段内地址 = 主存实地址
优点:段的分界和程序的自然分界相对应,具有逻辑独立性
缺点:段长度可变,容易在段间留下碎片,不好利用,造成浪费
(3)请求段页式存储管理
把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位。
每个程序对应一个段表,每段对应一个页表,段的长度必须是页长的整数倍,段的起点必须是某一页的起点。
- 虚拟地址:分为三个字段,段号+段内页号+页内地址
虚地址到实地址的变换过程:
- 段号和段表起始地址拼接 = 段表地址
- 段表地址 → 段表 → 页表起始地址
- 页表起始地址和段内页号拼接 = 页表项地址
- 页表项地址 → 页表 → 实页号
- 实页号和页内地址拼接 = 主存实地址
优点:兼具页式和段式存储器的优点,可以按段实现共享和保护
缺点:在地址变换过程中需要两次查表,系统开销大
六、快表(TLB)
查找时,快表和慢表同时进行,块表由于根据内容指定地址,一般使用相联存储器。若快表中有此逻辑页号,则能很快地找到对应的物理页号,送入实主存地址寄存器,并使慢表的查找作废,从而就能做到虽采用虚拟存储器但访问主存速度几乎没有下降。
七、虚拟存储器和Cache的比较
(1)相同之处
- 最终目标都是为了提高系统性能,两者都有容量、速度、价格的梯度
- 都把数据划分为小信息块,并作为基本的传递单位,虚存系统的信息块更大
- 都有地址的映射、替换算法、更新策略等问题
- 依据程序访问的局部性原理应用“快速缓存的思想”,将相对活跃的数据放在相对高速的部件中
(2)不同之处
- Cache主要解决系统速度、而虚拟存储器却是为了解决主存容量
- Cache全由硬件实现,是硬件存储器,对所有程序员透明;而虚拟存储器由OS和硬件共同实现,是逻辑上的存储器,对系统程序员不透明,但对应用程序员透明。
- 对于不命中性能影响,虚拟存储器胸痛不命中时对系统性能影响更大
- CPU与Cache和主存都建立了直接访问的通路,而辅存与CPU没有直接通路。也就是说,在Cache不命中时主存能和CPU直接通信,同时将数据调入Cache,而虚拟存储器系统不命中时,只能先由硬盘调入主存,而不能直接和CPU通信。
八、虚拟存储器与覆盖技术的比较
(1)不同之处
- 覆盖程序段的最大长度要受内存容量大小的限制,而虚拟存储器中程序的最大长度不受内存容量的限制,只受计算机地址结构的限制。
- 覆盖技术中的覆盖段由程序员设计,且要求覆盖段中的各个覆盖具有相对独立性,不存在直接联系或相互交叉访问;而虚拟存储技术对用户的程序段没有这种要求。
九、虚拟存储器与交换技术的比较
(1)不同之处
- 都要在内存与外存之间交换信息。
(2)相同之处
- 交换技术调入/调出整个进程,因此一个进程的大小要受内存容量大小的限制:而虚存中使用的调入/调出技术在内存和外存之间来回传递的是页面或分段,而不是整个进程,从而使得进程的地址映射具有更大的灵活性
- 虚拟存储器允许进程的大小比可用的内存空间大。
内存管理 —— 虚拟存储的基本概念相关推荐
- linux系统内存管理含义,Linux内存管理--基本概念及相关数据结构
一.内存管理的基本概念 1.存储空间 在32位嵌入式系统中,存储空间的地址范围从0x00000000到0xFFFFFFFF.这4GB存储范围内可以包括以下几种存储空间: 设备空间(MT_DEVICE) ...
- iOS/OS X内存管理(一):基本概念与原理
iOS/OS X内存管理(一):基本概念与原理 发表于21小时前| 1585次阅读| 来源CSDN| 8 条评论| 作者刘耀柱 移动开发iOSObjective-C内存管理内存泄露局部变量开发经验 a ...
- 操作系统内存管理--简单、页式、段式、段页式
一.内存管理的目的和功能 内存一直是计算机系统中宝贵而又紧俏的资源,内存能否被有效.合理地使用,将直接影响到操作系统的性能.此外,虽然物理内存的增长现在达到了N个GB,但比物理内存增长还快的是程序,所 ...
- Windows 内存详解(三)Windows内存管理
本文主要内容: 1.基本概念:物理内存.虚拟内存:物理地址.虚拟地址.逻辑地址:页目录,页表 2.Windows内存管理 3.CPU段式内存管理 4.CPU页式内存管理 一.基本概念 1. 两个内 ...
- linux kernel 内存管理 感想总结(未完待续)
理解内存管理需要知道的概念 什么是 MMU , MMU的作用? 什么是页帧,页,页表,区,他们之间的关系又是怎样的 ? 什么是页的高速缓存 地址线, 寻址, cpu 和 各级高速缓存的关系, cpu ...
- iOS/OS X内存管理(二):借助工具解决内存问题
上一篇博客<iOS/OS X内存管理(一):基本概念与原理>主要讲了iOS/OS X内存管理中引用计数和内存管理规则,以及引入ARC新的内存管理机制之后如何选择ownership qual ...
- LiteOS 内存管理
参考: [野火]物联网操作系统 LiteOS 开发实战指南 Huawei LiteOS | 中文网 8. 内存管理 8.1 基本概念 8.1.1 概念 LiteOS操作系统将内核与内存管理分开实现,操 ...
- 内存管理内幕--Jonathan Bartlett (johnnyb@eskimo.com), 技术总监, New Media Worx--
Jonathan Bartlett (johnnyb@eskimo.com), 技术总监, New Media Worx 2004 年 11 月 29 日 本文将对 Linux™ 程序员可以使用的内存 ...
- Windows的内存管理机制
Windows下的内存是如何管理的? Windows内存的管理可以分为两个层面:物理内存和虚拟内存 其中物理内存由系统管理,不允许应用程序直接访问,应用程序可见的只有一个2G的地址空间,而内存分配是通 ...
最新文章
- 检索数据表中重复的记录
- tomcat安装apr优化
- 二叉树深度优先遍历和广度优先遍历
- 机器学习——KNN实现
- Ubuntu 16.04上搭建CDH5.16.1集群
- 为什么构造函数不能是虚函数
- 通达oa考勤可以代打吗_可完全免费使用的OA办公系统
- WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
- qiniu rs.php,七牛API操作类 - suconghou的个人空间 - OSCHINA - 中文开源技术交流社区...
- 【Themes for IntelliJ-based IDEs】Idea主题下载
- Java后端防止获取短信验证码接口被恶意调用的代码实现
- matplotlib出图细节以及提高出图质量(高dpi)
- pe下查看ip和计算机名称,利用U盘pe系统查找原来电脑ip
- 数字电子技术-数字逻辑概论
- 机器学习中向量函数的求导问题
- 吐槽微信公众号技术团队的故障处理效率
- 修改电量android,安卓手机端修改电池电量图标的教程
- SSL peer shut down incorrectly 问题处理方法
- 2023年法定节假日配置Mysql
- 程序员为什么热衷于造轮子,升职加薪吗?