1. 冯•诺依曼计算机体系:
a. von Neumann,于1945年研究EDVAC机时首次提出了“存储器”的概念,即将程序临时存放在一个存储器中以实现计算机完全的自动化;
b. 以此概念为基础的计算机都称为冯•诺依曼计算机;
c. 一共有6大特点:
(1)计算机由五大部件(也称为五大子系统)组成:运算器、控制器、存储器、I/O设备(现在不把I/O设备纳入计算机中,而是将这些设备的接口纳入到计算机组成中);
(2)指令和数据均用二进制表示(在此之前冯•诺依曼是ENIAC的顾问,这台机器就是用十进制表示的,很不方便);
(3)指令(即程序)和数据以同等低位存放在存储器内,均可按地址访存;
(4)指令由操作码(表明了指令的性质)和地址码(可根据地址码访存)组成;
(5)指令在存储器中顺序存放(一般情况下都是顺序执行的),特定情况下可根据指令运算结果根据设定的条件改变执行顺序(即发生指令的跳转);
(6)机器以运算器为中心,I/O设备和存储器间的数据交流由运算器完成(现在的计算机基本上是以存储器为中心的!!);
2. 计算机中各部件的功能:
a. 运算器:是计算机的大脑、核心,进行逻辑和算术运算,并可以将中间数据和运算结果暂存在其内(即寄存器中);
b. 存储器:冯•诺依曼体系的核心部件,用来存放待执行的程序和数据,这样要执行时运算器可直接从这里拿而不需要人为保管并输入这些程序和数据,从而实现了自动化,大大提高了计算机的效率;
c. 控制器:用来控制程序指令以及数据的输入和运行,并对运算结果进行处理(送到哪儿等);
d. I/O设备:可以实现A/D、D/A转换,作为计算机和外界交流的桥梁(现在交由接口完成);
3. 在现代大规模集成电路影响下的的冯•诺依曼计算机体系:
a. 运算器和控制器往往集成在一块芯片上,即CPU中央处理器;
b. 实际上没有真正意义上的运算器和控制器,现实中只能用一些器件来实现运算器和控制器的功能,其中
ALU(Arithmetic Logic Unit,即算术逻辑单元)用来实现运算器的功能(实际中运算器还包含ACC、MQ、X),实际中就是用来实现算术运算和逻辑运算;
CU(Control Unit,即控制单元)用来实现控制器的功能(实际中控制器还包含IR、PC),而实际中是用来对存储器中的指令进行解码,并发出各种操作命令让各部件执行;
ALU和CU是CPU的核心部件;
c. 如果讨论的问题是对实际计算机的一种抽象,则可以用运算器和控制器表示,如果研究的是一台具体的计算机组成,则必须使用ALU和CU来表示CPU的组成;
d. 总结(现代计算机领域):
i. 计算机由三大部分组成:CPU、I/O设备(Input/Output Equipment)(严格来讲应该是接口)、主存储器(Main Memeory,简写为MM);
ii. CPU、MM组成主机(即微机,实际上CPU以及一些支持部件集成为MPU,MPU及其支持部件组成主机);
4. 用计算机解决问题的工作步骤:
a. 从现实世界的物理现象中利用实验、统计等手段建立数学模型(即各种各样的数学方程组);
b. 确定解这些方程组的计算方法(一般这些方程组都是非常难解的,需要用适合计算机运算的计算方法去解);
c. 编程、调试、运行,得出最后的题解;
5. 主存(MM):
a. 主要由五大部分组成:
(1)存储体:M,Memeory的缩写;
(2)存储器地址寄存器:MAR,Memory Address Register的缩写;
(3)存储器数据寄存器:MDR,Memory Data Register的缩写;
(4)其余零散的逻辑部件;
(5)一些控制电路;
b. M:
i. 物理上有若干存储单元组成,各存储单元又由数量一定的存储元件(简称存储元)组成;
ii. 一个存储元对应着一个逻辑上的位,即每个存储元中可以记录电平的高低(即逻辑上的0或1),则一个存储单元对应着一个逻辑上的字(word),字长即单元中元的个数;
注意:逻辑上定义,1字节(Byte) = 8位(Bit),而1字(Word) = 存储单元的字长,因此根据不同的存储器其存储字长可能不同,有些是8位的,有些是16位的,现在很多都是32位的;
iii. 对主存中数据的操作(存取等)都是以字为单位的!!!
c. 实现按地址访问存储器:
i. 此举简称为访存;
ii. 访存的 优点:
*1. 如果某条指令或者某个数据需要多次重复使用就不需要在主存内重复备份这些指令和数据而通过直接多次访存实现,大大提高存储空间的利用率;
*2. 使取指令和取数据的方式完全相同,就可以使用一套控制线路完成两种截然不同的操作,简化电路设计;
iii. MAR:用来暂时存放欲访问的存储单元的地址(注意是存储单元!!!),因此MAR的位数决定了存储单元数,比如n位,就代表一共有2的n次方个存储单元;
注:MAR是实现地址访存核心所在!!!
iv. MDR:用来暂存从某单元去出的或者向某单元写入的数据(注意也是存储单元!!!),因此MDR的位数即为存储单元的字长;
!!!MAR、MDR之所以都是寄存器,就是为了和CPU的速度保持一致,主存较慢,CPU较快(最主要是因为寄存器速度要比存储单元快);
v. 由于现代大规模集成技术的发展通常将主存的MAR和MDR集成在CPU中;
d. 实现对主存中数据存取等操作的三个必要条件:
(1)CPU要提供地址(通过地址总线传到MAR);
(2)CPU要提供控制信号(是存还是取之类的,有CPU的CU发出控制信号,通过控制总线传到主存的控制电路);
(3)CPU和主存之间数据的传送(存取的数据通过数据总线在CPU和主存之间交换);
6. 和字长相关的概念介绍:
a. 字长分为三类:存储字长(之前已讲过)、指令字长、数据字长(顾名思义就是二进制指令和二进制数据的位数);
b. 三者之间的关系:
i. 早期:指令字长和数据字长都规定为存储字长(因为指令和数据都存放在存储单元中);
ii. 现代:随着计算机应用范围扩大以及解题精度等要求,要求指令和数据的字长都是可变的,即有可能小于或者大于存储字长,因此现代不用存储字长来规定指令字长和数据字长,因此这三者之间没关系了,但规定这三者都必须是字节(8Bit)的整数倍;
7. 运算器:
a. 除了包含ALU外还有ACC(Accumulator,累加寄存器)、MQ(Multiplier-Quotient Register,乘商寄存器)、X(仅仅表示操作数寄存器);
b. 这三个寄存器在做不同运算时所存放的数据不同,所谓分工合作增大效率;
注:比如做乘法运算时乘数和被乘数放在ACC还是MQ中这些细节程序员不需要关注,特别是汇编程序员,只要关注好通用寄存器的使用就行了;
8. 控制器:
a. 运算器是心脏(即核心处理部件)则控制器就是整个计算机的神经中枢,它向各个部件发出信号(向主存、运算器等等)只会各部件自动协调工作;
b. 执行指令过程中控制器完成的三个重要步骤:
(1)取指:即从主存中读取一条指令,完成该过程的两个重要部件(都是属于控制器中的部件):
*1. PC:Program Counter的缩写,即程序计数器,注意,它里面存放的不是正整数0、1、2……,而是当前执行指令在主存中的地址,如果当前指令执行完毕就对该地址做一次加1操作(是地址加法),是其指向下一条欲执行的指令的地址,PC和MAR相连,这样就可以根据自动生成的地址完成下一条指令的获取,从而实现自动化;
*2. IR:Instruction Register的缩写,即指令寄存器,从主存中获取的当前指令将暂时存放在IR中,待之后交给CU进行分析,其和MDR相连,以便从主存中获取的指令可以直接暂存在IR中,该过程记为MDR→IR;
(2)分析:即分析一条指令要完成何种类型的操作并确定操作数的寻址方式,其过程是:
IR中指令的操作码部分将传给CU进行分析到底是何种操作,该过程记为OP(IR)→CU,OP是指Operand(操作数)的缩写,最终结果就是形成一条微指令;
(3)执行:根据操作码和操作数的地址完成相应的指令:
*1. 将IR中操作数的地址通过地址总线输送到MAR,记为AD(IR)→MAR,其中AD是Address的缩写;
*2. CU将分析完成的微指令信号通过控制总线转送到主存的控制电路,从而决定了主存应该对MAR中指向的数据采取什么操作;
*3. 如果是读操作,则将MAR指向的数据取至MDR中,再由数据总线将MDR中的数据输送到相应位置;
9. 三个计算机硬件的技术指标:
a. 字长:
i. 通常是指寄存器的字长;
ii. 字长越长精度越高,表示范围越大;
iii. 字长越长速度越快(一次可处理的数据越多);
b. 存储容量:
i. 现在都以字节为单位计算;
ii. 主存计算方法:存储单元数量(由MAR的位数决定,位数为n,则存储单元数为2的n次方,这就是通常所说的用地址总线的宽度计算,两者其实是一致的)× 存储字长(即MDR的宽度),此结果是位数,最后要换算成字节数;
iii. 辅存容量:辅存就是通常所说的外存,计算方法和主存类似;
10. 运算速度:
a. 是由综合因素决定的,例如:
i. 主频大小(即钟控频率);
ii. 执行的操作类型(有些操作例如乘法是由多次加法实现的,因此会比较慢,因此操作不同速度就会不一样);
iii. 主存速度(指取指、取数的速度);
由于完成一次完整的操作离不开以上三者,因此以上三者是诸多因素中的主要因素;
b. 计算速度的方法:
i. 早期:以完成一次加法或乘法的速度衡量,显然不合理;
ii. Gibson法:各操作执行时间对其所占总操作百分比加权求和所得的总时间作为衡量运算速度的标准,值越小就越快,比较合理;
c. 几个常用衡量计算机运算速度的单位:
i. 主频:即钟控频率,Clock Speed,单位基本上是MHz,兆赫兹,即一个钟控周期内可执行的指令的条数;
ii. CPI:Cycle Per Instruction,即执行一条指令所需的钟控周期数,即主频的倒数;
iii. MIPS:Million Instruction Per Second,百万条指令每秒;
iv. FLOPS:Floating Operation Per Second,浮点运算次数每秒;