计算机组成原理(1)----主存储器

2024-02-15 22:28

本文主要是介绍计算机组成原理(1)----主存储器,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

1.基本半导体元件及原理

2.寻址


1.基本半导体元件及原理

一个主存储器可以分为存储器,MAR(地址寄存器)和MDR(数据寄存器),这三个部件由在时序控制逻辑的控制下工作

其中存储体用来存放二进制数据0和1,1个存储体由多个存储单元构成,一个存储单元由多个存储元构成,存储元如下图所示:

其中包含两个半导体元件:

1.MOS管,MOS管可理解为一种电控开关,输入电压达到某个阈值时,MOS管就可以接通

2.电容,一个电容由两个金属板和中间的绝缘体构成,可以以电容是否保存电荷来记录2进制的0和1,当保存电荷时,记录的是2进制的1,接着再接通MOS管,在一端检测到电流,就意味着输出了2进制1

若想让电容保存2进制1,那么就需在一端输入高电平,再接通MOS管,电容的上下两个金属板存在电压差,就会存储电荷了。

所以电容充电过程就是写数据的过程,电容放电过程就是读数据的过程

若将多个存储元合理相连,就可以一次性读出和写入多个2进制数据,多个存储元组成一个存储单元,在这里,一行表示一个存储单元(也就是一个存储字),多个行就是一个存储体(也就是存储矩阵),如图所示,一个存储字的字长为8bit

这里区分存储字和字节:

一个存储字的字长看一行有几个存储元,例如上面存储字长为8bit

一个字节8bit,即1Byte=8bit

如何通过一个地址决定读写哪一个字,这就涉及译码器的使用:

n位地址会对应2^n个存储单元,译码器会根据地址寄存器中给的地址,转变为某一条选通线的高电平信号。

例如CPU给MAR(地址寄存器)传输的是000,3个0的十进制即0(每个地址会对应译码器的一条输出线,总共有2^3=8个地址,所以译码器的输出端有8条线),所以译码器会将第0根字选线高电平输出,那么第0根线对应的存储元都会被接通,其中的2进制数据就能被读出了。 

具体地,红色的字选线被接通后,会通过绿色的数据线(位线),把每一位的2进制信息传输到MDR(数据寄存器)中,接着CPU会通过数据总线从MDR中取走整个存储字的数据(数据总线的宽度和存储字长是相同的

这个存储体的总容量=存储单元个数*存储字长=2^3*1Byte=8B

还需添加一个控制电路,控制MAR和MDR和译码器,例如,CPU通过地址总线,将地址送到MAR中,但是,由于我们是通过电信号传送2进制数据,而电信号可能会有不稳定的情况,所以在电信号稳定之前,这一电信号是不能传送给译码器的,所以只有电信号稳定,控制电路才能打开译码器的开关,让译码器接收这一地址,给出相应的数据信号,同理,输出时,只有输出的电信号稳定,控制电路才会使MDR通过数据总线输出数据信号给CPU

控制电路还需要连接片选线\overline{CS}(chip select,芯片选择信号)或\overline{CE}(chip enable,芯片使能信号),这些信号低电平有效,当我们给片选线加低电平时,表示这块芯片可以工作

一个内存条可能包含多块存储芯片,如果只想读取某块存储芯片指定地址的数据,那么只需要将这块芯片的片选信号使能(给低电平)即可。其他芯片(给高电平)

这些存储芯片会对外保留金属引脚,这些金属引脚用来接收地址线,数据线,读/写控制线,片选线传来的数据

n位地址--->2^n个存储单元
总容量=存储单元个数x存储字长=2^3 x 8bit =2^3 x 1Byte = 8B
8(存储单元个数)x8(存储字长)位的存储芯片

同时,控制电路还会连接读/写控制线,可以为一个读/写控制线(一根读/写线\overline{WE}低电平写高电平读),或两个线,一个读控制线(\overline{OE}允许读),一个写控制线(\overline{WE}允许写)

我们忽略内部的结构,就可得到下图:

存储矩阵就是存储体

译码驱动就是译码器+驱动器(为了使译码器输出的高电平信号稳定,通常会在译码器后添加驱动器,保证译码器输出的信号稳定)

读写电路包括上图的绿色线,红色线,以及控制电路

2.寻址

如下图所示,该存储体的字长为4B,总容量为1KB,即256个字,也就是总共256行

按字节寻址:总共1K个单元(地址线:10根),每个单元 1 B

按字寻址:256个单元(地址线:8根),每个单元 4 B

地址线为8根,只需要将地址算数左移两位,即在末尾添加两个0

例如要访问1号字,那就在1后面添加两个00,100:4,得到这个字起始字节的字节地址为4

再例如,访问2号字,在10后面添加两个00,1000:8,得到这个字起始字节的字节地址为8

按半字寻址:512个单元,每个单元 2 B

按双字寻址:128个单元,每个单元 8 B

这篇关于计算机组成原理(1)----主存储器的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

Java中流式并行操作parallelStream的原理和使用方法

《Java中流式并行操作parallelStream的原理和使用方法》本文详细介绍了Java中的并行流(parallelStream)的原理、正确使用方法以及在实际业务中的应用案例,并指出在使用并行流... 目录Java中流式并行操作parallelStream0. 问题的产生1. 什么是parallelS

Java中Redisson 的原理深度解析

《Java中Redisson的原理深度解析》Redisson是一个高性能的Redis客户端,它通过将Redis数据结构映射为Java对象和分布式对象,实现了在Java应用中方便地使用Redis,本文... 目录前言一、核心设计理念二、核心架构与通信层1. 基于 Netty 的异步非阻塞通信2. 编解码器三、

Java HashMap的底层实现原理深度解析

《JavaHashMap的底层实现原理深度解析》HashMap基于数组+链表+红黑树结构,通过哈希算法和扩容机制优化性能,负载因子与树化阈值平衡效率,是Java开发必备的高效数据结构,本文给大家介绍... 目录一、概述:HashMap的宏观结构二、核心数据结构解析1. 数组(桶数组)2. 链表节点(Node

Redis中Hash从使用过程到原理说明

《Redis中Hash从使用过程到原理说明》RedisHash结构用于存储字段-值对,适合对象数据,支持HSET、HGET等命令,采用ziplist或hashtable编码,通过渐进式rehash优化... 目录一、开篇:Hash就像超市的货架二、Hash的基本使用1. 常用命令示例2. Java操作示例三

Redis中Set结构使用过程与原理说明

《Redis中Set结构使用过程与原理说明》本文解析了RedisSet数据结构,涵盖其基本操作(如添加、查找)、集合运算(交并差)、底层实现(intset与hashtable自动切换机制)、典型应用场... 目录开篇:从购物车到Redis Set一、Redis Set的基本操作1.1 编程常用命令1.2 集

Redis中的有序集合zset从使用到原理分析

《Redis中的有序集合zset从使用到原理分析》Redis有序集合(zset)是字符串与分值的有序映射,通过跳跃表和哈希表结合实现高效有序性管理,适用于排行榜、延迟队列等场景,其时间复杂度低,内存占... 目录开篇:排行榜背后的秘密一、zset的基本使用1.1 常用命令1.2 Java客户端示例二、zse

Redis中的AOF原理及分析

《Redis中的AOF原理及分析》Redis的AOF通过记录所有写操作命令实现持久化,支持always/everysec/no三种同步策略,重写机制优化文件体积,与RDB结合可平衡数据安全与恢复效率... 目录开篇:从日记本到AOF一、AOF的基本执行流程1. 命令执行与记录2. AOF重写机制二、AOF的

java程序远程debug原理与配置全过程

《java程序远程debug原理与配置全过程》文章介绍了Java远程调试的JPDA体系,包含JVMTI监控JVM、JDWP传输调试命令、JDI提供调试接口,通过-Xdebug、-Xrunjdwp参数配... 目录背景组成模块间联系IBM对三个模块的详细介绍编程使用总结背景日常工作中,每个程序员都会遇到bu

Python中isinstance()函数原理解释及详细用法示例

《Python中isinstance()函数原理解释及详细用法示例》isinstance()是Python内置的一个非常有用的函数,用于检查一个对象是否属于指定的类型或类型元组中的某一个类型,它是Py... 目录python中isinstance()函数原理解释及详细用法指南一、isinstance()函数

java 恺撒加密/解密实现原理(附带源码)

《java恺撒加密/解密实现原理(附带源码)》本文介绍Java实现恺撒加密与解密,通过固定位移量对字母进行循环替换,保留大小写及非字母字符,由于其实现简单、易于理解,恺撒加密常被用作学习加密算法的入... 目录Java 恺撒加密/解密实现1. 项目背景与介绍2. 相关知识2.1 恺撒加密算法原理2.2 Ja