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

news2024/10/6 22:29:36

目录

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

二、页式虚拟存储器

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.coloradmin.cn/o/1649215.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

工业光源环形系列一高均匀条形光源特点

产品特点 ◆可以根据检测需求随意调整照射角度: ◆可以根据检测需求选择光源颜色: ◆多个条形光源可以自由组合: ◆使用贴片灯珠,均匀性更好。

使用Docker安装MySql数据库

大家好,今天给大家分享一下如何使用docker安装MySql数据库,关于docker的安装和常用命令,大家可以参考下面两篇文章,本文中不做过多描述。 Docker在Windows与CentOS上的安装 Docker常用命令 一、拉取MySql数据库镜像 docker pul…

远程桌面连接不上,远程桌面连接不上的专业解决策略

在信息技术领域,远程桌面连接是一种非常重要的工具,它允许用户从任何地点、任何时间访问和操作远程计算机。然而,当远程桌面连接出现问题时,可能会严重影响工作效率。以下是一些可能导致远程桌面连接不上的原因以及相应的解决方案…

usb个人总结

前言: 推荐快速上手资料: 《圈圈教你玩usb》讲用一个usb模块51如何让电脑识别出一个usb设备,也介绍了不少相关的字段内容。 其他例如uac\hid相关字段怎么看的建议去官网下载文档 USB-IF官方网站:Front Page | USB-IF USB中文…

AIGC绘画辅助网站

Midjourney风格样式 Midjourney Style Classifier | Andrei Kovalevs Midlibrary

系统维护启动盘 优启吧

优启吧-《优启时代系统维护盘》2025典藏版(UD/ISO)

STM32F4xx开发学习_SysTick

SysTick系统定时器 SysTick属于CM4内核外设,有关寄存器的定义和部分库函数都在core_cm4.h这个头文件中实现,可用于操作系统,提供必要的时钟节拍 SysTick简介 SysTick是一个 24 位向下定时器,属于CM4内核中的一个外设,…

Python类方法探秘:从单例模式到版本控制

引言: 在Python编程中,类方法作为一种特殊的实例方法,以其独特的魅力在众多编程范式中脱颖而出。它们不仅提供了无需实例即可调用的便捷性,还在设计模式、版本控制等方面发挥着重要作用。本文将通过几个生动的示例,带您…

八.吊打面试官系列-Tomcat优化-深入源码剖析Tomcat如何打破双亲委派

前言 上篇文章《Tomcat优化-深入Tomcat底层原理》我们从宏观上分析了一下Tomcat的顶层架构以及核心组件的执行流程。本篇文章我们从源码角度来分析Tomcat的类加载机制,且看它是如何打破JVM的ClassLoader双亲委派的 Tomcat ClassLoader 初始化 Tomcat的启动类是在…

5月7号(信息差)

🌍首次,西湖大学用蛋白质语言模型定向改造碱基编辑器,登Cell子刊 https://www.jiqizhixin.com/articles/2024-05-07-10 🎄 哈马斯宣布同意停火提议 https://finance.eastmoney.com/a/202405073067687785.html ✨ 中国将对…

【陀螺仪JY61P维特智能】通过单片机修改波特率和角度参考的方法

根据官方文档: 修改波特率 1.解锁:FF AA 69 88 B5 1.1延时200ms 2.修改波特率:FF AA 04 06 00 2.1切换已修改的波特率然后重新发送解锁和保存指令 2.2解锁:FF AA 69 88 B5 2.3延时200ms 4.保存: FF AA 00 00 00 XY轴角度参考 角度参考是以传感器当前的实际位置&…

IDEA远程连接docker服务,windows版docker desktop

1.windows上安装docker desktop docker desktop下载地址:Docker Desktop: The #1 Containerization Tool for Developers | Docker 有的windows系统不支持安装docker desktop 安装完之后我们可以直接打开,可以选择不登录使用 我们用IDEA连接到docker …

python菜鸟级安装教程 -下篇(安装编辑器)

来来~接着上篇的来~ 安装好python.exe之后,我们可以根据cmd命令窗口,码代码。 这算最简单入门了~ 如果我们在安装个编辑器。是什么效果,一起体验一下吧 第一步,下载编辑器,选择官网,下载免费版本入门足…

语音识别--kNN语音指令识别

⚠申明: 未经许可,禁止以任何形式转载,若要引用,请标注链接地址。 全文共计3077字,阅读大概需要3分钟 🌈更多学习内容, 欢迎👏关注👀【文末】我的个人微信公众号&#xf…

【LAMMPS学习】八、基础知识(5.8)LAMMPS 中热化 Drude 振荡器教程

8. 基础知识 此部分描述了如何使用 LAMMPS 为用户和开发人员执行各种任务。术语表页面还列出了 MD 术语,以及相应 LAMMPS 手册页的链接。 LAMMPS 源代码分发的 examples 目录中包含的示例输入脚本以及示例脚本页面上突出显示的示例输入脚本还展示了如何设置和运行各…

TriCore TC162 Archievture Volume 笔记

说明 本文是 英飞凌 架构文档 TriCore TC162P core archiecture Volume 1 of 2 (infineon.com) 的文笔,稍作整理方便查阅,错误之处,还请指正,谢谢 :) 1. Architecture 2. General Purpose & System Register 名词列表&#…

gin-vue-blog 前后端分离项目(已经部署)

gin-vue-blog 前台: 后台: 1.数据库设计:https://blog.csdn.net/m0_73337964/article/details/138137629?spm1001.2014.3001.5501 2.RESTFUL API路由实现:https://blog.csdn.net/m0_73337964/article/details/138321631?spm1…

基于Spring Boot的家具网站设计与实现

基于Spring Boot的家具网站设计与实现 开发语言:Java 框架:springboot JDK版本:JDK1.8 数据库工具:Navicat11 开发软件:eclipse/myeclipse/idea 系统部分展示 系统前台主界面图,用户可进入家具网站可查看…

9.4.k8s的控制器资源(job控制器,cronjob控制器)

目录 一、job控制器 二、cronjob控制器 一、job控制器 job控制器就是一次性任务的pod控制器,pod完成作业后不会重启,其重启策略是:Never; 简单案例 启动一个pod,执行完成一个事件,然后pod关闭;…

抖音小店个人店和个体店有什么不同?区别问题,新手必须了解!

哈喽~我是电商月月 新手开抖音小店入驻时会发现,选择入驻形式时有三个选择,个人店,个体店和企业店 其中,个人店和个体店只差了一个字,但个人店不需要营业执照,是不是入驻时选择个人店会更好一点呢&#x…