【408精华知识】主存相关解题套路大揭秘!

news2024/11/25 7:36:54

在这里插入图片描述

讲完了Cache,再来讲讲主存是怎么考察的,我始终认为,一图胜千言,所以对于很多部件,我都是通过画图进行形象的记忆,那么接下来我们对主存也画个图,然后再来详细解读其考察套路~

文章目录

  • 零、主存的真面目
  • 一、按存储方式分类的存储器
    • (一)随机存取存储器(Random Access Memory,RAM)
      • 1.静态随机存取存储器(Static RAM,SRAM)
      • 2.动态随机存取存储器(Dynamic RAM,DRAM)
      • 3.SRAM与DRAM的对比
    • (二)只读存储器(Read Only Memory,ROM)
      • 1.掩模式只读存储器(Mask ROM,MROM)
      • 2.一次可编程只读存储器(Programmable ROM,PROM)
      • 3.可擦除可编程只读存储器(Erasable Programmable ROM,EPROM)
      • 4.闪速存储器(Flash Memory)
      • 5.固态硬盘(SolidState Drives,SSD)
    • (三)顺序存取存储器(SAM)
    • (四)直接存取存储器(DAM)
    • (五)相联存储器(CAM)
  • 二、线数计算
    • (一)地址线位数
    • (二)数据线位数
    • (三)片选线位数
      • 1.线选法
      • 2.译码片选法
    • (四)读写控制线位数
  • 三、主存容量的扩展
    • (一)位扩展
    • (二)字扩展
    • (三)字位同时扩展
  • 四、多模块存储器
    • (一)单体多字存储器
    • (二)多体并行存储器
      • 1.高位交叉编址
      • 2.低位交叉编址

零、主存的真面目

在这里插入图片描述
接下来我们所有关于主存的考察形式的讨论都将围绕这张图展开~

一、按存储方式分类的存储器

我们观察这张主存图,可以发现它包含了两个部分,分别是RAM和ROM,它们是按存储方式分类的两种存储器,如果按存储方式来进行分类,可以将存储器分为以下五类:

(一)随机存取存储器(Random Access Memory,RAM)

存储器的任何一个存储单元的内容都可以随机存取,而且存取时间与存储单元的物理位置无关,主要用作主存或高速缓冲存储器。RAM 又分为以下两种:

1.静态随机存取存储器(Static RAM,SRAM)

SRAM的存储元是用双稳态触发器(六晶体管 MOS)来记忆信息的,静态是指即使信息被读出后,它仍保持其原状态而不需要再生(非破坏性读出),一般用于Cache

2.动态随机存取存储器(Dynamic RAM,DRAM)

利用存储元电路中栅极电容上的电荷来存储信息的,DRAM的基本存储元通常只使用一个晶体管,所以它比 SRAM 的密度要高很多。相对于 SRAM来说,DRAM具有集成度高、位价低和功耗低等优点,但DRAM的存取速度比 SRAM慢,且必须定时刷新和读后再生,一般用于主存

刷新方式分为三种:
在这里插入图片描述

3.SRAM与DRAM的对比

类型特点SRAM(不刷新)DRAM(要刷新)
存储信息触发器(比较稳定)栅极电容(容易跑电)
破坏性读出?是(读一次放一次电)
读出后需要重写?是(放完电得给它补)
运行速度快(不需要补电)慢(需要补电)
集成度
发热量
存储成本
易失性存储器?是(没电不行)是(没电不行)
需要刷新?
送行列地址一起送分开送
常用作Cache主存

(二)只读存储器(Read Only Memory,ROM)

存储器的内容只能随机读出而不能写入。信息一旦写入存储器就固定不变,即使断电,内容也不会丢失,它与随机存储器可共同作为主存的一部分,统一构成主存的地址域。根据制造工艺的不同,ROM 可分为以下几种:

1.掩模式只读存储器(Mask ROM,MROM)

直接写入,无法修改。

2.一次可编程只读存储器(Programmable ROM,PROM)

只可写入一次,不可再修改。

3.可擦除可编程只读存储器(Erasable Programmable ROM,EPROM)

可进行多次重写。

4.闪速存储器(Flash Memory)

可进行多次快速擦除重写,由于写的时候需要先擦除,所以写比读慢,每个存储元只需要单个MOS管,位密度比RAM高,如U盘,SD卡

5.固态硬盘(SolidState Drives,SSD)

由控制单元+Flash芯片组成,可进行多次快速擦除重写,如电脑上的机械硬盘

(三)顺序存取存储器(SAM)

属于串行访问存储器,对存储单元进行读/写操作时,需按其物理位置的先后顺序寻址,包括顺序存取存储器,如磁带

(四)直接存取存储器(DAM)

属于串行访问存储器,对存储单元进行读/写操作时,需按其物理位置的先后顺序寻址,包括直接存取存储器,如磁盘

(五)相联存储器(CAM)

可以按内容访问的存储器,主要用于虚拟存储器中存放段表、页表和快表,以及Cache中存放块地址,这是因为在这两种应用中都需要快速查找。

二、线数计算

关于主存有一类题目是计算主存相关的线总位数,我们观察上面的图,可以发现主要有四类线:地址线、数据线、片选线、读写控制线,因此计算线位数主要就是这四类线,我们一个个来看。

(一)地址线位数

地址线用于寻址,其位数与MAR位数相同,其决定了主存地址空间的最大可寻址范围,例如36位地址最大寻址范围为0~236-1,即地址从0开始编号。

(二)数据线位数

数据线用于传送数据,其位数与MDR位数相同,其决定了一次可传送的最大数据位数,比如64位数据线,采用字节编址,那么最多可以存取8个单元的内容。

(三)片选线位数

CPU要实现对存储单元的访问,首先要选择存储芯片,即进行片选;然后在选定的芯片中选择具体的存储单元,以进行数据的读/写,即进行字选。芯片内的字选通常是由CPU送出的N条低位地址线完成(N由片内存储容量2N决定)。片选信号的产生方法分为线选法和译码片选法。

1.线选法

线选法用除片内寻址外的高位地址线直接连接至各个存储芯片的片选端,当某位地址线信息为“0”时,就选中与之对应的存储芯片。这些片选地址线每次寻址时只能有一位有效,不允许同时有多位有效,这样才能保证每次只选中一个芯片(或芯片组)。假设 4片2K×8位存储芯片采用线选法构成 8K×8 位存储器,其中A10-A0用于片内寻址,则各芯片的片选信号如表:

所选中芯片A14-A11
01110
11101
21011
30111

因此如果采用线选法进行片选,片选线位数等于所要选的片总数

2.译码片选法

译码片选法用除片内寻址外的高位地址线通过地址译码器产生片选信号。如用8片8K×8位的存储芯片组成64K×8位存储器(地址线为16位,数据线为8位),需要8个片选信号;若采用线选法,除去片内寻址的13位地址线,仅余高3位,不足以产生8个片选信号。因此,采用译码片选法,即用一片74LS138作为地址译码器,高3位用于片选,则A15A14A13=000时选中第一片,A15A14A13=001时选中第二片,以此类推。

因此如果采用译码片选法进行片选,片选线位数等于 log2(所要选的片总数)

(四)读写控制线位数

控制对芯片的读写,一般为1位。

三、主存容量的扩展

由于单个存储芯片的容量是有限的,它在字数或字长方面与实际存储器的要求都有差距,因此需要在字和位两方面进行扩充才能满足实际存储器的容量要求。

(一)位扩展

位扩展是指对字长进行扩展(增加存储字长)。当CPU 的系统数据线数多于存储芯片的数据位数时,必须对存储芯片扩位,使其数据位数与CPU的数据线数相等。如图,8片8Kx1bit的RAM芯片组成8Kx8bit的存储器:
在这里插入图片描述

(二)字扩展

字扩展是指对存储字的数量进行扩展,而存储字的位数满足系统要求。系统数据线位数等于芯片数据线位数,系统地址线位数多于芯片地址线位数。如图,用4片16K×8位的RAM芯片组成64K×8位的存储器:
在这里插入图片描述

(三)字位同时扩展

字位同时扩展是前两种扩展的组合,这种方式既增加存储字的数量,又增加存储字长。如图,用8片16K×4位的RAM芯片组成64K×8位的存储器:
在这里插入图片描述

四、多模块存储器

多模块存储器是一种空间并行技术,利用多个结构完全相同的存储模块的并行工作来提高存储器的吞吐率。常用的有单体多字存储器和多体低位交叉存储器。CPU的速度比存储器快得多,若同时从存储器中取出n条指令,就可以充分利用 CPU资源,提高运行速度。多体交叉存储器就是基于这种思想提出的。

(一)单体多字存储器

在单体多字系统中,每个存储单元存储m个字,总线宽度也为m个字,一次并行读出m个字。在一个存取周期内,从同一地址取出m条指令,然后将指令逐条送至CPU执行,即每隔 1/m存取周期,CPU 向主存取一条指令,这显然提高了单体存储器的工作速度。

(二)多体并行存储器

多体并行存储器由多体模块组成。每个模块都有相同的容量和存取速度,各模块都有独立的读/写控制电路、地址寄存器和数据寄存器。它们既能并行工作,又能交叉工作。多体并行存储器分为高位交叉编址和低位交叉编址两种。

高位交叉编址和低位交叉编址的区别在于体号在地址的前面部分还是后面部分。

1.高位交叉编址

在这里插入图片描述
在高位交叉方式下,总把低位的体内地址送到由高位体号确定的模块内进行译码。访问一个连续主存块时,总是先在一个模块内访问,等到该模块访问完才转到下一个模块访问,CPU总是按顺序访问存储模块,各模块不能被并行访问,因而不能提高存储器的吞吐率。

2.低位交叉编址

在这里插入图片描述
低位交叉方式下,总是把高位的体内地址送到由低位体号所确定的模块内进行译码。程序连续存放在相邻模块中,因此称采用此编址方式的存储器为交叉存储器。交叉存储器可以采用轮流启动或同时启动两种方式。

轮流启动方式下,若每个模块一次读/写的位数正好等于数据总线位数,模块的存取周期为T,总线周期为r,为实现轮流启动方式,存储器交叉模块数应大于或等于m=T/r,按每隔1/m个存取周期轮流启动各模块,则每隔1/m个存取周期就可读出或写入一个数据,存取速度提高m倍。交叉存储器要求其模块数大于或等于m,以保证启动某模块后经过m×r的时间后再次启动该模块时,其上次的存取操作已经完成(以保证流水线不间断)。

这样,连续存取m个字所需的时间为t1=T+(m-1)r。而顺序方式连续读取m个字所需的时间为t2=mT,可见交叉存储器的带宽大大提高。

同时启动方式下,若所有模块一次并行读/写的总位数正好等于数据总线位数,则可以同时启动所有模块进行读/写。设每个模块一次读/写的位数为16位,模块数m=4,数据总线位数为64位,4个模块一共提供64位,正好构成一个存储字,因此应该同时启动4个模块进行并行读/写。

写在后面

这个专栏主要是我在学习408真题的过程中总结的一些笔记,因为我学的也很一般,如果有错误和不足之处,还望大家在评论区指出。希望能给大家的学习带来一点帮助,共同进步!!!

参考资料
[1]王道408教材(2025版)
[2]王道课程资料

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

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

相关文章

Linux驱动学习之模块化,参数传递,符号导出

1.模块化 1.1.模块化的基本概念: 模块化是指将特定的功能或组件独立出来,以便于开发、测试和维护。在Linux设备驱动中,模块化允许将驱动程序作为内核模块动态加载到系统中,从而提高了系统的灵活性和可扩展性。 1.2.Linux内核模…

Kata Containers零基础学习从零到一

文章目录 docker和Kata Containers的区别Docker容器共享宿主机内核每个容器实例运行在轻量级虚拟机(MicroVM)总结 通俗例子Kata Containers架构实际Kata Containers架构图解容器技术栈总结 agent和shim家长(shim进程)的角色保姆&a…

OpenHarmony 实战开发——一文总结ACE代码框架

一、前言 ACE_Engine框架是OpenAtom OpenHarmony(简称“OpenHarmony”)的UI开发框架,为开发者提供在进行应用UI开发时所必需的各种组件,以及定义这些组件的属性、样式、事件及方法,通过这些组件可以方便进行OpenHarmo…

java基础-JVM日志、参数、内存结构、垃圾回收器

一、基础基础 1.1 数据类型 Java的数据类型分为原始数据类型和引用数据类型。 原始数据类型又分为数字型和布尔型。 数字型又有byte、short、int、long、char、float、double。注意,在这里char被定义为整数型,并且在规范中明确定义:byte、…

primeflex样式库笔记 Display相关的案例

回顾 宽度设置的基本总结 w-full:表示widtdh:100%;占满父容器的宽度。 w-screen:表示占满整个屏幕的宽度。 w-1到w-12,是按百分比划分宽度,数字越大,占据的比例就越大。 w-1rem到w-30rem&…

推特热帖:大语言模型自荐能够替代的20种人类工作!快来看你是否需要转行!

最近推特上有一个例子引起了广泛的讨论,事情的起因是这样的:网友让 GPT-4o 预测一下自己未来将会替代人类哪些工作? 这听起来很有趣!GPT-4o会给出什么样的预测呢? 3.5研究测试:hujiaoai.cn 4研究测试&…

动物合并消除休闲游戏源码 Animal Merge 益智游戏

一款动物合并消除休闲游戏源码,Animal Merge是一款引人入胜的益智游戏,玩家的任务是合并方块,创造出可爱的动物,这些动物的体型会逐渐变大。游戏玩法包括将方块放到网格上,并战略性地将它们合并以形成更大的动物形状。…

数据库--数据库基础(一)

目录 第一章 绪论 一.数据库的基本概念 1. 数据库的4个基本概念 2、数据库系统的特点 二.数据库和文件 三.数据模型 1.概念模型 2.逻辑模型(物理模型) 2.1关系模型 四.数据库系统的三级模式结构: 五数据库的二级映像功能与数据独立性 第二章 关系数据库…

ffpmeg windows WSl 编译so

1.NDK 环境变量配置 2.git clone ffpmeg 3.创建脚本(需先下载gcc编译器) 64位脚本如下 #!/bin/bashexport NDK/home/test/ndk20 #这里配置先你的 NDK 路径 TOOLCHAIN$NDK/toolchains/llvm/prebuilt/linux-x86_64function build_android {./configure \ …

javas-core VS java-object-diff

对照工具选择 javas-core 和 java-object-diff ,对比demo https://github.com/kofgame/objectdiff-vs-javers,都为同源对比,都支持嵌套对象。 使用JMH测试方法进行性能测试,使用题库的QuestionResponseVO对象来进行对照对比,进行…

若依nodejs版本过高问题解决方案

由于nodejs版本过高,可能会导致vue-cli项目运行报错。 目录 方法1:每次启动项目前,输入配置命令 方法2:修改package.js

aws msk加密方式和问控制连接方式

msk加密方式 msk提供了两种加密方式 静态加密传输中加密 创建集群时可以指定加密方式,参数如下 aws kafka create-cluster --cluster-name "ExampleClusterName" --broker-node-group-info file://brokernodegroupinfo.json --encryption-info file:/…

结构体(位段)内存分配

结构体由多个数据类型的成员组成。那编译器分配的内存是不是所有成员的字节数总和呢? 首先,stu的内存大小并不为29个字节,即证明结构体内存不是所有成员的字节数和。   其次,stu成员中sex的内存位置不在21,即可推测…

【AI大模型】这可能是最简单的本地大模型工具,无须部署,一键使用

目录 前言 LM-Studio​编辑 那么问题来了,为什么我要在本地部署大模型? 隐私性: 定制性: 成本和体验的优化: 工具功能特点和使用方式介绍: 首页提供搜索功能和一些模型的推荐 模型下载管理&#x…

监控员工电脑屏幕的五大软件(电脑监控软件大盘点)

监控员工电脑屏幕是企业为了提升工作效率、确保信息安全和合规性而采取的一种常见做法。以下是五款在2024年备受推荐的员工电脑屏幕监控软件,每款软件都具有其独特的功能和优势: 1. 域智盾 域智盾是一款全面的终端管理系统,集成了实时屏幕监…

开源博客项目Blog .NET Core源码学习(26:App.Hosting项目结构分析-14)

后台管理页面的系统管理下主要包括用户管理、角色管理、按钮管理和菜单管理,其中创建用户时要指定角色,创建角色时需指定菜单权限,按钮管理也是基于各菜单项进行设置,只有菜单管理相对独立,因此本文学习并分析App.Host…

JAVA云HIS医院系统源码 HIS源码:云HIS系统与SaaS的关系

云HIS系统与SaaS的关系 云HIS系统是一种基于云计算技术的医院信息系统,它采用B/S架构,通过云端SaaS服务的方式提供。用户可以通过浏览器访问云HIS系统,无需关注系统的部署、维护、升级等问题。云HIS系统通常具有模板化、配置化、智能化等特点…

SpirngMVC框架学习笔记(一):SpringMVC基本介绍

1 SpringMVC 特点&概述 SpringMVC 从易用性,效率上 比曾经流行的 Struts2 更好 SpringMVC 是 WEB 层框架,接管了 Web 层组件, 比如控制器, 视图, 视图解析, 返回给用户的数据格式, 同时支持 MVC 的开发模式/开发架构SpringMVC 通过注解,…

sky walking日志采集以及注意事项

文章目录 1,sky walking日志采集功能概述2,采集log4j2日志3,采集logback日志4,效果展示5,注意事项 1,sky walking日志采集功能概述 在介绍Sky walking日志采集功能之前,最好在系统学习一遍日志…

java在类的定义中创建自己的对象?

当在main方法中新建自身所在类的对象,并调用main方法时,会不断循环调用main方法,直到栈溢出 package com.keywordStudy;public class mainTest {static int value 33;public static void main(String[] args) throws Exception{String[] sn…