计算机科学速成课 Crash Course Computer Science 第六集 寄存器&内存 Registers and RAM

计算机科学速成课 Crash Course Computer Science

第六集 寄存器&内存 Registers and RAM

ALU计算后的结果若丢弃了则没有什么意义,所以需要找个方式进行存储,可能还需要进行多个连续操作,这就用到了计算机内存。

随机存取存储器RAM

由于断电而损失数据的原因是电脑用的是“随机存取存储器”(Random Access Memory),简称RAM。它只能在有电的情况下存储东西,比如游戏状态。另一种存储叫持久存储(persistent memory),电源关闭时数据也不会丢失,它用来存其他东西。

存储1位数据的电路:锁存器

需要回向电路,即把输出连回输入。

OR门:两个输入分别为A和B,将输出连回输入B。首先两个输入都设为0,0 OR 0 是0,所以电路的输出为0,如果将A变为1,1 OR 0 为1,所以输出为1,输出回到B,OR门的两个输入都是1,1 OR 1 仍然为1,所以输出不变,此时该电路能记录“1”,但是问题是这个记录是永久的,无论怎么改变输入A都没办法从1变回0。

在这里插入图片描述

AND门:两个输入分别为A和B,将输出连回输入B。开始时将A和B都设为1,1 AND 1 输出1,之后将A设为0,由于是AND门,输出会变成0,这个电路能记录0,并且无论A设为什么值该电路都始终输出0。

在这里插入图片描述

AND-OR 锁存器

有了能存0和1的电路,为了做有效的存储可以将两个电路结合起来,称为“AND-OR 锁存器”(AND-OR latch)。它有两个输入,“设置”(SET)输入把输出变成1,“复位”(RESET)输入把输出变成0,如果SET和RESET都是0,电路会输出最后放入的内容,即存储了1位的信息。这叫“锁存”(latch)是因为它“锁定”了一个值,放入数据的动作叫“写入”(writing),拿出数据的动作叫“读取”(reading)。

在这里插入图片描述

门锁

为了方便使用,增加逻辑门将AND-OR 锁存器改为“门锁”(Gated Latch),两个输入为数据输入(data input)和允许写入线(write enable),一个输出为数据输出(data output)。

在这里插入图片描述

将门锁抽象化(不关心内部的逻辑门实现),初始化数据输入和允许写入线都是0,数据输出也是0,此时数据输入从0换到1或从1换到0什么也不会改变——输出依旧为0,这是因为允许写入线是关闭的,所以内容不会变化。将允许写入线输入为1,此时数据输入设为1,1就能存起来,数据输出此时为1,现在关闭允许写入线,输出会保持1,不管数据输入怎么变化,数据输出都不会改变。

在这里插入图片描述

寄存器

如果并排放8个锁存器将可以存储8位信息,比如一个8bit数字。一组这样的锁存器叫“寄存器”(register),寄存器能存一个数字,这个数字有多少位叫做“位宽”(width)。早期电脑用8位寄存器,然后是16位,32位,如今许多计算机都有64位宽的寄存器。

在写入寄存器之前需要先启用里面所有的锁存器,可以用一根线连接所有“允许写入线”,把它设为1,然后用8条数据线发数据,然后将“允许写入线”设回0,这样8位的数据就存储完成。

在这里插入图片描述

若只有很少的位,把锁存器并排放置可以勉强解决问题,64位寄存器需要64根数据线,64根连到输出端,1根线启用所有锁存器,加起来需要129根线。如果存256位就需要513根线?!解决线过多的方法就是使用矩阵。

矩阵技巧实现寄存器

在矩阵中不并列排放锁存器,而是做成网格。可以用16*16网格的锁存器存储256位,要启用某个锁存器时就打开相应的行线和列线,需要打开交叉处锁存器的“允许写入线”,所有其他的锁存器保持关闭,所以可以用AND门,只有行线和列线都是1时AND门才输出1,用于选择单个锁存器。这种行列排列法用一根“允许写入线”连所有锁存器,为了让锁存器变成允许写入,行线,列线和“允许写入线”都必须是1,并且每次只有一个锁存器会启用,这代表我们可以只用一根数据线连接所有锁存器来传数据,因为只有一个锁存器会启用,只有它会存数据,其他锁存器由于没有允许写入所以会忽略数据线上的值。我们可以使用类似的技巧做“允许读取线”来从一个指定的锁存器读取数据。

在这里插入图片描述

在这里插入图片描述

所以对于256位的存储只要35条线,1条“数据线”,1条“允许写入线”,1条“允许读取线”,还有16行16列的线用于选择锁存器。

多路复用器

需要某种方法来唯一指定存储位置——地址(memory address),为了将地址转成行和列,需要“多路复用器”(multiplexer)。多路复用器有不同大小,因为以上例子有16行,所以需要1-16多路复用器,工作方式是输入一个4位数字,它会把那根线连到相应的输出线,如果输入0000,它会选择第一列,如果输入0001,会选择下一列,以此类推。一个多路复用器处理行,另一个多路复用器处理列。

在这里插入图片描述

把256位内存抽象化:它输入一个8位地址,4位代表列,4位代表行,需要允许写入线和允许读取线,还需要一条数据线用于读写数据。

在这里插入图片描述

扩大规模,将多个256位内存并排放置,类似寄存器,一行8个就可以存一个8位(一个字节byte)数字,为了存一个8位数字,我们同时给8个256位内存一样的地址,每个地址存一位,意味着这里总共能存256个字节。

在这里插入图片描述

可以抽象化为一个整体的可寻址内存,有256个地址,每个地址能读或写一个8位值。

在这里插入图片描述

现代发展

现代计算机的内存扩展到上兆字节(MB)和千兆字节(GB)的方式,随着内存地址的增多,内存地址也必须增长,8位最多能代表256个内存地址,要给千兆或十亿字节的内存寻址则需要32位地址。内存的一个重要特性是可以随时访问任何位置,因此叫随机存取存储器(RAM)。

如今用锁存器做了一块静态随机存取存储器(SRAM),还有其他类型的RAM,如DRAM,闪存和NVRAM,它们在功能上与SRAM相似,但是用不同的电路存单个位,比如用不同的逻辑门,电容器,charge traps或忆阻器,但根本上这些技术都是矩阵层层嵌套来存储大量信息。

发布了36 篇原创文章 · 获赞 5 · 访问量 5230

猜你喜欢

转载自blog.csdn.net/qq_43413123/article/details/104265568