一、主存储器
主存储器可以直接和CPU进行通信,但是只能保存临时数据,在断电后数据就消失。还有一个特点是,主存储器的容量小,速度快,造价高。
1.构成
2.主存中存储体的构造
最小的存储单位是存储元,存储元可以由触发器或者是电容为基本原理组成的电路构成。其中由触发器构成的是SRAM(Static静态),以电容为原理的是DRAM(Dynamic动态)。
触发器可以稳定地保存0和1两种状态,所以说是静态的;
而电容,只要你不充电他就会自动放电(2ms为间隔),所以说是动态的。
以上的图只是一个简图,如果以32位机器为例,输出的数据应该是32bit,也就是说它有32列的存储元。
传进来的地址也有一个特点:当想激活某一行的存储单元,那就需要将其他行的存储单元进行置为低电平(阻止激活),这时候会用到一个“译码器”,他会将想要激活的存储单元进行片选,比如想激活第3行:(假设使用3-8译码器,也就是说这个机器有8行存储单元)那么会给译码器输入011,这会使他自己输出0000 0100,这样就会使得第三行的行置为高电平从而激活这一整列的存储单元。
输出的数据叫做存储字(因为是存储元中存储的0/1),有几个存储字,那么存储字节就是几。
包含关系: 存储体->存储单元->存储元->存储字
这时就会牵扯出一个概念:就是容量,容量是表示存储器性能的重要指标。(按照上面的图解,容量就是能够放下的字的多少,那么就是行*列即可求出)
计算方法:
容量 = 存储字长(列) * 存储存储单元个数(行)->这是按照位进行计算求出的容量,单位是bit
还有另一种形式,是以byte为单位求出的容量(1byte = 8bit),那么直接给上式除以8即可。
容量 = 存储字长(列) * 存储存储单元个数(行)/ 8
3.怎么确定这个地址是在读取数据/写入数据?
但是现在又有一个问题,每次给的地址都是寻址范围中的数字,也都能找到对应的存储空间然后找到对应的数据,但是怎么确定它是在向这个空间中写数据还是从这个数据读数据呢?
其实在译码器前面还有一个控制电路,这个控制电路一边连着译码器,一边连着“片选线”(用来控制选择哪个存储单元)、“读控制线”、“写控制线”。
这时,整个存储单元就是已经完整了,每次传进去的“地址”就是我们编程时候常说的那个“地址”了。