计算机多级存储模型

2024-09-01 00:18
文章标签 模型 存储 计算机 多级

本文主要是介绍计算机多级存储模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

       在研究CPU相关内容的时候,可以潜在地把存储当做一个简单的顺序存储器(类似一个大数组),CPU可以在常数时间里访问存储器的数据。但是实际上存储系统并不是这么简单的模型。

存储器结构

在这里插入图片描述
       实际的存储器模型可以形象的表示为金字塔结构(图片来自深入理解计算机系统,很好的书,值得一读)。每个上一层存储作为下一层存储的缓存,主要原因是不可能使用速度很快但是造价很高的寄存器存储所有数据,但是磁盘存储的存取速度又远远不能跟上CPU的计算速度。多级存储存在的意义就是为了解决速度和造价之间的矛盾。

由存储器结构导致的问题

       每个上层存储都作为下层存储的缓存,而缓存的主要特点是只能存储少部分拷贝数据。将必要的数据写入到缓存,最终一层一层运输到CPU中投入计算,是这个多级存储模型的最终目的。怎样调度数据写入写出缓存,以多大数据单元调度数据,是这个模型面临的主要问题。

问题解决示例

       基本各级缓存都需要解决上述关键的问题:1. 如何分块;2. 如何调度。解决这两个问题的具体策略就构成了此级缓存的特征。由于内存调度策略更多是由软件实现(操作系统),属于下个操作系统层次的内容,不在这里过多论述。下面简要介绍一下高速缓存实现策略。

  • 高速缓存

       存储器结构金字塔中所示的高速缓存L1和L2是静态随机存储器(SRAM)。静态随机存储器是由电路实现的双稳态存储单元,可以保持在不同的电压状态之一,即使存在外界干扰,也会恢复到稳定状态。
       结构:
       比如一个计算机系统的存储器地址有m位,则这个系统所能寻址的空间大小为2m(注意这里不一定对应物理内存大小)。将这个系统的高速缓存的大小分成S组(S等于2s),则标识S组中的其中一个组的地址需要的s位。每个组有可以分成E行。每行中存在t位的标志位,可以在每组的范围内唯一标识该行;一个有效位标识可以标识该行该行数据是否有效;一个大小为2b字节的数据片存储有效数据。
       这个系统中寻址一个字节需要的地址大小为m位。对应在高速缓存中,其中有s位定位一个组,t位定位一个组中的某一行,还有b位定位某一行中缓存块的某一个字节,t=m-(s+b)。这就是高速缓存解决如何分块的方案。
在这里插入图片描述
       高速缓存的调度相对比较简单。以直接映射高速缓存为例,当CPU需要取一个数据做运算时,可以先通过这个数据的地址s位确定这个数据处于高速缓存的那个组,再通过地址的t位匹配确定该数据是否位于这个组的某一行。如果匹配则可以根据偏移地址b确定数据位置返回给CPU;如果不匹配则为不命中,需要从下级存储器中读取这个数据,同时从该存储器中清除一行,存储读取的数据,并将数据返回给CPU。

    本文总要介绍了目前计算机系统普遍应用的多级缓存的概念和多级缓存的特征(分块和调度),并举例介绍了高速缓存是如何解决分块和调度的问题。其实内存管理也包含在这个体系中,但是由于内部机制大部分由软件(操作系统)实现,是属于操作系统层次的要点,这里没有作介绍。

本系列文章:
    计算机底层架构(偏硬件)综述
    计算机处理器(CPU)基础
         汇编语言基础–机器级数据存储
         汇编语言基础–汇编操作指令概述
     计算机多级存储模型
     外设IO原理

这篇关于计算机多级存储模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1125404

相关文章

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI

基于Flask框架添加多个AI模型的API并进行交互

《基于Flask框架添加多个AI模型的API并进行交互》:本文主要介绍如何基于Flask框架开发AI模型API管理系统,允许用户添加、删除不同AI模型的API密钥,感兴趣的可以了解下... 目录1. 概述2. 后端代码说明2.1 依赖库导入2.2 应用初始化2.3 API 存储字典2.4 路由函数2.5 应

Oracle存储过程里操作BLOB的字节数据的办法

《Oracle存储过程里操作BLOB的字节数据的办法》该篇文章介绍了如何在Oracle存储过程中操作BLOB的字节数据,作者研究了如何获取BLOB的字节长度、如何使用DBMS_LOB包进行BLOB操作... 目录一、缘由二、办法2.1 基本操作2.2 DBMS_LOB包2.3 字节级操作与RAW数据类型2.

Java实现数据库图片上传与存储功能

《Java实现数据库图片上传与存储功能》在现代的Web开发中,上传图片并将其存储在数据库中是常见的需求之一,本文将介绍如何通过Java实现图片上传,存储到数据库的完整过程,希望对大家有所帮助... 目录1. 项目结构2. 数据库表设计3. 实现图片上传功能3.1 文件上传控制器3.2 图片上传服务4. 实现

C语言中的浮点数存储详解

《C语言中的浮点数存储详解》:本文主要介绍C语言中的浮点数存储详解,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、首先明确一个概念2、接下来,讲解C语言中浮点型数存储的规则2.1、可以将上述公式分为两部分来看2.2、问:十进制小数0.5该如何存储?2.3 浮点

MySQL常见的存储引擎和区别说明

《MySQL常见的存储引擎和区别说明》MySQL支持多种存储引擎,如InnoDB、MyISAM、MEMORY、Archive、CSV和Blackhole,每种引擎有其特点和适用场景,选择存储引擎时需根... 目录mysql常见的存储引擎和区别说明1. InnoDB2. MyISAM3. MEMORY4. A

Golang基于内存的键值存储缓存库go-cache

《Golang基于内存的键值存储缓存库go-cache》go-cache是一个内存中的key:valuestore/cache库,适用于单机应用程序,本文主要介绍了Golang基于内存的键值存储缓存库... 目录文档安装方法示例1示例2使用注意点优点缺点go-cache 和 Redis 缓存对比1)功能特性

C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)

《C#集成DeepSeek模型实现AI私有化的流程步骤(本地部署与API调用教程)》本文主要介绍了C#集成DeepSeek模型实现AI私有化的方法,包括搭建基础环境,如安装Ollama和下载DeepS... 目录前言搭建基础环境1、安装 Ollama2、下载 DeepSeek R1 模型客户端 ChatBo

SpringBoot快速接入OpenAI大模型的方法(JDK8)

《SpringBoot快速接入OpenAI大模型的方法(JDK8)》本文介绍了如何使用AI4J快速接入OpenAI大模型,并展示了如何实现流式与非流式的输出,以及对函数调用的使用,AI4J支持JDK8... 目录使用AI4J快速接入OpenAI大模型介绍AI4J-github快速使用创建SpringBoot