一. 计算机发展简介
1.1 1945年由冯诺依曼提出冯诺依曼机
冯诺依曼机主要由以下五个部分组成:
- 运算器:执行算术和逻辑运算操作的部件。
- 控制器:发布命令的“决策机构”。
- 存储器:用来存储程序和各种数据信息的记忆部件。
- 输入设备:进行人与机器之间联系的作用。
- 输出设备:进行人与机器之间联系的作用。
这些年计算机飞速发展,但是计算机的组成部分并没有发生大的改变,如是个人PC机等大众计算机,任然采用冯诺依曼机体系结构。
1.2 1946年:第一台电子计算机ENIAC在美国诞生。
1.3 1958年:第二代计算机(晶体管时代)开始出现,逻辑元件采用晶体管,软件开始使用高级语言,如Fortran。
1.4 1965年:第三代计算机(中小规模集成电路时代)开始出现,逻辑元件采用中小规模集成电路,开始有了分时操作系统。
1.5. 1969年:第一个分组交换网络ARPANET
ARPANET是阿帕网,是美国国防部高级研究计划署(ARPA)于1969年11月建立的一个网络。此后网络开始向互联网发展。早期的网络其实只是方便科研机构高校等部门的联通和信息分享。
1.6 1972年:第四代计算机(超大规模集成电路时代)开始出现,逻辑元件采用大规模集成电路和超大规模集成电路,并产生了微处理器。
1.7 1983年:TCP/IP 协议成为ARPANE标准协议(被视为因特网诞生时间)。
二. 冯诺依曼体系结构图
(该图仅为个人理解,不实之处恳请批评指正)
2.1 CPU组成
CPU 由控制器(CU - Controller Unit),运算器(ALU - Arithmetic Logic Unit),寄存器(Register),时钟(Clock), 高速缓冲存储器(Cache)等组成。
2.1.1 控制器(CU - Controller Unit)
控制器负责把内存上的指令、数据等读入寄存器,并根据指令的执行结果来控制整个计算机。
控制器是整个系统的指挥中枢,在控制器的控制下,运算器,存储器和输入输出设备等计算机功能部件构成了一个整体,并根据指令的要求指挥全机工作。运算器如果没有控制器的指挥也是不会自己去工作的。
控制器由程序计数器PC,指令寄存器IR,指令译码器ID,存储器地址寄存器MAR,存储器数据寄存器MDR,时序系统TS,微操作信号发生器等组成。
- 程序计数器PC
PC(Program counter) 是计算机处理器中的一种特殊寄存器,用于跟踪程序中当前指令的位置。在执行程序时,PC会保存下一条指令的内存地址,并指示处理器按顺序从内存中读取指令。
因为程序指令通常是顺序执行的,所以当执行完一条指令后,PC会自动递增,指向下一条将要执行的指令的内存地址。 - 指令寄存器IR
IR(Instruction Register)用于暂存当前正在执行的指令。
拓展指令格式(可以看到该指令并不是具体的要执行的代码段内容,而是地址):
a) 操作码字段:根据指令数量的要求及是否支持操作码扩展,确定操作码字段的位数。操作码表示操作的性质及功能,其位数决定了操作种类数量。操作码字段 寻址方式 地址码字段
b) 寻址方式:根据对操作数的要求确定地址码字段的个数(如四地址指令)。
c) 地址码字段:地址码表示指令的操作对象,其位数决定了寻址空间的大小。地址码包括源操作数地址、操作结果的地址和下一条指令的地址。
注意:
IR存放是的要执行的代码地址而不是代码内容。IR(指令寄存器)的作用是暂存当前正在执行的指令。当CPU需要执行指令时,会先从内存中取出该指令,然后将其放入IR中。IR中存储的是指令的地址,而不是指令的具体内容。CPU会根据IR中的地址,从内存中取出相应的指令,然后进行译码和执行。CPU即将执行的代码在传入译码器之前,通常会先被加载到指令缓冲寄存器(Instruction Buffer,IB)中。指令缓冲寄存器是一个高速寄存器,用于暂存刚刚从内存中取出的指令。 - 指令译码器ID
ID(Instruction Decoder)是对指令中的操作码字段进行分析解释,识别该指令规定的操作,并向操作控制器发出具体的控制信号,控制各部件工作,完成所需的功能。
注意:
CPU需要指令译码器的原因是它需要将存储在内存中的指令读取到CPU中,并将其翻译为机器语言,以便CPU能够理解和执行这些指令。指令译码器是CPU中负责将指令转换为机器语言的部分,它可以根据指令的操作码和其他信息来生成相应的控制信号,以控制CPU中的其他组件执行所需的动作。因此,指令译码器是CPU中不可或缺的一部分,它可以帮助CPU高效地执行程序。 - 存储器地址寄存器MAR
MAR(Memory Address Register) 的作用是用来存放预访问的存储单元的地址,其位数对应存储单元的个数。 - 存储器数据寄存器MDR
MDR(Memory Data Register)寄存了将要写入到计算机主存储器(例如:RAM)的数据,或由计算机主存储器读取后要传送给指令寄存器的数据(只这一点有点像是IR的缓存,因为IR通常只存一条指令)。 - 时序系统TS
TS(Timer)时序系统(或时间同步系统)通常是指一系列电路和机制,用于确保CPU的操作按照正确的顺序和时间执行。(指令周期/时钟周期/节拍) - 微操作信号发生器
CPU微操作信号发生器的作用是产生各种微操作控制信号。这些微操作控制信号是由指令部件提供的译码信号、时序部件提供的时序信号和被控制功能部件所反馈的状态及条件综合形成的。CPU中的微操作信号发生器根据指令的要求,产生相应的操作控制信号,以控制运算器、存储器以及I/O设备完成相应的操作。
2.1.2 运算器(ALU - Arithmetic Logic Unit)
运算器的功能接收来自控制器的命令并进行算术和逻辑运算,运算器是计算机对数据进行加工和处理的中心。它主要由算术逻辑单元(ALU)、暂存寄存器,通用寄存器组,累加寄存器和状态条件寄存器,位移器,计数器等组成。
- 算术逻辑单元ALU
算术逻辑单元ALU(Arithmetic and Logic Unit)的作用是进行算术和逻辑运算,是计算机中负责运算的组件,处理数字/逻辑运算的最基本单元。ALU主要由算术单元和逻辑单元组成,算术单元可以进行基本的加减乘除运算,而逻辑单元则可以执行逻辑操作,如NOT、AND、OR等操作,以及做简单的数值测试。ALU是计算机中非常重要的组成部分,它的性能直接影响到计算机的运算速度和效率。 - 暂存寄存器
暂存来自组存且不能放入通用寄存器的数据。 - 通用寄存器组
通用寄存器组是一组寄存器,通常包括8个8位寄存器,这些寄存器可以分别组成16位寄存器。这些16位寄存器可用于多种用途,例如作为累加寄存器、基址寄存器、计数寄存器和数据寄存器。此外,通用寄存器组还可以用于保存段地址,如代码段寄存器、数据段寄存器等。 - 累加寄存器ACC
当运算器的算术逻辑单元(ALU)执行算术或逻辑运算时,为ALU提供一个工作区。累加寄存器暂时存放ALU运算的结果信息。 - 状态条件寄存器PSW
状态条件寄存器(PSW),又称程序状态字(Program Status Word),是计算机系统中一个重要的部件。它主要用于存放当前指令执行的结果的一些状态信息,例如有无进位(CF位)、有无溢出(OV位)、结果正负(SF位)、结果是否为零(ZF位)、奇偶标志位(P位)等。此外,状态条件寄存器还可能包含其他控制信息,例如允许中断(IF位)、跟踪标志(TF位)等。 - 位移器
对操作数或运算结果进行位移运算。 - 计数器
控制乘除运算的操作数。
2.1.3 寄存器(Register)
寄存器分类较多,不同型号的计算机也有不同的分类,有的寄存器也分布在ALU或CU中,具体更多分类和作用可看第一张大图。
2.1.4 时钟(Clock)
处理器何时执行下一条指令或进行下一步操作,从而保证计算机系统中各个部件的协调和同步。确保了计算机的稳定、可靠和高效运行。如操作系统中的时间片,每个进程执行一个时间片,确保所有进程的并发运行。当时间片用完之后就会有时钟中断,保存并中断当前进程转而执行下一个进程。
2.1.5 高速缓冲存储器(Cache)
高速缓冲存储器存在的意义,就是因为CPU的执行速度远远快于访问内存的速度进而增加的一层高速的存储匹配CPU的速度。避免CPU资源的浪费。具体Cache为什么比内存快的原因我们将在接下来的存储中系统中解释。
2.2 计算机存储体系
计算机存储系统通常由如下三部分组成(不算寄存器),Cache,主存,辅存。
他们的三者的存储容量(以我自己的PC笔记本为例):
Cache: e.g. L1:32~256KB,L2:128KB~2MB,L3一般是在主存中化一片使用,L1,L2均在CPU内部,为每颗CPU独有,而L3通常为主机内的多颗CPU共有。
主存:e.g. 8GB
辅存:e.g.500GB
他们三者的单位存储元价格和访问速度为:Cache > 主存 > 辅存。
当然他们三者的组成原理,设计和特性也有很大差别。
2.2.1 存取方式分类
Cache,主存MM,辅存EM,一下描述均由者三者的缩写代替。
- 随机存储器(又称为动态存储器)RAM:
RAM的主要特点是它可以在任何位置上读取或写入数据,而不需要像磁带或磁盘等顺序存取设备那样按顺序访问数据。 Cache 由静态随机存储器SRAM组成,主存MM大部分是有动态(不断刷新)随机存储器DRAM组成。
SRAM存储元是用双稳态触发器(六晶体管MOS)组成,因此读出后任然可以保持原状态(非破坏性读出)。
特点 SRAM DRAM 存储信息 触发器 电容 易失性 是 是 破坏性 非 是 需要刷新 不要 要 运行速度 快 慢 集成度 低 高 功耗 高 低 存储成本 高 低
DRAM存储元是利用电路中栅极电容上的电荷来存储信息的,故而每次读出具有破坏性需要重新写入,即便是不读它,电容上的电荷也只能维持2ms,故而即使电源不断电也必须在2ms内刷新一次,称为刷新周期。
DRAM通常只使用一个晶体管,所以它与SRAM(六晶体管)相比可以有更高的集成度,功耗。存储元造价更低,当然速度也更慢。但SRAM和DRAM均具有易失性既断电存储内容就消失。
主存没有采用SRAM,而是采用了集成度高、成本低的DRAM,原因如下:
SRAM的六管结构使得其面积大、集成度低、成本高。这意味着使用SRAM作为主存会使得计算机的成本增加。
DRAM采用的是单管电容储存电荷的方式来存储数据,需要不断刷新,虽然读取速度相对较慢,但集成度高、成本低。
在CPU速度远高于内存速度的情况下,SRAM作为Cache可以缩短CPU读写等待时间,提高系统整体速度。
总的来说,虽然SRAM具有较高的访问速度,但由于其成本高昂及集成度低,并不适合作为主存使用。
- 只读存储器ROM:
只读存储器(Read-Only Memory,ROM)是一种非易失性存储器,其特点是信息一旦写入后就固定下来,即使切断电源,信息也不会丢失。它只能读出数据,不能写入数据(意思是对用户而言,出厂时会固定刷入必要数据或程序)。
注意:广义上的只读存储器可以通过电擦除的方式实现重写,如SSD固态硬盘,舍弃了只读,但保留了非易失性,随机存取性(不同质料有不同说法因为,有的说SSD属于RAM,有的说它属于RAM是因为它有双方各自的一些特点)。有的ROM具有随机存储性,但有的ROM是顺序存取。ROM(只读存储器)的使用案例包括但不限于:
1) 点亮LED:在许多嵌入式系统中,如Arduino,ROM可用于存储程序代码,这些代码通常用于点亮特定的LED灯。
2) 存储程序代码:在一些情况下,ROM被用于存储程序代码,这些代码可以在设备启动时或运行时被读取并执行。
3) 存储常量:ROM也可用于存储常量,这些常量可以在程序运行期间被读取,但不会被修改。
4) 存储固件:许多设备(如路由器、打印机等)使用ROM来存储固件,固件通常包含设备的驱动程序和运行程序。 - 串行访问存储器
又叫顺序存储器(磁带) - 直接存储器(磁盘/光盘)
注意直接存储器介于串行和随机存储器之间,因为他不完全按顺序存取,如磁盘,它查询数据时只要知道在那个磁道,它就可以直接找到对应磁道,而不需要顺序找磁道,但是磁道内的存储单元又需要顺序访问查找。
如上的分类总体有两个标准 串行/随机,只读/可读可写。 而 易失/非易失 不是必要细分必要条件,导致它们的分类边界在有的地方有些模糊,需要注意区分。
2.2 存取介质分类
按照存取介质分类如上图大致有如下分类:
- 半导体材料
CPU内部的寄存器,高速缓存Cache是由SRAM半导体材料组成。
主存主要由DRAM半导体材料组成。
辅存中如固态硬盘也是由半导体材料组成。
半导体材料特点:
体积小、重量轻:由于采用半导体集成电路工艺制成,体积小、重量轻。
存取速度快:半导体存储器采用超高速读/写操作,具有快速的存取速度。
可靠性高:采用先进的半导体制造工艺和可靠的电路设计,具有较高的可靠性和稳定性。
低功耗:半导体存储器采用低功耗设计和制造技术,有利于降低电子设备的能耗。
成本:半导体存储器的制造工艺也经过了多年的发展和优化,成本也在不断降低。 - 磁表面材料
如磁盘,磁带。
磁表面材料特点:
存储容量大:采用磁性材料作为存储介质,可以存储大量数据。
单位价格低:制造工艺相对简单,制造成本相对较低。
可重复使用:记录介质可以重复使用,资源利用率较高。
信息长期保存:采用可靠的磁性材料和先进的制造工艺,可以长时间保存数据。
非破坏性读出:读出时不需要再生信息,避免对原始数据的破坏。
机械结构复杂、对工作环境要求较高:采用机械结构实现读/写操作,机械结构相对复杂,同时对工作环境要求较高。
扩展:固态硬盘和机械硬盘
固态硬盘目前还没有全面替代磁盘。虽然固态硬盘在读写速度、轻便性和抗震性等方面具有优势,但是在存储容量、成本和寿命等方面与传统的机械磁盘相比仍有一定的差距。
目前,固态硬盘主要在小容量市场和消费级市场取代了机械硬盘,而在大容量硬盘市场,机械硬盘的性价比仍然较高,因此仍占据一定的市场份额。
虽然从技术角度来说,固态硬盘可以完全替代机械硬盘,但是考虑到成本、存储容量和寿命等因素,全面替代还需要一定的时间。未来随着技术的不断进步和成本的降低,固态硬盘可能会逐渐扩大其市场份额,但全面替代机械硬盘还需要进一步的观察和验证。 - 磁芯材料
磁芯材料在以往内存有使用,但目前在内存中的使用也在逐渐被淘汰。其特点如下:
存储密度高:由于采用磁性材料作为存储介质,可以存储大量的二进制数据,因此具有较高的存储密度。
存取速度快:磁芯存储器采用高速读/写操作,可以快速地存取数据。
可靠性高:采用可靠的磁性材料和先进的制造工艺,具有较高的可靠性和稳定性。
功耗低:采用低功耗设计和制造技术,有利于降低电子设备的能耗。
成本高:由于制造工艺复杂,制造成本相对较高。 - 光盘材料
主要用户制造移动存储的光盘
2.3 总线
2.3.1 总线基本概念
计算机内部各部件需要总线的原因是因为现代计算机中需要互相连接的部件非常多。如果各部件单独相连,连接线路将极其庞大,导致实现和维护变得非常困难。
这就相当于一栋居民楼只需要一个公共的楼梯间一样,如果每户人家都有自己专门下楼的楼梯间,这样就显得很浪费,且物业很难管理。
记录到这里我就想起之前学习计算机网络,不同的计算机链接如果每台计算机之间单都独链接网线(如下图一),随着链接计算机的增多,链接数量就会指数级增长,这显然是不行的。因而就有各种网络拓扑结构链接,如早期的计算机网络总线结构是一个道理(如下图二)。
注:此图只是利用网络拓扑结构原因理解计算机内部的总线结构
2.3.2 总线特点
而计算机内部的各部件之间的总线,具有分时和共享两个特点。
分时:是指同一时刻只允许有一个部件向总线发送信息,如有多个部件他们只能分时地向总线发送信息。试想如果没有分时,同一时间多个设备发送信息在总线上必定回产生碰撞,而导致信息错乱。
共享:是指总线上可以挂接多个部件,各个部件之间相互交换的信息都可以通过这组线路分时共享,如多个部件可以同时从总线上接收相同的信息。
2.3.3 总线设备
总线上的设备按照其对总线是否有控制功能,分为主设备和从设备两种。
主设备拥有总线的控制权,从设备只能接收和响应主设备发来的各种总线命令。
计算机总线的主设备和从设备有很多种,如:
CPU作为主设备:CPU是计算机中的主设备,它负责执行各种指令和操作,控制计算机的各个部件。在总线传输中,CPU可以发起数据传输请求,通过总线与存储器、I/O设备等进行数据交换。
存储器作为从设备:存储器是计算机中的重要组成部分,用于存储程序和数据。在总线传输中,存储器作为从设备,接收CPU发来的读写请求,并将数据传输到CPU或从CPU接收数据存储到自身中。
I/O设备作为从设备:I/O设备是指计算机中与外部世界进行交互的设备,如键盘、鼠标、打印机等。在总线传输中,I/O设备作为从设备,接收CPU发来的控制信号和数据,完成与外部世界的交互操作。
需要注意的是,不同的计算机系统和总线标准可能会有不同的主设备和从设备的定义和划分方式。且计算机内部也是根据用途分了各种各样的总线的,故而如上只是一个举例。
2.3.4 总线特性
- 物理特性
指总线的连接方式,如总线连接的形状,引脚排列等。 - 电气特性
定义每根线上信号的的传递方向及有效电频的范围等,如我们知道计算机的0,1可以用低电平和高电频代表,那么多少是高电频,多少是低电频,这个就需要去定义。 - 功能特性
描述总线中每一根线的功能,如:地址总线(AB),数据总线(DB),控制总线(CB)。 - 时间特性
定义了每根线在什么时间有效,以及总线上各信号有效的时序关系等。
2.3.5 总线分类
- CPU芯片内部总线(片内总线)
CPU芯片内部总线之所以被称为片内总线,是因为它位于芯片内部,用于连接和传输数据。片内总线是CPU芯片内部各个部件之间进行通信和数据传输的通道,它使得CPU能够高效地处理和传输数据。片内总线的设计和优化对于CPU的性能和效率至关重要,因此它是计算机硬件设计中的重要组成部分。
它主要用于微处理器内部ALU和各种寄存器等部件间的互连及信息传送。由于芯片面积和对外引脚数的限制,片内总线大多采用单总线结构,这有利于芯片集成度和成品率的提高。如果要求加快内部数据传送速度,也可以采用双总线或三总线结构。 - 系统总线
连接CPU,计算机系统其他高速功能部件(存储器)
系统总线是连接计算机系统各大部件之间的信息传输线,分为数据总线、地址总线和控制总线。
数据总线是用于在各个部件之间传输数据的,它是双线传输总线,其位数与机器字长,存储字长有关。
地址总线用于确定数据总线上的源数据和目的数据在主存单元的地址或I/O设备的地址。它是单向传输总线地址总线的位数与存地址空间的大小有关。
控制总线则用于发出各种控制信号。如CPU发出的控制命令,和被控制设备给CPU的反馈信号。
2.3.6 系统总线结构
- 单总线结构
优点:
控制简单:单总线结构只需要一条总线连接各个部件,因此控制电路设计相对简单。
可扩展性强:在单总线结构中,如果需要添加新的部件,只需要将其连接到总线上即可,无需对整个系统进行重新设计。
缺点:
系统工作效率较低:由于所有部件都连接在同一条总线上,因此数据传输可能会受到其他部件的影响,导致系统工作效率降低。
总线易成为计算机系统的瓶颈:随着计算机系统的发展,单总线结构可能会成为计算机系统的瓶颈,限制了系统的性能提升。
注意:单总线并不是指只有一根信号总线,系统总线按照传送信息还可划分为地址,数据,控制总线。
双总线结构
分离主存总线与I/O总线:双总线结构将速度较低的I/O设备从单总线分离出来,形成主存总线与I/O总线分开的结构。CPU将一部分功能下放给通道,使其对I/O设备具有统一管理的功能,其系统吞吐能力可以相当大。
提高计算机效率:双总线结构可以减少CPU等待时间,提高计算机的效率。
适用于中、大型计算机系统:双总线结构通常用于中、大型计算机系统,因为这些系统需要处理大量的数据和指令。
注意:个人理解,双总线结构的I/O总线,链接到系统总线后,大一点的数据应该也是不会直接被CPU的ALU,CU或寄存器利用的,至少在通道或者CPU的Cache中需要缓存部分数据,因为I/O的效率和CPU相差实在太大。更有可能得还是I/O的数据到达系统总线后还是先需要加载到主存中,等待CPU后续切换使用。如我们在使用java编程的时候,读文件等I/O操作都是需要先让文件读到内存中再提供给CPU计算使用的。
综上I/O总线直接和CPU交互,更多的可能是使用系统总线中的地址总线和控制总线,而不是数据总线
- 三总线结构
计算机系统总线的三总线结构(主存总线、I/O总线和直接内存访问DMA总线)的优缺点如下:
优点:
提高了I/O设备的性能,使其更快地响应命令,提高系统吞吐量。由于三总线结构分离了主存总线、I/O总线和DMA总线,不同类型的总线可以并行工作,从而提高了数据传输的效率和速度。
这种结构的设计简化了硬件的设计,同时也使得系统更加模块化,方便维护和升级。
缺点:
系统工作效率较低。因为三总线结构需要更多的硬件和电路支持,可能会导致系统工作效率降低。
三总线结构的复杂性可能会导致更高的制造成本。
注意:个人理解,三总线结构的I/O总线,链接到系统总线后,大一点的数据应该也是不会直接被CPU的ALU,CU或寄存器利用的,至少在通道或者CPU的Cache中需要缓存部分数据,因为I/O的效率和CPU相差实在太大。更有可能得还是I/O的数据到达系统总线后还是先需要加载到主存中,等待CPU后续切换使用。如我们在使用java编程的时候,读文件等I/O操作都是需要先让文件读到内存中再提供给CPU计算使用的。
综上I/O总线直接和CPU交互,更多的可能是使用系统总线中的地址总线和控制总线,而不是数据总线2.3.7 总线仲裁
总线仲裁原因:为了避免多个设备在同一总线上同时发送消息,导致信号数据错乱。
总线仲裁会由专门的总线仲裁器去完成。
总线请求信号线:BR
总线授权信号线:BG
总线仲裁器是一种硬件电路,用于协调多个设备之间对共享总线的访问。当多个设备同时请求访问总线时,总线仲裁器会根据一定的算法和优先级规则,决定哪个设备可以获得总线的访问权,从而保证总线上的数据传输的正确性和稳定性。总线仲裁器的代码实现通常是在硬件电路中完成的,它可以采用不同的算法和优先级规则来实现。常见的算法包括固定优先级、旋转优先级、随机优先级等。其中,固定优先级是指设备的访问优先级是固定的,例如CPU的优先级最高,其他设备的优先级则根据其重要性和使用频率来确定;旋转优先级是指设备的访问优先级会随着时间的推移而不断变化,以保证每个设备都有机会获得总线的访问权;随机优先级则是在每次请求总线时,随机生成一个优先级,以保证公平性。总线仲裁器的代码实现需要考虑多个方面,包括硬件电路的设计、算法的选择和优先级规则的制定等。
注意:计算机设备每次发送信号都需要先请求总线仲裁,以获取总线的使用权。
信息发送过程:1.请求总线
2.总线仲裁授权
3.寻址(目的地址)
4.信息传送
5.状态返回(或错误报告)