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

news2024/10/5 19:15:23

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

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

这一部分主要讲解了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)。当进程需要访问一个地址时,操作系统首先查找该地址对应的段号的段表项,确定物理地址空间中该逻辑段的位置和大小。接着,根据偏移量计算出页面号,并在对应的页表项中查找物理帧号。最后,使用物理帧号和页内偏移量组合成最终的物理地址。

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

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

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

相关文章

C++笔记——第十六篇 异常

目录 1.C语言传统的处理错误的方式 2. C异常概念 3. 异常的使用 3.1 异常的抛出和捕获 在函数调用链中异常栈展开匹配原则 3.2异常安全 4.异常的优缺点 1.C语言传统的处理错误的方式 传统的错误处理机制: 1. 终止程序,如assert,缺陷&a…

飞腾ft2000-麒麟V10-SP1安装Docker、运行gitlab容器

目录 一、安装及配置docker 1、卸载docker相关包及删除相关配置文件 2、安装二进制docker 1.下载软件包 2.解压 3.修改镜像加速地址 4.修改profile文件 5.启动docker 6.docker常用命令 二、安装并启动gitlab镜像 1.安装gitlab镜像 1.查询满足使用需求的gitlab版本 2…

很佩服的一个Google大佬,离职了。。

这两天,科技圈又有一个突发的爆款新闻相信不少同学都已经看到了。 那就是75岁的计算机科学家Geoffrey Hinton从谷歌离职了,从而引起了科技界的广泛关注和讨论。 而Hinton自己也证实了这一消息。 提到Geoffrey Hinton这个名字,对于一些了解过…

使用 Mercury 直接从 Jupyter 构建 Web 程序

动动发财的小手,点个赞吧! 有效的沟通在所有数据驱动的项目中都至关重要。数据专业人员通常需要将他们的发现和见解传达给利益相关者,包括业务领导、技术团队和其他数据科学家。 虽然传达数据见解的传统方法(如 PowerPoint 演示文…

Oracle SQL优化相关数据项

要掌握SQL调优技术,就需要能读懂SQL语句的执行计划,要想读懂SQL语句的执行计划,不仅需要准确理解SQL语句执行计划中各操作及其含义,还需要准确理解SQL语句执行计划中各数据项的含义。本书第7章中,已经对SQL语句执行计划中各个操作的含义做了详尽的阐述,本章中,我们将对S…

爱普特APT32F110x系列时钟介绍

最近要用APT32F110x做一些开发,顺便学习一下。 APT32F110x 是由爱普特推出的基于平头哥(T-Head Microsystems)CPU 内核开发的 32 位高性能低成本单片机。 APT32F1104x基于嵌入式 Flash 工艺制造,内部丰富的模拟资源,包…

ShardingJDBC核心概念与快速实战

目录 ShardingSphere介绍 ShardingSphere特点 ShardingSphere简述 ShardingSphere产品区分 ShardingJDBC实战 核心概念 实战 ShardingJDBC的分片算法 ShardingSphere目前提供了一共五种分片策略: 分库分表带来的问题 ShardingSphere介绍 ShardingSphere特…

结合SSE实现实时位置展示与轨迹展示

概述 实时位置与实时轨迹的展示是webgis中非常常见的一个功能,本文结合SSE来实现实现此功能。 SSE简介 SSE是Sever-Sent Event的首字母缩写,它是基于HTTP协议的,在服务器和客户端之间打开一个单向通道,服务端响应的不再是一次性…

车牌输入框 封装 (小程序 vue)

车牌输入框 封装 小程序licenseNumber.jslicenseNumber.jsonlicenseNumber.wxmllicenseNumber.wxss样例 vuevnp-input-box.vuevnp-input.vuevnp-keyboard.vue样例 小程序 licenseNumber.js const INPUT_NUM 8;//车牌号输入框个数 const EmptyArray new Array(INPUT_NUM).fi…

6个「会议议程」实例和免费模板

我们都参加过一些团队会议,在这些会议上,大多数与会者对会议的目的一无所知,而发言者则使讨论偏离轨道。 接下来就是一场真正的灾难了。 你会发现你的团队因为“上述会议”而浪费了很多时间,却没有达到任何目的。 好消息! 一个…

【Python】序列类型②-元组

文章目录 1.元组简介2.元组的定义2.1定义只有一个元素的元组 3.元组的下标访问4.元组的常用方法5.使用in判断是否存在元素6.多元赋值操作 1.元组简介 元组和列表一样可以存放多个,不同数据类型的元素 与列表最大的不同就是:列表是可变的,而元组不可变 2.元组的定义 元组的定义:…

TCP/UDP协议

一、协议的概念 什么是协议? 从应用的角度出发,协议可理解为“规则”,是数据传输和数据的解释的规则。 假设,A、B双方欲传输文件。规定: 第一次,传输文件名,接收方接收到文件名,…

Springboot +Flowable,ReceiveTask的简单使用方法

一.简介 ReceiveTask(接受任务),它的图标如下图所示: ReceiveTask 可以算是 Flowable 中最简单的一种任务,当该任务到达的时候,它不做任何逻辑,而是被动地等待用户确认。 ReceiveTask 往往适…

RepVGG: Making VGG-style ConvNets Great Again

文章地址:《RepVGG: Making VGG-style ConvNets Great Again》 代码地址:https://github.com/megvii-model/RepVGG 文章发表于CVPR2021,文章提出一种将训练态和推断态网络结构解耦的方法。文章认为目前复杂的网络结构能够获取更高的精度&am…

学大数据需要java学到什么程度

大数据需求越来越多,只有技术在手不愁找不到工作。 学习大数据需要掌握什么语言基础? 1、Java基础 大数据框架90%以上都是使用Java开发语言,所以如果要学习大数据技术,首先要掌握Java基础语法以及JavaEE方向的相关知识。 2、My…

记一次OJ在线代码编辑器(代码编译+运行,C、C++、Java)

如何在SpringBootVue的项目中实现在线代码编译及执行(支持编译运行C、C、Java),研究了一天,真实能用,下面直接上源码!!! ————————————————————————————…

MySQL 知识:迁移数据目录到其他路径

一、系统环境 操作系统:Centos 7 已安装环境:MySQL 8.0.26 二、开始操作 2.1 关闭SELinux 为了提高 Linux 系统的安全性,在 Linux 上通常会使用 SELinux 或 AppArmor 实现强制访问控制(Mandatory Access Control MAC&#xff…

中间件的概念

中间件(middleware)是基础软件的一大类,属于可复用的软件范畴。中间件在操作系统软件,网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行于开发的环境,帮助用户灵活、高效的开发和集成复杂的…

阶段二38_面向对象高级_网络编程[UDP单播组播广播代码实现]

知识: InetAddresss:getByName,getHostName,getHostAddress方法UDP通信程序:单播,组播,广播代码实现一.InetAddress 的使用 1.static InetAddress getByName(String host) 确定主机名称的IP地址。主机名称可以是机器名称&#x…

【Java】通过反射方法不改变HashCode以修改String的值

如何修改String的值? 我们首先会想到如下两种方法 方式一:通过StringBuild/StringBuffer String s1 "Hello World!"; System.out.println("s1"s1" HashCode"s1.hashCode()); StringBuilder sb new StringBuilder(s1…