当前位置: 首页 > news >正文

05《存储器层次结构与接口》计算机组成与体系结构 系列课

目录

存储器层次结构概述

层次结构的定义

存储器的排名

存储器接口

处理器与存储器的速度匹配

存储器接口的定义

存储器访问命中率

两种接口

第1种方式:并行

命中率的计算

存储器访问时间

第2种方式:逐级

结语


大家好,欢迎回来。上一节课,我们学习了:​04《计算机的内部存储》计算机组成与体系结构 系列课​。在本次课程中,我们将学习关于存储器层次结构的知识,并且简要介绍不同的存储单元是如何与处理器进行接口连接的。那么,让我们开始学习吧!

存储器层次结构概述

层次结构的定义

简单来说,“层次结构”这个词意味着 排名。排名可以根据不同的参数来进行。

例如,如果我们根据上映日期来考虑诺兰的《黑暗骑士》三部曲,首先是《蝙蝠侠:侠影之谜》,然后是《黑暗骑士》,最后是《黑暗骑士崛起》。

但如果我们根据烂番茄网站的评分来看,以94%的新鲜度位居榜首的是《黑暗骑士》,因为老实说希斯·莱杰的表现实在是太出色了,其次是《黑暗骑士崛起》,最后是《蝙蝠侠:侠影之谜》。如果考虑Metacritic的评分,这个排名也是相同的。

存储器的排名

同样地,基于不同的方面,存储器存储也可以进行排名。如果我们考虑访问时间和大小,我们可以这样对存储单元进行排名:寄存器由触发器组成,并且嵌入在处理器内部,因此访问它们的时间是最少的。接下来是SRAM缓存,然后是DRAM主存储器。最后,是二级存储器。然而,在成本和使用频率方面,这个层次结构是相反的。

我的意思是,随着我们在层次结构中向上移动,成本和使用频率会增加。

存储器接口

处理器与存储器的速度匹配

在我们之前的讨论中,我们已经了解到处理器非常快,而拥有存储器层次结构的唯一目的就是:以合理的成本弥补快速处理器和慢速存储器之间的速度不匹配。

存储器接口的定义

现在,让我们来谈谈存储器接口,它是计算机组织的一部分,涉及将不同级别的存储单元,特别是与处理器以及I/O外围设备连接的方式。通常,处理器的速度是以MIPS为单位来计算的。有些人称之为MIPS,它代表每秒百万条指令,我们的目标是:以更快且成本效益高的方式,从存储器中向处理器提供那么多的指令。

存储器访问命中率

让我们尝试理解存储器的不同级别。如果我说,第n级别的信息是第(n+1)级别的信息的一个子集,这意味着如果处理器在第n级别存储器中查找某物,无论是任何指令或数据,如果只在该级别找到,我们称之为“命中”。否则,它被称为“未命中”,然后处理器会去第(n+1)级别,即下一个级别查找相同的信息。

所以,在未命中的情况下,在第n级别和第n+1级别查找信息所花费的时间因该被考虑到。

然而,情况并非总是这这样。实际上,这取决于接口的连接方式。让我深入的来看看。通常情况下,接口有两种方式。下面这个插图将帮助我们来进行理解。

两种接口

第1种方式:并行

所以不容的存储级别,都同时连接到处理器,每当处理器想要一些信息时,他可以在所有不同级别的存储器中并行查找,如图所示,就是处理器连接到了三个不同级别的存储单元。我们暂且叫他们分为是M1,M2,M3。而访问他们的时间分别是T1,T2,T3。同时,T1<T2<T3。

命中率的计算

现在,我们假设对于一个程序或一组指令,M1和M2的命中率分别为H1和H2。ok,你一定会再想,到底什么是命中率啊?怎么计算呢?

我们已经知道,在执行过程中,指令集从非易失性二级存储中被带入主存储器。同时,频繁访问的部分存储在缓存中。

假设一个程序中有100条指令,它们永久存储在存储器层次结构的最后一级,即二级存储器中。假设这100条指令中有80条被带入主存储器。在这种情况下,命中率将是80除以100,即0.8或80%。

这意味着:在执行过程中,处理器有80%的机会在主存储器中获得所需的指令。

由于最后一级是永久存储,命中率自然是100%。所以,我们并不真正需要担心这一级,因为如果程序不在这里,处理器就无法执行它。就像如果我们没有音频文件,我们怎么播放它呢?

存储器访问时间

所以,回到我们的图示,有了所有这些信息,如果我们现在尝试找出在这个组织中,平均需要多少时间来找到一条指令,这也就是人们常说的有效或平均存储器访问时间,公式如下。

让我们理解一下这个公式,这样我们就不需要再去专门记住它了。

所以,有H1%的机会在M1中找到指令。这是访问M1所花费的时间。现在,(1-H1)%的机会是处理器可能在M1中找不到所需的指令,这被称为M1的未命中率或未命中比率。对于这些情况,处理器将查看下一个级别,即M2,它有H2%的机会拥有这些指令。同时,访问M2所花费的时间是T2,因此是(1-H1)乘以H2和T2。

所以,最终呢,有(1-H2)%的几率是处理器可能在M2中找不到所需的指令,所以,M2的未命中率或未命中比率就是(1-H2)。因此(1-H2)(1-H2)T3的意思就是考虑到了所有找不到所需指令的情况,无论是在M1还是在M2上,这种情况下,我们就不得不在M3上进行查找了,也就是最后一级。访问M3的所需时间是T3,所以公式就是:(1-H2)(1-H2)T3。

请记住,这些不同级别的存储器都与处理器直接相连,而它们各自的访问时间差异,正是实现并行操作的关键所在。

第2种方式:逐级

第二种方式是逐级接口存储单元,这意味着,如果所需的指令在M1中找不到,那么处理器将去下一个级别,即M2中查找。如果它甚至不在那里,寻找过程将继续到下一个级别。

所以,在这种情况下,公式将变成这样。

因为在这里,处理器并不是同时连接到所有存储单元。同时,如果处理器在第(n+1)级别寻找指令,这意味着它已经在第n级别或前一个级别寻找过它,并且没有找到。这就是为什么要同时考虑了两个访问时间(T1+T2)。

结语

好了,这就是关于存储器层次结构以及存储器接口不同方式的所有内容。

在下一堂课中,我们将尝试解决一些与这个概念相关的数值问题,以便有一个清晰的理解。

所以,我希望在下一堂课中见到你们。谢谢大家的阅读。

相关文章:

05《存储器层次结构与接口》计算机组成与体系结构 系列课

目录 存储器层次结构概述 层次结构的定义 存储器的排名 存储器接口 处理器与存储器的速度匹配 存储器接口的定义 存储器访问命中率 两种接口 第1种方式:并行 命中率的计算 存储器访问时间 第2种方式:逐级 结语 大家好,欢迎回来。…...

elasticsearch报错fully-formed single-node cluster with cluster UUID

1.问题描述 k8s集群内部署的es中间件起不来,查看日志发现如下警告,节点发现功能开启,但是目前我是单节点服务,所以尝试编辑sts将节点发现功能去掉或者在部署时将你的sts的yaml文件和chart文件修改重新部署以去掉该功能 {"t…...

Milvus×Florence:一文读懂如何构建多任务视觉模型

近两年来多任务学习(Multi-task learning)正取代传统的单任务学习(single-task learning),逐渐成为人工智能领域的主流研究方向。其原因在于,多任务学习可以让我们以最少的人力投入,获得尽可能多…...

DAPP

02-DAPP 1 啥是 DApp? DApp,部署在链上的去中心化的应用。 DApp 是开放源代码,能运行在分布式网络上,通过网络中不同对等节点相互通信进行去中心化操作的应用。 DAPP 开放源代码,才能获得人的信任。如比特币&#xff…...

生产环境中,nginx 最多可以代理多少台服务器,这个应该考虑哪些参数 ?怎么计算呢

生产环境中,nginx 最多可以代理多少台服务器,这个应该考虑哪些参数 ?怎么计算呢 关键参数计算方法评估步骤总结 在生产环境中,Nginx最多可以代理的服务器数量并没有一个固定的限制,它取决于多个因素,包括Ng…...

【深度学习|目标跟踪】StrongSORT 详解(以及StrongSORT++)

StrongSort详解 1、论文及源码2、DeepSORT回顾3、StrongSORT的EMA4、StrongSORT的NSA Kalman5、StrongSORT的MC6、StrongSORT的BOT特征提取器7、StrongSORT的AFLink8、StrongSORT的GSI模块 1、论文及源码 论文地址:https://arxiv.org/pdf/2202.13514 源码地址&#…...

23种设计模式-原型(Prototype)设计模式

文章目录 一.什么是原型设计模式?二.原型模式的特点三.原型模式的结构四.原型模式的优缺点五.原型模式的 C 实现六.原型模式的 Java 实现七. 代码解析八.总结 类图: 原型设计模式类图 一.什么是原型设计模式? 原型模式(Prototype…...

Qt—QLineEdit 使用总结

文章参考:Qt—QLineEdit 使用总结 一、简述 QLineEdit是一个单行文本编辑控件。 使用者可以通过很多函数,输入和编辑单行文本,比如撤销、恢复、剪切、粘贴以及拖放等。 通过改变 QLineEdit 的 echoMode() ,可以设置其属性,比如以密码的形式输入。 文本的长度可以由 m…...

go-zero使用自定义模板实现统一格式的 body 响应

前提 go环境的配置、goctl的安装、go-zero的基本使用默认都会 需求 go-zero框架中,默认使用goctl命令生成的代码并没有统一响应格式,现在使用自定义模板实现统一响应格式: {"code": 0,"msg": "OK","d…...

BUGKU printf

整体思路 实现循环-->获取libc版本和system函数地址->将strcpy的got表项修改为system并获得shell 第一步:实现循环 从汇编语句可以看出,在每次循环结束时若0x201700处的值是否大于1则会继续循环。 encode1会将编码后的结果保存至0x2015c0处&am…...

深度学习:梯度下降法

损失函数 L:衡量单一训练样例的效果。 成本函数 J:用于衡量 w 和 b 的效果。 如何使用梯度下降法来训练或学习训练集上的参数w和b ? 成本函数J是参数w和b的函数,它被定义为平均值; 损失函数L可以衡量你的算法效果&a…...

`console.log`调试完全指南

大家好,这里是 Geek技术前线。 今天我们来探讨 Console.log() 的一些优点。并分析一些基本概念和实践,这些可以让我们的调试工作变得更加高效。 理解前端 log 与后端 log 的区别 前端 log 与后端 log 有着显著的不同,理解这一点至关重要。…...

ROS VSCode调试方法

VSCode 调试 Ros文档 1.编译参数设置 cd catkin_ws catkin_make -DCMAKE_BUILD_TYPEDebug2.vscode 调试插件安装 可在扩展中安装(Ctrl Shift X): 1.ROS 2.C/C 3.C Intelliense 4.Msg Language Support 5.Txt Syntax 3.导入已有或者新建ROS工作空间 3.1 导入工作…...

16 —— Webpack多页面打包

需求&#xff1a;把 黑马头条登陆页面-内容页面 一起引入打包使用 步骤&#xff1a; 准备源码&#xff08;html、css、js&#xff09;放入相应位置&#xff0c;并改用模块化语法导出 原始content.html代码 <!DOCTYPE html> <html lang"en"><head&…...

微服务即时通讯系统的实现(服务端)----(3)

目录 1. 消息存储子服务的实现1.1 功能设计1.2 模块划分1.3 模块功能示意图1.4 数据管理1.4.1 数据库消息管理1.4.2 ES文本消息管理 1.5 接口的实现1.5.1 消息存储子服务所用到的protobuf接口实现1.5.2 最近N条消息获取接口实现1.5.3 指定时间段消息搜索接口实现1.5.4 关键字消…...

.net6.0 mvc 传递 model 实体参数(无法对 null 引用执行运行时绑定)

说一下情况&#xff1a; 代码没问题&#xff0c;能成功从数据库里查到数据&#xff0c;能将数据丢给ViewBag.XXXX, 在View页面也能获取到 ViewBag.XXXX的值&#xff0c;但是发布到线上后报这个错&#xff1a; Microsoft.CSharp.RuntimeBinder.RuntimeBinderException: 无法对 …...

VUE 入门级教程:开启 Vue.js 编程之旅

一、Vue.js 简介 Vue.js 是一套构建用户界面的渐进式 JavaScript 框架。它专注于视图层的开发&#xff0c;能够轻松地与其他库或现有项目进行整合。Vue.js 的核心库只关注视图层&#xff0c;通过简洁的 API 实现数据绑定和 DOM 操作的响应式更新&#xff0c;让开发者可以高效地…...

Ubantu系统docker运行成功拉取失败【成功解决】

解决docker运行成功拉取失败 失败报错 skysky-Legion-Y7000-IRX9:~$ docker run hello-world docker: permission denied while trying to connect to the Docker daemon socket at unix:///var/run/docker.sock: Head “http://%2Fvar%2Frun%2Fdocker.sock/_ping”: dial uni…...

mvn-mac操作小记

1.安装brew 如果报错&#xff0c;Warning: /opt/homebrew/bin is not in your PATH. vim ~/.zshrc&#xff0c;最后一行追加 export PATH“/opt/homebrew/bin:$PATH” source ~/.zshrc 2.安装brew install maven mvn -version查看路径 Maven home: /opt/homebrew/Cellar/mav…...

机器学习——生成对抗网络(GANs):原理、进展与应用前景分析

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一. 生成对抗网络的基本原理二. 使用步骤2.1 对抗性训练2.2 损失函数 三. GAN的变种和进展四. 生成对抗网络的应用五. 持续挑战与未来发展方向六. 小结 前言 生…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?

大家好&#xff0c;欢迎来到《云原生核心技术》系列的第七篇&#xff01; 在上一篇&#xff0c;我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在&#xff0c;我们就像一个拥有了一块崭新数字土地的农场主&#xff0c;是时…...

51c自动驾驶~合集58

我自己的原文哦~ https://blog.51cto.com/whaosoft/13967107 #CCA-Attention 全局池化局部保留&#xff0c;CCA-Attention为LLM长文本建模带来突破性进展 琶洲实验室、华南理工大学联合推出关键上下文感知注意力机制&#xff08;CCA-Attention&#xff09;&#xff0c;…...

Zustand 状态管理库:极简而强大的解决方案

Zustand 是一个轻量级、快速和可扩展的状态管理库&#xff0c;特别适合 React 应用。它以简洁的 API 和高效的性能解决了 Redux 等状态管理方案中的繁琐问题。 核心优势对比 基本使用指南 1. 创建 Store // store.js import create from zustandconst useStore create((set)…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

【Java_EE】Spring MVC

目录 Spring Web MVC ​编辑注解 RestController RequestMapping RequestParam RequestParam RequestBody PathVariable RequestPart 参数传递 注意事项 ​编辑参数重命名 RequestParam ​编辑​编辑传递集合 RequestParam 传递JSON数据 ​编辑RequestBody ​…...

MySQL 8.0 OCP 英文题库解析(十三)

Oracle 为庆祝 MySQL 30 周年&#xff0c;截止到 2025.07.31 之前。所有人均可以免费考取原价245美元的MySQL OCP 认证。 从今天开始&#xff0c;将英文题库免费公布出来&#xff0c;并进行解析&#xff0c;帮助大家在一个月之内轻松通过OCP认证。 本期公布试题111~120 试题1…...

CRMEB 框架中 PHP 上传扩展开发:涵盖本地上传及阿里云 OSS、腾讯云 COS、七牛云

目前已有本地上传、阿里云OSS上传、腾讯云COS上传、七牛云上传扩展 扩展入口文件 文件目录 crmeb\services\upload\Upload.php namespace crmeb\services\upload;use crmeb\basic\BaseManager; use think\facade\Config;/*** Class Upload* package crmeb\services\upload* …...

Rapidio门铃消息FIFO溢出机制

关于RapidIO门铃消息FIFO的溢出机制及其与中断抖动的关系&#xff0c;以下是深入解析&#xff1a; 门铃FIFO溢出的本质 在RapidIO系统中&#xff0c;门铃消息FIFO是硬件控制器内部的缓冲区&#xff0c;用于临时存储接收到的门铃消息&#xff08;Doorbell Message&#xff09;。…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...