一、传统存储管理方式的特征、缺点


二、虚拟存储器的定义


主存和辅存共同构成了虚拟存储器。对于应用程序员来说,虚拟存储器是透明的。虚拟存储器即对磁盘存储器进行抽象,将磁盘存储器组织成一个连续的存储器,将主存看成是磁盘存储器的一个高速缓存。因此,虚拟存储器具有主存的速度和辅存的容量,提高了存储系统的性价比。

三、访问过程的步骤

(1)CPU使用虚地址时,由辅助硬件找出虚地址和实地址之间的对应关系,并判断这个虚地址对应的存储单元内容是否已装入主存。

(2)若已在主存中(装入位为1),则通过地址变换,得到一个主存地址,CPU通过该主存地址访问主存指示的实际单元(CPU访问:即以主存地址访问“Cache-主存"体系,如果该主存地址在Cache中,则访问Cache;如果不在Cache中,则访问主存,并把该字所在的块一次性地从主存调入Cache。)

(3)若不在主存中(装入位为0),则把包含这个字的一页或一段调入主存后再由CPU访问。若主存已满,则才采用替换算法置换主存中的一页或一段。

四、虚拟内存的特征


五、虚拟存储技术的实现


(1)请求分页存储管理


虚拟空间与主存空间都被划分成同样大小的页,主存的页称为实页,虚存的页称为虚页。

  • 虚拟地址:分为两个字段,分别是虚页号和页内地址

  • 页表:是一张存放在主存中的虚页号和实页号的对照表,用来实现虚地址和实地址之间的转换。

  • 页表基址寄存器:存放当前运行程序的页表的起始地址,它和虚页号拼接成页表项地址,可以找到对应的页表项。

  • 页表项:分为三个字段,分别是虚页号、实页号和装入位。(装入位为1,表示该页面已在主存中将对应的实页号和虚地址中的页内地址拼接,得到完整的实地址;装入位为0,表示该页面不在主存中,此时要启动 I/O 系统,将该页从辅存调入主存后再供 CPU使用)

虚地址到实地址的变换过程:

  1. 虚页号和页表起始地址拼接 = 页表项地址
  2. 页表项地址 → 页表 → 实页号
  3. 实页号和页内地址拼接 = 主存实地址

优点:页面的长度固定,页表简单,调入方便。

缺点:由于程序不可能是页面的整数倍,最后一页的零头将无法利用而造成浪费。

(2)请求分段存储管理


段式虚拟存储器中的段是按程序的逻辑结构划分的,各个段的长度因程序而异。

  • 虚拟地址:分为两个字段,分别是虚页号和页内地址

  • 段表:是一张存放在主存中的段号和段起点的对照表,用来实现虚地址和实地址之间的转换。

  • 段表基址寄存器:存放当前运行程序的段表的起始地址,它和段号拼接成段表地址,可以找到对应的段表项。

  • 段表项:分为四个字段,分别是段号、段起点、段长和装入位。(装入位为1,表示该段已在主存中将对应的段起点和虚地址中的段内地址相加,得到完整的实地址;装入位为0,表示该段不在主存中,此时要启动 I/O 系统,将该段从辅存调入主存后再供 CPU使用)

虚地址到实地址的变换过程:

  1. 段号和段表起始地址拼接 = 段表项地址
  2. 段表地址 → 段表 → 段起点
  3. 段起点+段内地址 = 主存实地址

优点:段的分界和程序的自然分界相对应,具有逻辑独立性

缺点:段长度可变,容易在段间留下碎片,不好利用,造成浪费

(3)请求段页式存储管理


把程序按逻辑结构分段,每段再划分为固定大小的页,主存空间也划分为大小相等的页,程序对主存的调入、调出仍以页为基本传送单位。
每个程序对应一个段表,每段对应一个页表,段的长度必须是页长的整数倍,段的起点必须是某一页的起点。

  • 虚拟地址:分为三个字段,段号+段内页号+页内地址

虚地址到实地址的变换过程:

  1. 段号和段表起始地址拼接 = 段表地址
  2. 段表地址 → 段表 → 页表起始地址
  3. 页表起始地址和段内页号拼接 = 页表项地址
  4. 页表项地址 → 页表 → 实页号
  5. 实页号和页内地址拼接 = 主存实地址

优点:兼具页式和段式存储器的优点,可以按段实现共享和保护

缺点:在地址变换过程中需要两次查表,系统开销大

六、快表(TLB)


查找时,快表和慢表同时进行,块表由于根据内容指定地址,一般使用相联存储器。若快表中有此逻辑页号,则能很快地找到对应的物理页号,送入实主存地址寄存器,并使慢表的查找作废,从而就能做到虽采用虚拟存储器但访问主存速度几乎没有下降。

七、虚拟存储器和Cache的比较


(1)相同之处

  1. 最终目标都是为了提高系统性能,两者都有容量、速度、价格的梯度
  2. 都把数据划分为小信息块,并作为基本的传递单位,虚存系统的信息块更大
  3. 都有地址的映射、替换算法、更新策略等问题
  4. 依据程序访问的局部性原理应用“快速缓存的思想”,将相对活跃的数据放在相对高速的部件中

(2)不同之处

  1. Cache主要解决系统速度、而虚拟存储器却是为了解决主存容量
  2. Cache全由硬件实现,是硬件存储器,对所有程序员透明;而虚拟存储器由OS和硬件共同实现,是逻辑上的存储器,对系统程序员不透明,但对应用程序员透明。
  3. 对于不命中性能影响,虚拟存储器胸痛不命中时对系统性能影响更大
  4. CPU与Cache和主存都建立了直接访问的通路,而辅存与CPU没有直接通路。也就是说,在Cache不命中时主存能和CPU直接通信,同时将数据调入Cache,而虚拟存储器系统不命中时,只能先由硬盘调入主存,而不能直接和CPU通信。

八、虚拟存储器与覆盖技术的比较


(1)不同之处

  1. 覆盖程序段的最大长度要受内存容量大小的限制,而虚拟存储器中程序的最大长度不受内存容量的限制,只受计算机地址结构的限制。
  2. 覆盖技术中的覆盖段由程序员设计,且要求覆盖段中的各个覆盖具有相对独立性,不存在直接联系或相互交叉访问;而虚拟存储技术对用户的程序段没有这种要求。

九、虚拟存储器与交换技术的比较


(1)不同之处

  1. 都要在内存与外存之间交换信息。

(2)相同之处

  1. 交换技术调入/调出整个进程,因此一个进程的大小要受内存容量大小的限制:而虚存中使用的调入/调出技术在内存和外存之间来回传递的是页面或分段,而不是整个进程,从而使得进程的地址映射具有更大的灵活性
  2. 虚拟存储器允许进程的大小比可用的内存空间大。

内存管理 —— 虚拟存储的基本概念相关推荐

  1. linux系统内存管理含义,Linux内存管理--基本概念及相关数据结构

    一.内存管理的基本概念 1.存储空间 在32位嵌入式系统中,存储空间的地址范围从0x00000000到0xFFFFFFFF.这4GB存储范围内可以包括以下几种存储空间: 设备空间(MT_DEVICE) ...

  2. iOS/OS X内存管理(一):基本概念与原理

    iOS/OS X内存管理(一):基本概念与原理 发表于21小时前| 1585次阅读| 来源CSDN| 8 条评论| 作者刘耀柱 移动开发iOSObjective-C内存管理内存泄露局部变量开发经验 a ...

  3. 操作系统内存管理--简单、页式、段式、段页式

    一.内存管理的目的和功能 内存一直是计算机系统中宝贵而又紧俏的资源,内存能否被有效.合理地使用,将直接影响到操作系统的性能.此外,虽然物理内存的增长现在达到了N个GB,但比物理内存增长还快的是程序,所 ...

  4. Windows 内存详解(三)Windows内存管理

    本文主要内容: 1.基本概念:物理内存.虚拟内存:物理地址.虚拟地址.逻辑地址:页目录,页表 2.Windows内存管理 3.CPU段式内存管理 4.CPU页式内存管理   一.基本概念 1. 两个内 ...

  5. linux kernel 内存管理 感想总结(未完待续)

    理解内存管理需要知道的概念 什么是 MMU , MMU的作用? 什么是页帧,页,页表,区,他们之间的关系又是怎样的 ? 什么是页的高速缓存 地址线, 寻址, cpu 和 各级高速缓存的关系, cpu ...

  6. iOS/OS X内存管理(二):借助工具解决内存问题

    上一篇博客<iOS/OS X内存管理(一):基本概念与原理>主要讲了iOS/OS X内存管理中引用计数和内存管理规则,以及引入ARC新的内存管理机制之后如何选择ownership qual ...

  7. LiteOS 内存管理

    参考: [野火]物联网操作系统 LiteOS 开发实战指南 Huawei LiteOS | 中文网 8. 内存管理 8.1 基本概念 8.1.1 概念 LiteOS操作系统将内核与内存管理分开实现,操 ...

  8. 内存管理内幕--Jonathan Bartlett (johnnyb@eskimo.com), 技术总监, New Media Worx--

    Jonathan Bartlett (johnnyb@eskimo.com), 技术总监, New Media Worx 2004 年 11 月 29 日 本文将对 Linux™ 程序员可以使用的内存 ...

  9. Windows的内存管理机制

    Windows下的内存是如何管理的? Windows内存的管理可以分为两个层面:物理内存和虚拟内存 其中物理内存由系统管理,不允许应用程序直接访问,应用程序可见的只有一个2G的地址空间,而内存分配是通 ...

最新文章

  1. 检索数据表中重复的记录
  2. tomcat安装apr优化
  3. 二叉树深度优先遍历和广度优先遍历
  4. 机器学习——KNN实现
  5. Ubuntu 16.04上搭建CDH5.16.1集群
  6. 为什么构造函数不能是虚函数
  7. 通达oa考勤可以代打吗_可完全免费使用的OA办公系统
  8. WCF 第十三章 可编程站点 使用AJAX和JSON进行网页编程
  9. qiniu rs.php,七牛API操作类 - suconghou的个人空间 - OSCHINA - 中文开源技术交流社区...
  10. 【Themes for IntelliJ-based IDEs】Idea主题下载
  11. Java后端防止获取短信验证码接口被恶意调用的代码实现
  12. matplotlib出图细节以及提高出图质量(高dpi)
  13. pe下查看ip和计算机名称,利用U盘pe系统查找原来电脑ip
  14. 数字电子技术-数字逻辑概论
  15. 机器学习中向量函数的求导问题
  16. 吐槽微信公众号技术团队的故障处理效率
  17. 修改电量android,安卓手机端修改电池电量图标的教程
  18. SSL peer shut down incorrectly 问题处理方法
  19. 2023年法定节假日配置Mysql
  20. 程序员为什么热衷于造轮子,升职加薪吗?

热门文章

  1. 图解unicode、utf8和utf8mb4
  2. 电脑其实很好玩,玩好了其实很无耻
  3. 开发的一些 h5 游戏
  4. EditText相关设置
  5. 软件设计之——“高内聚低耦合”
  6. 在linux上gc日志详解,JVM Parallel Scavenge GC日志详解
  7. 互联网开发岗实习及秋招总结
  8. 微信小程序页面竖向滚动逻辑
  9. 网站丨这四个网站好像有点好玩
  10. Android 带你玩转实现游戏2048 其实2048只是个普通的控件(转)