我们这节课来看一下关于主存的一些知识。我们将要讲解主存的简单的模型和主存与CPU连接的连接原理。
我们之前呢在第一章已经学过了存储器的构成,包括了存储体、MAR(也就是地址寄存器)、MDR(也就是数据寄存器),那么这些东西呢都是在我们的第一章我们讲存储器的时候讲过的,如果已经忘了的同学呢就回过头再去看一下。然后呢它就是由一个地址寄存器,一个存储体,还有数据寄存器,还有我们的时序控制逻辑进行的一个构成。但是实际上呢我们给出的这个结构,是一个简化的结构。实际上呢主存的结构,要比我们这个简化的模型要复杂。
我们来看一下,它是这个样子的。首先呢,我们就是说这个存储体啊,还是我们刚才那个简化模型的一个存储体,它是用来保存我们的数据的。而这个MAR,就是我们保存了我们要访问的存储单元的地址,然后必须要进行一个译码器进行了译码。进行了译码以后我们才能选定指定的存储单元。同样的呢,MDR保存了我们要读出或者要写入的这样一个数据。那么这个数据呢?到底是要进行读出还是要进行写入,就要通过读写电路和控制电路来进行控制。如果是写入的话,那我们就把MDR里面这个数据呢送到MAR指定的这个存储单元当中。如果是读出的话,那么我们就指定的存储单元的内容将会被送到MDR。那么这个方向呢是由我们的读写控制电路来进行控制的。那么这就是我们的一个主存的简单的模型。啊大家一定要把它记住,就是说我们不仅有存储体、MAR和MDR,还有驱动器、译码器、控制电路和读写电路,啊就是这些。相信大家已经很熟悉这个概念了,好的这是一个主存的简单的模型。
我们再来看一下主存和CPU之间的联系。实际上这个联系还是非常非常简单的,我们就看一下这个图就知道了。主存,和这个CPU之间的连接呢,被分成了三类。首先是数据总线,然后是地址总线。还有呢是一个控制总线。啊这三个总线进行一个连接。数据总线呢听它的名字就知道它是完成了CPU和主存之间的一个信息的传输。那么这个数据总线呢是直接连接到这个数据寄存器上面的。它是一个双向的,所以可以读出也可以进行写入的。那么这个地址总线,是连接到了MAR也就是地址寄存器和主存之间的。它呢给出了要访问的内存单元的地址,它是一个单向的,是由CPU送到我们的主存的。那么还有一位呢就是这个控制总线。我们这张图当中呢就是读信号和写信号,也就是说,到底是读出,还是进行写入,那么是通过这样一个读信号和写信号进行一个传输的。那么这就是一个控制总线。它指出了我们这个总线周期的类型,还有我们这一次进行输入和输出操作它完成的一个时刻,那么这是一个控制总线。所以主存和CPU之间呢就有三个总线进行连接,一个是数据总线,一个是地址总线,一个是控制总线。它其实是非常简单的。那比如说我们要从存储器当中读出一个信息字,那么我们需要怎么做呢?首先我们CPU要把这个字的地址先送到MAR,然后呢经过地址总线送到我们的主存,然后再通过这个控制总线发出读命令,主存接到了读命令之后,那么主存呢就知道我需要把这个地址单元的一个内容读出,然后呢就完成了读操作。完成读操作之后,我们要把这个单元的内容读到哪儿?把这个单元的内容读到了数据总线上面,然后要送到哪儿,就不是主存的任务,这是CPU的任务,它由CPU决定要送到什么地方。啊这个读操作呢就已经完成了。而如果我要往主存存入一个信息字的时候,首先CPU要把我这个信息字所在的主存单元的地址经过MAR送到地址总线,然后呢再把这个信息字送到MDR,然后向主存呢发出一个写命令。主存收到了写命令之后呢就把数据总线上的信息写到我相应的地址线指出的主存单元当中。啊这就是一个读的操作和一个写的操作它所进行的一个顺序一个步骤。好的,我们的主存的模型和这个连接原理呢都是非常简单的,大家大概地了解一下就可以了。
我们来看一下主存的地址单元分配。
啊,这是一个比较重要的概念。那么我们之前已经讲过了,这个存储矩阵呢我们是由多个存储单元来构成的。这个方格的意思呢就是说,每一个方格呢可以放8位,啊字长呢就是4个字节。那么一个方格就是可以放8位就是1个字节,所以1行呢就是4个也就是4个字节。那么如果我们同时取出这样一行的话,我们取出来的数值呢就是32位。我们假设我们整个这个存储体,它的总容量呢,是1K个字节。那么我们来看一下,如果我们按照字节来寻址的话,我们就可以把总容量1KB可以写成1K*1B。1K*1B,那么1B呢就是1个字节嘛,它是按字节寻址,每个单元呢是一个字节,所以呢我们就有1K个单元,也就是说我们总共这个存储体呢,就有1K个这样的小方格。那么就是相当于用总容量去除以每一个小方格它的容量是1B,1个字节。所以呢得到的个数呢就是1K个单元。那么如果是按照字来寻址的话,那么1个单元它是按字来寻址嘛,所以呢1个单元它应该是4个字节,所以呢它就有256个单元。我们就是说把每4个小方格看成一个小组,那么我们整个存储体它就有256个这样的小组。那么主存地址的分配就是说,我们按照不同的长度去切分这样的一个存储单元,可以切分多少份。所以呢剩下的两种形式就可以直接给出来了,如果按照半字寻址的话,我们一个单元呢是2个字节,所以呢我们就有512个这样的小组。如果按照双字寻址的话,我们每一个单元呢是有8个字节,所以我们就有128个这样的单元。我们现在单元的数量已经知道怎么计算了,就是用总容量去除以每一个单元它的容量,就可以得到有多少个单元。那么现在我们知道了有多少个单元,现在我们就要进行一个编码,就是要对应到地址线的分配。如果要对这1K个单元进行地址的编码,那么我们需要的就是1K个地址,也就是要对应10根地址线,所以要有10个位数,所以对应10根地址线。如果把它这个地址写出来的话,就有10个二进制位,就是这个样子的。从10个0到10个1,那么它对应的10进制的形式呢,就是这个样子。
从0到2^10-1,所以呢我们把它在这个小方格里面把它标出来。就是这个样子的,那么我们就把这个地址给它编好了。
那么如果我们不是按照一个一个小方格进行寻址的,如果我们是按照大一点的,比如说按字进行寻址。那么我们就是说把这4个小方格进行一个寻址,也就是相当于把这4个小方格看成是一组,然后我们是按照一组一组去进行寻找。
那么我们一下子就找到