4。计算机组成原理(2)存储系统

嵌入式软件开发,非科班专业必须掌握的基本计算机知识

核心知识点:数据表示和运算、存储系统、指令系统、总线系统、中央处理器、输入输出系统

这一部分主要讲解了CPU的组成和扩容、CPU与存储器(主存、辅存、缓存)的连接

 

一 存储器以及其与CPU的连接

1)存储器的扩容

一块存储芯片的内部结构

1k×4位存储矩阵结构

由1k×4位构建一个1k×8位存储矩阵(位扩展)——芯片扩容

右边存储低四位、左边存储高四位

由1k×4位构建一个2k×4位存储矩阵(字扩展)多了一条地址线A10

A10 = 1,CS1处得到高电平而不被选中,CS2处得到低电平而被选中

若再增加一条地址线A11

由1k×4位构建一个2k×8位存储矩阵(位扩展+字扩展

2)存储器与CPU的连接 

存储器与CPU连接示意图

例:

存储芯片 

译码器与门电路(圆圈的意思是将当前信号 取反) 

地址分配

实现MREQ作为访存控制信号(低电平有效)、WR作为读/写控制信号(低电平为读、高电平为写)

二 缓存Cache

存储器与CPU连接时会发现,CPU很快,主存很慢,因此需要一种更快的存储器——缓存Cache

缓存(Cache)是指在计算机系统中临时存储数据的一种机制。它可以将频繁访问的数据暂时保存在高速存储器中,以便增加对这些数据的访问速度。

在计算机系统中,数据的读写通常会涉及到内存和CPU之间的数据交换,如果每次数据访问都要通过总线来获取,就会造成较长的等待时间,从而影响系统的响应速度和效率。而缓存的引入可以解决这个问题。缓存中存储着部分经常使用的数据,当程序需要读取或写入这些数据时,可以直接从缓存中获取,省去了从内存中进行读写操作的时间,从而大大提高了程序的执行效率。

在现代计算机中,缓存通常分为三级:一级缓存、二级缓存和三级缓存。一级缓存位于CPU内部,速度最快,容量最小;二级缓存位于CPU与内存之间,速度较快,容量较大;三级缓存则是位于内存与磁盘之间,速度较慢,容量较大。不同层级的缓存之间的数据交换也有一定的规律和策略,例如多级缓存、缓存行、预取等技术,以提高缓存的效率和减少缓存的失效率。

程序的局部性访问原理

程序的局部性访问原理(Locality of Reference)是指在特定的时间段内,程序对存储器的访问存在着一定的空间局部性和时间局部性。

空间局部性指程序在一段时间内主要访问某些特定的存储单元,

时间局部性则指程序在一定时间内多次访问同一个存储单元的可能性较大。

这种局部性访问原理对于计算机系统设计非常重要,因为它可以被用来优化计算机系统的性能。例如,计算机中的缓存系统就是利用了局部性访问原理来提高访问速度。由于程序经常访问同一组数据或代码块,这些数据和代码会被存储在缓存中,并且在下一次访问时可以直接从缓存中获取。这样就可以大幅减少从主存中读取数据时的延迟,提高程序的执行效率。

除了缓存之外,还有一些其他优化技术也利用了局部性访问原理。例如,磁盘预读技术可以在读取磁盘数据时,预先把连续的数据块读取到缓存中,以减少后续读取的延迟;局部性编码技术可以将经常一起访问的数据进行压缩,以进一步提高数据的访问速度。总而言之,程序的局部性访问原理对于计算机系统的性能优化具有非常重要的意义,开发人员需要在程序设计中充分考虑这一原理。

基本工作原理

把缓存和主存以块为单位,

读时,判断地址是否在缓存中,常用则备份至缓存中,缓存满时需要按照一定规则清理已有的块

写时,考虑保持数据一致性的办法

主存-Cache地址映射

地址分两块                                                         地址分四块

分2的m次方块

图中主存中两个地址映射缓存一个地址,因此需要加标志位(黄色字体)

直接映射 

例:

全相联映射

更好的方法是,将缓存Cache组内分组,然后组外进行直接映射、组内进行全相联映射。

粉色是组地址段(缓存有多少组),红色为组内块的地址,黄色为标记位来区分主存究竟映射至缓存组内的哪一个。

这种方法名为 组相联映射

组相联映射

Cache缓存中只有主存部分的块,因此CPU查询主存地址时,不一定能够在缓存中找到,因此涉及命中率问题

前面提及缓存中的数据需要被及时替换,因此需要算法

直接映射无需考虑替换算法,直接替换

对于全相连和组相连,因为某一主存块可能映射到Cache中的多个块中,因此存在以下替换算法:

(1)先进先出算法(FIFO)

(2)近期最少使用算法(LRU)(设计计数器)

(3)最不经常使用算法(LFU)

(4)随机算法(RAND)

写策略(改写的时机)

三 虚拟存储器

之前是缓存与主存搭配,这部分是辅存与主存配合,扩大存储容量

虚地址(逻辑地址)——>映射 实地址(物理地址)

页式虚拟存储器

图中 虚页号要大于实页号,因此映射时需要其他操作,即页表起始地址

段式虚拟存储器 

页式虚拟存储器(Paging Virtual Memory)和段式虚拟存储器(Segmentation Virtual Memory)都是常用的虚拟存储器管理方式,但它们有着不同的实现方式和特点。

1)实现方式

页式虚拟存储器将进程的地址空间划分为固定大小的页面(Page),相邻的页面是连续的,每个页面的大小通常为2的幂次方。物理内存也被分成相同大小的帧(Frame),每个页面可以映射到一个或多个帧中。当进程需要访问一个页面时,操作系统会根据页面号查找该页面所在的帧,然后通过内存管理单元把该页面加载到内存中。

段式虚拟存储器则将进程的地址空间划分为若干个逻辑段(Segment),每个逻辑段具有一定的长度、基址和保护属性。每个逻辑段可以动态地分配物理内存中的若干个连续区域,这些区域可以是不连续的,但必须满足逻辑地址空间中段的大小限制。当进程需要访问一个逻辑段时,操作系统会根据给定的段号和段内偏移量计算出对应的物理地址。

2)存储管理

在页式虚拟存储器中,操作系统把逻辑地址(由页号和页内偏移量组成)转换为物理地址(由帧号和页内偏移量组成)。这个过程叫做页面映射(Page Mapping),可以通过页表或者快表来实现。

在段式虚拟存储器中,操作系统把逻辑地址(由段号和段内偏移量组成)转换为物理地址(由物理地址和段内偏移量组成)。这个过程叫做段映射(Segment Mapping),可以通过描述符表来实现。

3)特点

页式虚拟存储器的最小存储单位是页面,其大小一般为4KB、8KB或者16KB。页式虚拟存储器将地址空间和物理内存都划分为等大小的块,因此易于管理和实现。但是,在进行页面映射时,由于可能存在不同页面映射到同一帧的情况,因此可能会产生页面置换和页面失效等问题。

段式虚拟存储器的最小存储单位是逻辑段,每个逻辑段的大小不定,根据需要动态调整段式虚拟存储器更加灵活,可以为不同类型的数据分配不同大小的地址空间,但管理和实现相对复杂,需要占用更多的内存开销。

综上所述,页式虚拟存储器和段式虚拟存储器分别适用于不同的应用场景,开发人员需要根据具体情况选择合适的虚拟存储器管理方式。

段页式虚拟存储器

段页式虚拟存储器(Segmentation Paging Virtual Memory)是将段式虚拟存储器和页式虚拟存储器相结合的一种内存管理机制。在段页式虚拟存储器中,进程的地址空间被划分为多个逻辑段,每个逻辑段被进一步分成多个固定大小的页面。每个逻辑段的长度可以动态调整,而每个页面的大小通常固定为2的幂次方。

与普通的段式虚拟存储器不同的是,段页式虚拟存储器使用了分段和分页两级映射机制。进程访问一个地址时,首先根据该地址所在的逻辑段号进行段映射,然后再把段内偏移量转换为页面号和页内偏移量,进行页面映射。因此,段页式虚拟存储器既具有段式虚拟存储器的灵活性,又兼具页式虚拟存储器的管理效率。

在段页式虚拟存储器中,操作系统需要维护两级页表来完成地址转换。第一级页表用于映射逻辑段号到物理地址,称为段表(Segment Table);第二级页表用于映射页面号到物理帧号,称为页表(Page Table)。当进程需要访问一个地址时,操作系统首先查找该地址对应的段号的段表项,确定物理地址空间中该逻辑段的位置和大小。接着,根据偏移量计算出页面号,并在对应的页表项中查找物理帧号。最后,使用物理帧号和页内偏移量组合成最终的物理地址。

相较于纯粹的页式虚拟存储器和段式虚拟存储器,段页式虚拟存储器具有更好的灵活性和管理效率,但同时也带来了更多的复杂度和开销。在实际应用中,需要权衡不同方面的需求,选择适合的内存管理方式。

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

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

相关文章

基于人工智能AI视频分析的智慧安监解决方案

方案背景 为了保证对园区环境风险进行有效识别,传统视频监控存在视频结构化利用率低的问题,在实际使用过程中,安全管理人员工作效率低下,依靠人工肉眼查看灵活度低,风险漏报概率高,出现异常情况跟踪不及时&…

VS2019 c++ cmake项目 打包并使用 (lib\dlll)

背景 最近项目中经常调用第三方库、带头文件、lib和dll的库,需要使用cmake进行项目管理,之前一直比较糊涂这方面,在这里做一个整理总结 编译汇编过程 静态链接方式: 把lib里面编译好的东西(函数、变量等&#xff09…

海量请求下,高并发接口的设计思路

1. 背 景 虽然现在很多人,动不动就提什么高并发、请求量多大,数据量多少多少,但我可以很认真地说,那都是他妈的在吹牛! 生产环境,真正有大请求量的,就那么几个业务场景,而且多是面…

算法记录 | Day56 动态规划

583.两个字符串的删除操作 思路: 1.确定dp数组(dp table)以及下标的含义:dp[i][j]:以i-1为结尾的字符串word1,和以j-1位结尾的字符串word2,想要达到相等,所需要删除元素的最少次数…

网络协议与攻击模拟-05-ICMP协议

ICMP 协议 1、理解 ICMP 协议 2、理解 ICMP 重定向 3、会使用 wireshark 分析 ICMP 重定向流量实验 一、 ICMP 基本概念 1、 ICMP 协议 Internet 控制报文协议,用于在 IP 主机、路由器之间传递控制消息,控制消息指网络通不通、主机是否可达、路由是否…

iview-admin首页的图表数据渲染问题

iview-admin的首页有几个图表&#xff0c;应该是作者自己封装的&#xff0c;有个问题是在mounted时&#xff0c;从后台获取数据&#xff0c;应该把图表根据数据重新渲染一下。 <chart-bar id"myChart" style"height: 260px;" :value"barData"…

全方位揭秘!大数据从0到1的完美落地之Shuffle和调优

MapReduce高级 shuffle阶段 概述 MapReduce会确保每个reducer的输入都是按键排序的。从map方法输出数据开始、到作为输入数据传给reduce方法的过程称为shuffle。在此&#xff0c;我们将学习shuffle是如何工作的&#xff0c;因为它有助于我们理解工作机制&#xff08;如果需要…

前端008_类别模块_新增功能

类别模块_新增功能 1、需求分析2、新增窗口实现3、列表引用新增组件4、关闭弹出窗口5、校验表单数据6、提交表单数据6.1、Mock 添加新增模拟接口6.2、Api 调用接口6.3、测试新增功能1、需求分析 点击 新增 按钮后,对话框形式弹出新增窗口输入分类信息后,点击 确定 提交表单数…

【递推专题】常见的递推“模型”总结

目录 1.斐波那契数列分析&#xff1a;代码&#xff1a; 2.平面分割问题分析&#xff1a; 3.汉诺塔问题分析&#xff1a; 4.卡特兰数分析&#xff1a; 5.第二类斯特林数总结&#xff1a; 1.斐波那契数列 分析&#xff1a; 斐波那契数列又称兔子数列&#xff0c;其原理来源于兔子…

测试知识总结

1.影响ui自动化稳定性 异常弹出对话框 --异常场景库 页面控件元素属性的细微变化--模糊匹配 延迟 --- retry 数据 -- 数据已被使用 2. 移动端应用细分为三大类&#xff1a;Web App、Native App&#xff08;原生应用&#xff09; 和 Hybrid App&#xff08;混合应用&…

第二十四章 Unity 纹理贴图

通常情况下&#xff0c;3D网格模型只能展示游戏对象的几何形状&#xff0c;而表面的细节则纹理贴图提供。纹理贴图通过UV坐标“贴附”在模型的表面。当然&#xff0c;这个过程不需要我们在Unity中完成&#xff0c;而是在建模软件中完成的。通常情况下&#xff0c;我们通过3ds m…

JavaScript:二叉树(前序遍历,中序遍历,后序遍历,递归法,统一迭代法)

文章目录 二叉树递归法迭代法 144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09;二叉树的递归遍历递归法作图分析代码和思路分析 二叉树的迭代遍历前序遍历迭代分析代码及思路分析 94. 二叉树的中序遍历递归法作图举例递归流程 迭代法代码 145. 二叉树的后序遍历 …

制作Alpine Linux镜像报错errors: 15 distinct packages available

1.执行报错 执行docker build -t 镜像:版本 -f Dockerfile . 报错&#xff1a; 2.查看网上的解决思路 网上文档解决思路&#xff1a; 这边我做了一下改变把这些写入了dockerfile 加了几个RUN RUN rm -rf /var/cache/apk RUN mkdir -p /var/cache/apk RUN apk update -v 发现还…

mongodb分片集群搭建

1.本次搭建使用三台centos7主机搭建伪集群&#xff0c;关闭防火墙和selinux服务 2.mongodb架构相当于9个分片节点&#xff0c;3个路由节点&#xff0c;3个配置节点&#xff0c;主机信息如下图所示 主机名称主机ip地址端口服务A10.1.60.11420001&#xff0c;21001&#xff0c;…

Visual Studio 2019离线安装包获取和安装教程

摘要 介绍Visual Studio 2019离线安装方法和配置及注意事项 关键词 VS2019 离线安装 Visual Studio 2019版本与以往的2015、2013、2012版本不同&#xff0c;采用了新的模块化安装方法。微软官方也并未提供ISO镜像&#xff0c;根据官方提供的离线下载方案&#xff08;docs.mic…

JMeter开发web及手机APP自动化脚本练习

&#xff08;一&#xff09;开发web自动化脚本练习 一、打开浏览器代理服务器设置 我这里用的是360浏览器&#xff0c;打开浏览器代理服务器设置&#xff0c;端口要与jmeter中的端口设置保持一致哦。 二、JMeter设置代理 JMeter设置代理&#xff08;jmeter中的端口要与360浏览…

数据发送流程

在发送模式下&#xff0c;UART 的串行数据发送电路主要包括一个发送移位寄存器(TSR)&#xff0c;TSR 功能是将数据 逐个移位送出。待发数据必须先写到发送缓冲区中。 TXIFx 是发送中断标志位&#xff0c;可配置为发送缓冲区空或TSR 空。 数据的发送支持7bit 、8bit 或9bit 数据…

JAVA基础:Scanner类中next(), nextLine(), hasNext(), hasNextLine()

一、next() : 只读缓冲区中空格之前的数据,并且光标指向本行。二、nextLine() : 读取除回车以外的所有符号(整行内容)&#xff0c;光标定位在下一行三、hasNext() &#xff1a;检查下一个标记&#xff08;token&#xff09;&#xff0c;也就是以空格、制表符或换行符为分隔符的…

大数据技术之Kettle

目录 第1章 Kettle概述 1.1 ETL简介 1.2 Kettle简介1.2.1 Kettle是什么 1.2.2 Kettle的两种设计 1.2.3 Kettle的核心组件 1.2.4 Kettle特点 第2章 Kettle安装部署 2.1 Kettle下载 2.1.1 下载地址 2.1.2 Kettle目录说明 2.1.3 Kettle文件说明 2.2 Kettle安装部署 …

YonLinker连接集成平台构建新一代产业互联根基

近日&#xff0c;由用友公司主办的“2023用友BIP技术大会“在用友产业园&#xff08;北京&#xff09;盛大召开&#xff0c;用友介绍了更懂企业业务的用友BIP-iuap平台&#xff0c;并发布了全面数智化能力体系&#xff0c;助力企业升级数智化底座&#xff0c;加强加速数智化推进…