计算机组成结构—虚拟存储器

目录

一、虚拟存储器的基本概念

二、页式虚拟存储器

1.页表

2.快表(TLB)

3.具有 TLB 和 Cache 的多级存储系统

三、段式虚拟存储器

 四、段页式虚拟存储器

五、虚拟存储器和Cache比较


        早期的计算机,CPU 是直接操作主存的,也就是运行程序时,直接给出要访问的实际主存地址。这种方式简单直接,但是会有一些问题:

  • 不同的程序之间需要共享内存,它们的内存地址空间很难隔离,从而导致程序运行的稳定性和安全性降低;

  • 主存容量有限,如果同时执行的程序太多、使用内存太大容易超出容量限制而崩溃。

        为了解决这些问题,在主存-辅存这一层次的不断发展中,逐渐形成了虚拟存储系统。

        主存和辅存共同构成了虚拟存储器,二者在硬件和系统软件的共同管理下工作。对于应用程序员而言,虚拟存储器是透明的。虚拟存储器具有主存的速度和辅存的容量。

一、虚拟存储器的基本概念

        虚拟存储器将主存和辅存的地址空间统一编址,形成一个庞大的地址空间,在这个空间内,用户可以自由编程,而不必在乎实际的主存容量和程序在主存的实际存放位置。用户编程允许涉及的地址称为 虚地址逻辑地址,虚地址对应的存储空间称为虚拟空间。实际的主存地址称为 实地址物理地址,实地址对应的是主存地址空间。虚地址比实地址要大很多。

        使用虚拟存储器之后,程序中看到的地址都是逻辑地址。在访存时,逻辑地址首先会被转换成物理地址,然后再访问实际物理内存。

        这样一来,每一个程序都有独立的虚拟地址空间,不同进程的虚拟地址空间互相不干扰,提高了安全性。在每个进程看来,就像它自己独享了整个内存。当物理内存不够时,可以将一部分不常使用的内存块换出(Swap-out)到磁盘中,下次使用时再换入到内存中(Swap-in),这样程序就可以使用超过实际物理内存大小的地址空间了。  

        CPU 使用逻辑地址时,先判断这个逻辑地址对应的内容是否已装入主存。若已在主存中,则通过地址变换,CPU 可直接访问主存指示的实际单元;若不在主存中,则把包含这个字的一页或一段调入主存后再由 CPU 访问。若主存已满,则采用 替换算法 置换主存中的页。

        虚拟存储器采用了和 Cache 类似的技术,将辅存中经常被访问的数据副本存放到主存中。但缺页 (或段)而访问辅存的代价很大,因此虚存机制采用 全相联映射,每个页可以存放到主存区域的任意一个空闲页位置。此外,当进行写操作时,不能每次写操作都同时写回磁盘,因而采用 回写法

二、页式虚拟存储器

        页式虚拟存储器 以页为基本单位。虚拟空间与主存空间都被划分成同样大小的页,主存的页称为 实页页框,虚存的页称为 虚页。这样,一个逻辑地址可以分为两段:虚页号页内地址

 

        虚页和实页之间采用全相联映射,所以从主存中依次查找要访问的虚页号比较困难。所以我们专门引入一个数据结构,用来保存虚页号和实页号的映射关系,这就是 页表。页表可以实现从逻辑地址到物理地址的转换。  

1.页表

        页表是一张存放在主存中的虚页号和实页号的对照表,它记录程序的虚页调入主存时被安排在主存中的位置。每个程序都有自己的页表,页表一般长久地保存在内存中。

页表中的每一项,都包含以下几部分:

  • 有效位:也称 装入位,用来表示对应页面是否在主存,若为 1,则表示该虚页已从外存调入主存,此时页表项存放该页的物理页号;若为 0,则表示页面没有调入主存,此时页表项可以存放该页的磁盘地址。

  • 脏位:也称 修改位,用来表示页面是否被修改过,虚拟存储机制中采用回写策略,利用脏位可判断替换时是否需要写回磁盘。

  • 引用位:也称 使用位,用来配合替换策略进行设置,例如是否使用先进先出(FIFO)或近期最少使用(LRU)策略等。

        CPU 执行指令时,需要先将逻辑地址转换为主存物理地址。每个进程都有一个 页表基址寄存器,存放该进程的页表首地址,然后根据逻辑地址高位部分的虚页号找到对应的页表项。若装入位为 1,则取出物理页号,和逻辑地址低位部分的页内地址拼接,形成物理地址;若装入位为 0,则说明缺页,需要操作系统进行 缺页处理。缺页时会由 CPU 的内存管理单元(MMU)发出中断,操作系统需要将相应的页从磁盘取回调入主存,并将物理页的地址填入页表中。

        页式虚拟存储器的优点是:页的长度固定,页表简单,调入方便。缺点是:最后一页的零头无法利用而造成浪费,并且页不是逻辑上独立的实体,所以处理、保护和共享都不及段式虚拟存储器方便。

2.快表(TLB)

        有了虚拟存储器之后,CPU 在寻址时所生成的都是虚拟地址。于是 CPU 在取指或者执行访存指令的时候,都需要进行地址翻译,而每次地址翻译都要访问主存中的页表,会产生严重的开销。

        依据程序执行的局部性原理,当 CPU 在一段时间内总是经常访问某些页时,若把这些页对应的页表项存放在 Cache 中,就可以不访问主存直接进行地址翻译了;这样明显能提高效率。

        在 CPU 芯片中,加入一个专门存放最常访问的页表项的 Cache,就叫做 转址旁路缓存(Translation Lookaside Buffer,TLB),一般简称为 “快表”。TLB 实质上就是 “页表的 Cache”,其中存储了当前最可能被访问到的页表项,其内容是部分页表项的一个副本;所以 TLB 又被称为 页表缓存

        相应地,把放在主存中的页表称为 慢表(Page)。 在地址转换时,先查找快表,若命中,则无须再访问主存中的页表(慢表)。

        TLB 通常采用 全相联映射。每个 TLB 项由页表表项内容加上一个 TLB 标记字段以及有效位等标志位组成,TLB 标记用来表示该表项取自页表中哪个虚页号对应的页表项,其内容就是该页表项对应的虚页号。

 

3.具有 TLB 和 Cache 的多级存储系统

TLB 和 Cache 都属于缓存,不过它们的用途不同:

  • TLB 用来保存最近经常访问的页表项,是对 地址映射 的缓存。

  • Cache 用来保存最近经常访问的主存块,是对 数据内容 的缓存。

        所以对于一个有虚拟存储器的计算机系统,可以先通过 TLB 对逻辑地址的翻译进行加速,快速得到一个物理地址;然后再通过 Cache 的地址转换判断是否 Cache 命中,从而对数据的访问进行加速。

        这样就将 Cache 和 TLB 结合起来,构成了多级存储系统。下面就是一个具有 2 路组相联映射 Cache 和 TLB 的多级存储系统;CPU 给出的是一个 32 位的逻辑地址,TLB 采用全相联映射,每一项都有一个比较器。

  • 查找时将虚页号与每个 TLB 标记同时进行比较,若有某一项相等且对应有效位为 1,则 TLB 命中,此时可直接通过TLB进行地址转换;若未命中,则 TLB 缺失,需要访问主存去査页表。

  • 图中所示是 两级页表方式,虚页号被分成 页目录索引页表索引 两部分,由这两部分得到对应的页表项,从而进行地址转换,并将相应表项调入TLB。若 TLB 已满,则还需要采用替换策略。

  • 完成由逻辑地址到物理地址的转换后,Cache 机构根据映射方式将物理地址划分成多个字段,然后根据映射规则找到对应的 Cache 行或组,将对应 Cache 行中的标记与物理地址中的高位部分进行比较,若相等且对应有效位为1,则 Cache 命中,此时根据块内地址取岀对应的字送 CPU。

        查找时,快表和慢表也可以同步进行。若快表中有此虚页号,则能很快地找到对应的实页号,并使慢表的查找作废,从而就能做到虽采用虚拟存储器,但访问主存速度几乎没有下降。

        在一个具有 Cache 和 TLB 的虚拟存储系统中,CPU —次访存操作可能涉及对 TLB、页表(Page)、Cache、主存和磁盘的访问。CPU 在访存过程中存在 3 种缺失情况:

① TLB 缺失:要访问页面的页表项不在 TLB 中;

② Page 缺失:要访问的页面不在主存中。

③ Cache 缺失:要访问的主存块不在 Cache 中;

        需要注意,如果 TLB 命中,那么 Page 一定命中;如果 Page 缺失,那么 Cache 一定缺失。所以有如下一些组合情况:

  • 第 1 种情况下,无须访问主存,地址转换和访问数据都可以通过高速缓存完成;

  • 第 2 种和第 3 种情况都 需要访问一次主存,第 2 种是访问主存取数据,第 3 种是访问页表转换物理地址;

  • 第 4 种情况需要访问两次主存,访问页表转换物理地址一次、访存取数据一次;

  • 第 5 种情况就是 “缺页异常”,需要访问磁盘,并且至少访问两次主存。

        Cache 缺失处理由硬件完成;缺页处理由软件完成,操作系统通过 “缺页异常处理程序” 实现;而 TLB 缺失既可以用硬件也可以用软件来处理。

三、段式虚拟存储器

        在段式虚拟存储器中,将虚拟空间用 “” 进行分割;而段是按程序的逻辑结构划分的,各段的长度因程序而异。虚地址分为两部分:段号段内地址。虚地址到实地址之间的变换是由 段表 来实现的。段表的每行记录与某个段对应的段号、 装入位和段长等信息。由于段的长度可变,所以段表中要给出各段的起始地址与段的长度。

        CPU 用逻辑地址访存时,先根据段号与段表基地址拼接成对应的段表项,再根据该段表项的装入位判断该段是否已调入主存(装入位为 “1”,表示该段已调入主存)。当已调入主存时,从段表读岀该段在主存的起始地址,与段内地址相加,得到对应的主存物理地址。

        段式虚拟存储器的优点是,段的分界与程序的逻辑分界相对应,这使得程序易于编译、修改和保护,也便于多道程序共享;缺点是因为段长度可变,分配空间不便,容易留下碎片,造成浪费。

 四、段页式虚拟存储器

        把程序按逻辑块分段,段内再分页,主存空间也划分为大小相等的页,程序对主存的调入调出仍以 为基本单位,这样的虚拟存储器称为 段页式虚拟存储器。在段页式虚拟存储器中,每个程序对应一个 段表,每段对应一个 页表,段的长度必须是页长的整数倍,段的起点必须是某一页的起点。

 

        虚地址分为 段号段内页号页内地址 3 部分。CPU 根据虚地址访存时,首先根据段号得到段表地址,然后从段表中取出该段的页表起始地址,与虚地址段内页号拼接,得到页表地址;最后从页表中取出实页号,与页内地址拼接成主存实地址。

        段页式虚拟存储器的优点是,兼具页式和段式虚拟存储器的优点,可以按段实现共享和保护;缺点是在地址变换过程中需要两次查表,系统开销较大。

五、虚拟存储器和Cache比较

相同点:

  • 目标都是为了提高系统性能,两者都有容量、速度、价格的梯度。

  • 都把数据划分为信息块,作为基本的传送单位,虚拟存储器系统的信息块更大。

  • 都有地址的映射算法、替换算法、更新策略等问题。

  • 依据局部性原理,应用“快速缓存”思想,将活跃的数据放在相对高速的部件中。

不同点:

  • Cache主要是为了提高系统速度,而虚拟存储器是为了解决主存容量不足的问题。

  • Cache由硬件实现,对所有程序员透明;虚拟存储器由操作系统和硬件共同实现,对应用程序员透明。

  • 在不命中时对性能的影响不同。因为 CPU 的速度约为 Cache 的 10 倍,而主存的速度为硬盘的 100 倍以上,因此虚拟存储器系统在不命中时对系统性能的影响更大。

  • CPU 与 Cache 和主存有直接通路,而辅存与 CPU 没有直接通路。在 Cache 不命中时,CPU 能和主存直接通信;而虚拟存储器系统在不命中时,须先将数据从硬盘调入主存,CPU 才能访问。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/598390.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

深度学习之基于Vgg16卷积神经网络书法字体风格识别

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 书法是中国传统文化的重要组成部分,具有深厚的历史底蕴和独特的艺术魅力。在数字化时代&…

第50期|GPTSecurity周报

GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…

损失函数详解

1.损失函数 是一种衡量模型与数据吻合程度的算法。损失函数测量实际测量值和预测值之间差距的一种方式。损失函数的值越高预测就越错误,损失函数值越低则预测越接近真实值。对每个单独的观测(数据点)计算损失函数。将所有损失函数(loss function&#xf…

Baidu Comate:你的智能编码助手,编程效率倍增的秘密武器

Baidu Comate智能编码助手 Baidu Comate 智能编码助手简单介绍安装使用查看Comate插件功能智能代码提示使用飞浆和百度智能小程序进行智能问答使用AutoWork插件实现二次函数图像的生成引用Comate知识库存在的问题结束语 Baidu Comate 智能编码助手简单介绍 Baidu Comate&#x…

设计模式(十一):外观模式

设计模式(十一):外观模式 1. 外观模式的介绍2. 外观模式的类图3. 外观模式的实现3.1 创建一个接口3.2 创建接口的实现3.3 创建一个外观类3.4 测试 1. 外观模式的介绍 外观模式(Facade Pattern)属于结构型模式&#xf…

Jupyter Notebook输入python代码没智能提示

1、在Jupyter中打开控制台 2、再控制台中执行以下两个命令: pip install jupyter_contrib_nbextensions jupyter contrib nbextension install --user pip install jupyter_contrib_nbextensions命令需要下载文件,请耐心等待。 3、执行完成后&#xff0…

202003青少年软件编程(Python)等级考试试卷(二级)

第 1 题 【单选题】 运行下方代码段,输出的结果是(   )。 a=(1,2,3)print(type(a))A :<class ‘float’> B :<class ‘int’> C :<class ‘str’> D :<class ‘tuple’> 正确答案:D 试题解析: 第 2 题 【单选题】 content.txt中原来的内容…

第11篇:创建Nios II工程之控制多个七段数码管

Q&#xff1a;DE2-115开发板上有8个七段数码管&#xff0c;如何用PIO IP并设计Nios II工程控制呢&#xff1f; A&#xff1a;基本思路&#xff1a;DE2-115上有8个7位七段数码管&#xff0c;而一个PIO最多可配置为32位&#xff0c;如此就可以添加2个PIO都配置为28位output。 Ni…

《500 Lines or Less》(13)—— A 3D Modeller

原文 作者 原code 我用py3重写的code 3D 建模器 介绍 计算机辅助设计&#xff08;Computer-aided design, CAD&#xff09;工具允许我们在2D屏幕上查看和编辑3D对象。为此&#xff0c;CAD工具必须具有3个基本功能&#xff1a; 表示对象&#xff1a;使用一种数据结构保存和表示…

SpringBoot的@Async注解有什么坑?

前言 SpringBoot中&#xff0c;Async注解可以实现异步线程调用&#xff0c;用法简单&#xff0c;体验舒适。 但是你一定碰到过异步调用不生效的情况&#xff0c;今天这篇文章总结了Async注解的坑点&#xff0c;希望对你会有所帮助。 未启用异步支持 Spring Boot默认情况下不启…

2024年短剧小程序视频怎么下载

想在闲暇之余轻松追剧&#xff0c;但不想跳转复杂的网页或者安装多个APP吗&#xff1f;来试试2024年的短剧小程序视频下载器吧&#xff01;它是一款专门为短剧爱好者打造的视频下载工具&#xff0c;让你轻松下载任何短剧小程序视频&#xff0c;随时随地享受精彩的短剧内容&…

Python密码测试程序

下面是一个简单的 Python 密码测试程序&#xff0c;用于检查用户输入的密码是否符合一些基本的安全要求&#xff0c;如长度、包含字母和数字等。这个程序可以作为一个基本的密码验证器&#xff0c;你可以根据需要进行修改和扩展。 1、问题背景 我们正在编写一个程序&#xff0…

解决 git克隆拉取代码报SSL certificate problem错误

问题&#xff1a;拉取代码时报错&#xff0c;SSL证书问题:证书链中的自签名证书问题 解决&#xff1a;只需要关闭证书验证&#xff0c;执行下面代码即可&#xff1a; git config --global http.sslVerify "false" 再次拉取代码就可以了

ssh远程免密登录

ssh远程连接分为五个阶段 版本号协商阶段密钥和算法协商阶段认证阶段会话请求阶段交互会话阶段 而上图的SessionKey即是在阶段2&#xff1a;密钥和算法协商阶段&#xff0c;服务器端和客户端利用DH交换&#xff08;Diffie-Hellman Exchange&#xff09;算法、主机密钥对等参数…

零基础自学网络安全/Web安全(超详细入门到进阶)学完即可就业(含学习笔记)

一、为什么选择网络安全&#xff1f; 这几年随着我国《国家网络空间安全战略》《网络安全法》《网络安全等级保护2.0》等一系列政策/法规/标准的持续落地&#xff0c;网络安全行业地位、薪资随之水涨船高。 未来3-5年&#xff0c;是安全行业的黄金发展期&#xff0c;提前踏入…

【前端】HTML实现个人简历信息填写页面

文章目录 前言一、综合案例&#xff1a;个人简历信息填写页面 前言 这篇博客仅仅是对HTML的基本结构进行了一些说明&#xff0c;关于HTML的更多讲解以及CSS、Javascript部分的讲解可以关注一下下面的专栏&#xff0c;会持续更新的。 链接&#xff1a; Web前端学习专栏 下面我对…

OpenNJet 应用引擎:在 NGINX 基础上的云原生增强

目录 一、初识OpenNJet二、系统架构三、动手实践1.CentOS 编译环境配置1.1配置yum源&#xff1a;1.2.yum安装软件包1.3.创建符号连接 2.编译代码编译 OpenNJet执行 make 四、基本使用说明1.目录结构概述:2.常用命令: 五、部署 Web 应用程序配置文件修改启动 NJet 六、总结 一、…

设计宝典与速查手册,设计师必备资料合集

一、资料描述 本套设计资料&#xff0c;大小194.34M&#xff0c;共有13个文件。 二、资料目录 01-《商业设计宝典》.pdf 02-《色彩速查宝典》.pdf 03-《配色宝典》.pdf 04-《解读色彩情感密码》.pdf 05-《行业色彩应用宝典》.pdf 06-《构图宝典》.pdf 07-《创意宝典》…

PXE 批量安装部署

目录 一、PEX批量部署优点 二、PXE&#xff1a;预启动执行环境 三、搭建PXE远程服务器 要想全自动安装 接下来请看步骤&#xff1a; 一、PEX批量部署优点 规模化&#xff1a;同时装配多台服务器自动化&#xff1a;安装系统 配置各种服务远程实现&#xff1a;不需要光盘&…

勾股定理 口诀

def t_o(a):t int(a/2)b t*t-1c t*t1f (a*ab*bc*c)print(f,ou,a,b,c,a*ab*b,c*c)def t_j(a):t a*abint(t/2)c t-bf (a*ab*bc*c)print(f,j-,a,b,c,f,a*ab*b,c*c)for i in range(2,100,2):t_o(i)t_j(i1) 奇数平方写连续 偶数半方加减一
最新文章