文章目录
主存储器
从宏观上看:主存储器可以看作由三部分组成:
1.存储体
2.MAR(memory address register)地址寄存器
3.MDR(memory data regiset)数据寄存器
注:实际上MAR
和MDR
并不是集成在主存储器内部,在后面我们会解释。
现在我们开始从微观上来拆解这三个元器件:
(
1
)
(1)
(1)存储体
存储体:存储体由一个个存储单元组成,每个存储单元都有自己的地址,一般是从
0
开始进行编号,存储单元内部存储一串二进制序列(数据/指令)。
对应存储单元还有几个扩展概念:
1.存储字长
:存储单元内二进制的位数即为存储字长。
2.存储字(words)
:存储单元的二进制序列即为一个存储字。
3.存储元
:存储二进制的电子元件(一般是用以电容组成,电容可以存放电荷),因此每个存储元可以存放一个bit
的二进制信息,多个存储元和线路连接在一起就形成了存储单元。
( 2 ) (2) (2)MAR
MAR:
MAR
为地址寄存器,其一般用来存储地址信息。
( 3 ) (3) (3)
MDR:
MDR
为数据寄存器,其一般用来存储数据(指令/操作数)。
主存储器的工作方式
主存储器的工作方式是按存储单元的地址进行存取,这种存取方式称为按地址存取方式。
MAR和MDR的作用是什么?
主存储器内存放的是程序的指令和数据,因此CPU
和主存储器之间存在交互的场景。
注:CPU
可以直接访问主存。
其大致可以分为两种场景:
(
1
)
(1)
(1)CPU从主存中取指令/数据
CPU将要读取的指令通过地址总线送至MAR,MAR将地址交付给主存,主存根据地址找出对应的指令/数据,将数据交付给MDR,最后MDR将数据交付给CPU。
( 2 ) (2) (2)CPU将数据写入主存。
CPU
将数据写入主存时,首先需要将写入对应主存的地址送至MAR
,MAR
会将地址交付给主存,同时将数据送至MDR
,MAR
再将数据交付给主存,主存根据地址将数据写入对应的存储单元。
总的来说:MDR
和MAR
是主存和CPU
之间交付的一个中转站,CPU
和主存之间进行数据/地址的交互时,都需要MDR
或者MAR
进行中转。这个一定要记清楚,例如我要将ACC
累加器的数据存入到主存中,也必须得先放入到MDR
进行中转。
MAR,MDR和主存,PC(程序计数器),地址码长度的关系
MAR
和MDR
是为主存服务的寄存器,因此可以理解为MAR
和MDR
是根据主存的结构来进行设计的,两者存储如下关系:
关系一:MAR的位数表明了主存中存储单元的个数
假设MAR
有n
位,对应就存在
2
n
\color{red}{2^n}
2n种不同的二进制排列组合,所以能够存储
2
n
\color{red}{2^n}
2n个不同的地址,即
2
n
\color{red}{2^n}
2n个不同的存储单元。
关系二:MDR
的位数表明了主存中存储单元的存储字长
MDR
用来暂存数据,通常情况下,一个数据应该是占一个存储单元,但是我还是存在疑惑,所以MDR
的长度就表明了数据的长度,即存储单元的存储字长。这里我有个疑惑还不是很理解。
关系三:MAR
的位数和PC(程序计数器)
的位数相同。
这其实很好理解,只要指令需要运行,就需要使用PC
来进行存储当前指令的地址,而PC
的地址需要先暂存到MAR
中。
关系四:MAR
的长度和地址码长度相等
首先需要注意的是,这里的地址码指的不是指令中的地址码,这里的地址码是一个比较特殊的概念,其指的是存储单元的地址,地址码长度也就是存储单元地址码的长度。所以MAR的长度=地址码的长度。
一个疑惑:指令中的地址码部分可能就是数据本身,这种数据应该就不用经过MDR了吧?
为什么存在MAR和MDR
首先我们先回答一个问题:
MAR和MDR在计算机的什么位置?
MAR
和MDR
在CPU
内部。
现在我们回答为何存在MAR
和MDR
:
在计算机中,数据是通过总线来进行传输的(地址总线/操作总线),所以说在数据传输过程中,存在总线的占用,即计算机资源的消耗,以生活中的例子来说:总线就是共享单车,你使用了这台共享单车以后,别人就没法使用了,就得等待你使用完。计算机中对应也是如此,MAR
和MDR
是两个为主存
服务的寄存器,而主存
和CPU
之间的交付非常频繁,这就导致了总线的占用率高,因此可以先将数据暂存在MAR
或者MDR
中,等计算机资源空闲时,再完成数据的传输,所以说MAR
和MDR
的存在是为了计算机更好的利用分配当前资源。
那为何MAR和MDR不是集成在主存储器内部?
可以简单进行理解,在
主存
和CPU
进行交互的场景中,更多的场景是CPU
将数据交付给主存。
MAR和MDR集成在主存内,CPU是通过总线将数据交付给这两个寄存器吗?
疑惑:CPU内的器件是不是通过总线将数据传输至MAR或者MDR,MDR再传输至主存。
似乎:CPU内器件传输数据都是使用内部总线,如pc通过内部总线将地址送至mar,内部总线似乎是CPU内独有的一种传输介质。
计算机和辅存的关系
CPU
能够直接访问的存储器是主存储器,辅助存储器用于帮助主存储器记忆更多的信息,辅助存储器的内容必须被调入到主存后,才能被CPU
进行访问。
地址译码器0
地址译码器是存在于主存中的,到后面学习了再回来补这个知识点。
相联存储器
相联存储器和普通的主存储器没有什么区别,只不过其多了一个特殊功能,其可以使用内容来进行查看,简单来说,假设说当前我需要查找一个取数指令,我只需要告诉存储器需要一个取数指令,存储器就能进行查找取数指令,假设说要查找数据20,存储器也能够直接进行查找。也就是说相联存储器和普通存储器最大的一个不同点就是其可以不使用地址来进行查找。普通存储器查找指令或者数据都是使用的地址。但是相联存储器也具有普通存储器的功能,因此冯诺依曼机也可以使用相联存储器,,但是不能使用那个特殊功能,因为相联存储器的特殊功能不属于冯诺依曼机。
运算器
运算器大致可看作由四部分组成:
ACC(Accumulate Register)
:寄存器,中文又叫做累加寄存器,用于存放操作数和运算结果。
MQ(Multiple—Quotient Register)
:寄存器,中文叫做乘商寄存器,一般在只在进行乘除运算的时候存放操作数和运算结果。
X
:通用寄存器,用于存放操作数。
ALU(Arithmetic and Logical Unit)
:运算器的核心部件,算术逻辑单元,通过内部电路实现算数运算和逻辑运算。
注意:提到的这四个部分是运算器的必备的部件,其中前三个是寄存器,最后一个是核
心运算部件,一个运算器中还可能由变址寄存器BR
,基址寄存器IX
,程序状态寄存器PSW(Program Status Word)
,也称标志寄存器。
注:一般来说一个运算器内只需要有一个X
通用寄存器就可以完成功能了,但是一些计算机中也可能会有多个X
通用寄存器。
控制器
控制器大致由三部分组成:
CU(Control Unit)
:控制单元,控制器的核心部件,进行分析指令,发出控制信号来指挥其他部件。
IR(Instruction Register)
:指令寄存器,存放当前要执行的指令。
PC(Program Counter)
:本质是一个寄存器,又叫做程序计数器,存放下一条指令的地址,当取完指令将指令送至IR
时,PC
将自动进行加1
。
在目前的计算机架构中,MAR
和MDR
也被集成到了控制器中。
运算器和控制器总结
计算机的工作过程
用高级语言的一段代码来学习底层计算机是如何进行工作的:
首先需要知道的是:CPU
内部的微操作(如PC
将地址送至地址寄存器)一般都是CU
控制单元通过控制总线发送控制信号来进行控制的。
注:
1.()
表示部件里存储的内容,如(PC)
表示PC
计数器内存储的地址。
2.M(MAR)
表示主存单元中对应MAR
存储的主存地址的指令/数据。
3.OR(IR)
表示IR
寄存器内的操作码。
4.Ad(IR)
表示IR
寄存器内的地址码。
注:实际上进程的运行入口地址并不一定刚好是从0
开始,从0
位置开始的内存地址可能被其他进程占用了,但是为了更好的理解,这里我们假设其从0
开始。
王道的这个运行过程比较简略,下面我们给出比较全面的运行过程:
1.程序的代码和数据被加载到内存,变成一个进程,并且在CPU
的队列里进行等待调度。
2.进程被CPU
调度,进程在内存中的运行入口地址被写入PC
计数器中。
3.CU
通过控制总线发送控制信号控制PC
计数器通过地址总线将地址送至MAR
地址寄存器
4.CU
控制MAR
地址寄存器通过地址总线将地址送至主存,并且CU
会给主存发送一个R
读信号。
5.CU
控制主存将对应内存地址的指令取出来通过数据总线送至MDR
6.CU
控制MDR
通过数据总线将指令数据送至IR
地址寄存器,同时PC
计数器自增+1
。
7.CU
控制IR
通过数据总线将指令的前6
位送至CU
进行指令译码,分析
8.CU
分析后得知这是一个取数指令,控制IR通过地址总线将地址送至MAR
9.CU
控制MAR
通过地址总线将地址送至主存,并且CU
会给主存发送一个R
读信号
10.CU
控制主存将对应地址的数据取出并且将数据通过数据总线送至MDR
11.CU
控制MDR
将数据通过数据总线送至ACC
累加器。
至此第一条指令完成。
可以看出指令的执行大致可以分为三个阶段:
1.取指令:3-6
2.分析指令:7
3.执行指令:8-11
计算机内部的一条指令由众多的微操作构成,这些微操作基本都是由CU
进行控制,所以在接下来指令的运行过程中,我们将只在比较重要的部分写出CU
的控制操作和总线的分类,在这个过程中还需要注意一个点:
PC计数器何时进行自增?
一般是将取完指令后进行自增。
补充:
8.CU
会给主存发送R
读信号。
11.CU
会发送信号告诉ALU
进行乘法运算。
计算机运行过程总结
1.PC
在取完指令后进行自增
2.MDR
取到指令以后需要通过数据总线将数据送至IR
。
关于程序计数器PC的自增 这里我现在关于顺序型指令的自增我还不是很理解。
在指令译码阶段,PC会进行自增,而PC的自增需要根据当前指令来进行区分:
1.当前指令为顺序型指令:下条指令的地址为PC当前的存储的地址加上指令的长度(这个长度我不是很理解)
2.当前指令为跳转型指令:下条指令地址会指令中指定的目标地址。
CPU和主存
CPU的速度很快,主存的速度很慢,当主存需要等待时,CPU会暂停吗?
不会的,这里涉及到操作系统的多进程,多线程还有等待了。等看完比特回来。