一、概述
计算机系统的组成
硬件系统和软件系统共同构成了一个完整的计算机系统。
冯诺依曼机的特点
1)计算机由运算器、存储器、控制器、输入设备和输出设备五大部分组成;
2)指令和数据存储在存储器中,并可以按地址访问;
3)指令和数据均以二进制表示;
4)指令由操作码和地址码构成,操作码指明操作的性质,地址码表示操作数在存储器中的位置;
5)指令在存储器内按顺序存放,通常按自动的顺序取出执行;
6)机器以运算器为中心,I/O设备与存储器交换数据也要通过运算器。(因此,后来有了以存储器为中心的计算机结构)
现代计算机的组成框图
由于运算器和控制器在逻辑关系和电路结构上联系十分紧密,通常将它们合起来统称为中央处理器,简称CPU,把输入输出设备简称为I/O设备,这样现代计算机可以认为由三大部分组成:CPU与主存储器可以称为主机,I/O设备称为外部设备,结构图如下
关于存储器相关概念
存储器的功能:
存储器是计算机系统中的记忆设备,用来存放程序(指令)和数据(二进制代码形式存放)。
存储器中最小单位就是存储元,可以存储一个二进制代码(0或1),即1个 bit
什么是存储单元、存储字、存储字长、存储体?
存储单元:存储一个存储字并具有特定存储地址的存储单位;
存储字:一个存储单元中存放的所有的二进制数据,按照某个地址访问某个存储单元获取的二进制数据。
存储字长:存储字中二进制数据的位数,即按照某个地址访问某个存储单元获取的二进制数据的位数;
存储体:由多个存储单元构成的存储器件。
什么是机器字长,指令字长和存储字长?
机器字长:CPU一次能够处理的二进制数据的位数。
存储字长:一个存储单元存储二进制代码的长度。
指令字长:一个指令字中包含二进制代码的位数。
主存储器中,什么是MAR,什么是MDR,存储器的最大容量由什么决定?
1)MAR:存储地址寄存器,保存需要访问的存储单元地址。反映存储单元的个数。
2)MDR:存储数据寄存器,缓存读出/写入存储单元的数据。反映存储字长。
3)存储器的最大容量由MAR寄存器的位数和MDR寄存器的位数决定。
CPU如何区分当前读取的是指令还是数据?
根据时间判断,当前工作时间是在取指阶段,从内存中读取出来的一定是指令,当前工作时间是在执行阶段,从内存中读取出来的一定是数据。
一条指令在CPU的执行过程
几乎所有的冯·诺伊曼型计算机的CPU,其工作都可以分为5个阶段:
取指令 --> 指令译码 --> 执行指令 --> 访存取数 --> 结果写回
1.取指令阶段
取指令(Instruction Fetch,IF)阶段是将一条指令从主存中取到指令寄存器的过程。
程序计数器PC中的数值,用来指示当前指令在主存中的位置。当一条指令被取出后,PC中的数值将根据指令字长度而自动递增。
//PC -> AR -> Memory
//Memory -> IR
2.指令译码阶段
取出指令后,计算机立即进入指令译码(Instruction Decode,ID)阶段。
在指令译码阶段,指令译码器按照预定的指令格式,对取回的指令进行拆分和解释,识别区分出不同的指令类别以及各种获取操作数的方法。
// { 1.Ad
//Memory -> IR -> ID -> { 2.PC变化
// { 3.CU(Control Unit)
3.访存取数阶段
根据指令需要,有可能要访问主存,读取操作数,这样就进入了访存取数(Memory,MEM)阶段。
此阶段的任务是:根据指令地址码,得到操作数在主存中的地址,并从主存中读取该操作数用于运算。
//Ad -> AR -> AD -> Memory
4.执行指令阶段
执行指令(Execute,EX)阶段,此阶段的任务是完成指令所规定的各种操作,具体实现指令的功能。为此,CPU的不同部分被连接起来,以执行所需的操作。
//Memory -> DR -> ALU
5.结果写回阶段
结果写回(Writeback,WB)阶段把执行指令阶段的运行结果数据“写回”到内存中。
//DR -> Memory
6.循环阶段
在指令执行完毕、结果数据写回之后,若无意外事件(如结果溢出等)发生,计算机就接着从程序计数器PC中取得下一条指令地址,开始新一轮的循环,下一个指令周期将顺序取出下一条指令。
//重复 1~5
//遇hlt(holt on)停止
性能指标
主频 CPU工作主时钟的频率,机器主频Rc
CPI 执行一条指令所需时钟周期数
MIPS 每秒执行多少百万条指令
FLOPS 每秒执行多少次浮点运算
时钟周期 节拍脉冲,CPU中最小的时间单位
二、数据的表示和运算
数制与编码
数值
BCD码
8421码:本质就是十六进制
加法修正:
大于(1010)_2的时候需要加6修正
(1010)_2到(1111)_2为无效码
字符和字符串
ASCII码:
有7位,用一个字节可以表示(最高位不用,为0)
字符串的存放(大端,小端)
大端模式:是指数据的低位保存在内存的高地址中,而数据的高位,保存在内存的低地址中;(符合人的正常思维)
一个字节一个字节的倒着放。(注:一个字节=2位16进制=8位2进制)
小端模式:是指数据的低位保存在内存的低地址中,而数据的高位保存在内存的高地址中。
常用校验码
奇偶校验码
奇校验码:整个校验码(有效位和信息位)中“1”的个数为奇数
偶校验码:整个校验码(有效位和信息位)中“1”的个数为偶数
优缺点:只能检错,不能纠错
海明(汉明)校验码
分组多个校验位
优缺点:能发现2位错误,纠正一位错误
循环冗余校验(CRC)码
K位信息位后再拼接R位的校验码,整个编码长度为N位
优缺点:可以纠正一位或多位错误(与多项式的选取有关
定点数
定点数:小数点固定在某个位置上的数据。 就好像 0.0000001 ,0.0001111;
二进制的原码,反码及补码
原码
例如:
X=+101011 , [X]原= 0010_1011
X=-101011 , [X]原= 1010_1011
位数不够的用0补全。
PS:正数的原、反、补码都一样,0的原码跟反码都有两个,因为这里0被分为+0和-0。
反码
例如:
X=-101011 , [X]原= 1010_1011 ,[X]反=1101_0100
补码
例如:
X=-101011 , [X]原= 1010_1011 ,[X]反=1101_0100,[X]补=1101_0101
PS:0的补码是唯一的,如果机器字长为8那么[0]补=0000_0000。
除此之外,还可以用 [1000_0000]补 表示-128:
(-1) + (-127) = [1000_0001]原 + [1111_1111]原 = [1111_1111]补 + [1000_0001]补 = [1000_0000]补
-1-127的结果应该是-128,在用补码运算的结果中, [1000_0000]补 就代表-128。
注意,-128并没有原码和反码表示。
使用补码不仅仅修复了0的符号以及存在两个编码的问题,而且还能够多表示一个最低数,这就是为什么8位二进制使用原码或反码表示的范围为 [-127, +127],而使用补码表示的范围为 [-128, 127] 的原因。
移码
移码最简单了,不管正负数,只要将其补码的符号位取反即可。
例如:
X=-101011 , [X]原= 1010_1011 ,[X]反=1101_0100,[X]补=1101_0101,[X]移=0101_0101
浮点数
小数点位置可以浮动的数据。就像数学中的 1222.2103也可以表示为1.2222106;
IEEE754表示浮点数
EEE754标准包含一组实数的二进制表示法。它有三部分组成:
三种精度的浮点数各个部分位数如下:
IEEE 754标准中定义浮点数的表示范围为:
单精度浮点数
± (2-2-23) × 2127
双精度浮点数
± (2-2-52) × 21023
三、存储系统
存储器分类
按在计算机中的作用分类
(1)主存
(a)RAM:操作系统被加载到RAM
SRAM:(Static Random Access Memory)静态随机存储器。常用制作二级缓存。不必刷新电路就能保存数据。但体积大,集成度低
DRAM:(Dynamic Random Access Memory)动态随机存取存储器。常用语制作系统内存。DRAM用电容存储数据,需要定时充电,刷新电路,否则出处的数据丢失。集成度高
(b)ROM:存储机器自检和引导程序,BIOS等程序
MROM:(Mask Read-Only Memory)掩模式只读存储器。MROM的内容在出厂前一次写入,之后不能更改
PROM:(Programmable Read-Only Memory)-可编程只读存储器。只能写入一次数据的只读存储器,写入错误只能更换存储芯片
EPROM:(Erasable Programmable Read Only Memory)可擦除可编程只读寄存器
EEPROM: (Electrically Erasable Programmable Read-Only Memory),电可擦可编程只读存储器。SSD
(2)辅存
磁盘,磁带,光盘
存储器的存储结构
主存中存储单元地址的分配
(1)寻址的个数有2个因素:
(a)地址线的个数:这是内存中总的可寻址字节数
(b)一个地址所占用的字节数:表明了一个内存单元,占用多少个字节
(2)内存可寻址的总字节数 ÷ 多少字节形成一个内存单元=可寻址数
(3)eg:地址线24根,按字节寻址,可寻址224=16M224=16M个
若字长为16位,按字寻址,可寻址8M个
若字长为32位,按字寻址,可寻址4M个
主存的指标
(1)存储容量:存放二进制代码的总位数。存储字数\times字长
(2)存取速度:数据的宽度/存取周期
存取时间:存储器的访问时间(读出时间,写入时间)
存取周期:连续两次独立的读写存储器操作之间,最小的时间间隔。用于读电路,写电路,地址电路清空一次
(3)存储器带宽 (位/秒)
半导体随机存储器
SRAM
(1)SRAM:静态随机存储器,不用刷新电路,使用双稳态管存储数据,不掉电情况下数据存在。
(2)SRAM基本电路
DRAM
(1)DRAM:动态随机存储器,定时刷新电路,使用电容存储数据,不掉电情况下也需要定时对电容充电。
(2)DRAM的存储矩阵是二维的,有行有列。所以要对行和列进行片选。行列片选的片选片进行复用,即同一个针脚,先选择行,后选择列。
(3)动态RAM刷新 (刷新与行地址有关:默认数据能保持2ms)
(a)集中刷新(存取周期0.5μs)
集中刷新是一次刷新存储矩阵中所有的存储单元。即,在数据能保持的这2ms内,分为能读写的周期时间,和不能读写的电路刷新时间。这个刷新时间,也称为"死区“。
(b)分散刷新(存取周期为1μs)
分散刷新是,在每次读写数据后,立刻刷新该行存储矩阵。即一个存取周期=读写时间+电路刷新时间。而读写时间等于电路刷新时间,所以,1个存取周期等于2个读写时间,为2*0.5=1μsμs。
分散刷新不存在死区,但是使得一次存取时间变成原来的2倍
(c)异步刷新
异步刷新不在一次刷新所有行,也不再每次读写后立刻刷新,而是保证在2ms内,每一行得到刷新即可。所以其死区时间为0.5μs。如果将刷新安排在指令译码阶段,则不会有死区时间(指令译码阶段,不产生cpu去内存的io)
主存与CPU的连接
存储容量的扩展
(1)位扩展
(2)字扩展(增加存储字的数量)
(3)字位扩展
连线
数据总线(连着CPU MDR)
读/写控制线(CPU控制主存)
地址总线(连着CPU MAR,CPU提供主存地址)
存取速度的提升
双端口RAM
存储器有两个独立的端口,两组线,可以异步的被使用。
访问冲突:
同时 同一地址 写入 会发生写入错误
同时 同一地址 一写一读 会发生读出错误
解决访问冲突:
BUSY#信号
多模块存储器
单体多字
一个存取周期取出连续的多个字
优缺点:连续存取速度快,但是必须是连续的。
多体并行
多个存储体独立工作
优缺点:不同的请求源可以请求不同的存储体。
Cache
引入目的:解决主机与CPU在速度上的矛盾。
利用局部性原理
工作原理
(1)主存单位称为块,cache称为行,实质是一个东西
(2)CPU读主存时,把地址同时送给cache和主存,cache通过地址查看此字是否在cache中,若在则立即传送给cpu。若不在,则用主存读周期把此字从主存中读出送到cpu,与此同时,把含有此字的整个数据块从主存读出送到cache的行中。
Cache层次结构
(1)cache是分层次的:L1 cache,L2 cache,L3 cache。
(2)寄存器取值时,先从L1取,去不到则向下层的L2 cache取,L2再取不到,去内存取。
(3)每个核心享有独自的L1 cache和L2 cache,所有核心共享L3 cache。 L1,L2cache是片内cache
(4)L1 cache分为L1P和L1D,分开存储指令和数据。使指令和数据可以同时读取
现代CPU多级Cache的策略
按离CPU远近命名为 L1 Cache,L2 Cache,L3 Cache
L1最近
L1对L2使用全写法,L2对主存使用写回法
cache与内存的映射关系(读方式)
(1)全关联:full associative cache
主存中的字块可以被映射到任意Cache块
(2)直接映射:Direct Associated Cache
一个Cache快对应多个主存块
(3)组相联:Set Associated Cache
将Cache块分组,组件是直接映射,组内是全相联映射。
Cache中主存块的替换算法
实现简单,没有依据局部性原理,可能命中率较低。
比较容易实现,也没有依据局部性原理,可能会吧需要经常使用的快替换掉。(比如循环程序)
依据了局部性原理,平均命中率比FIFO高,是堆栈类算法。
采用计数器,每次替换计数最小的。
虚拟存储器
虚地址 (逻辑地址) 实地址 (物理地址)
主存地址空间 (实地址空间) 虚拟空间 (程序空间)
页式虚拟存储器
虚拟地址结构
虚页号+页内地址
页表
页表基址寄存器:存放页表的起始地址
页表行:虚页号,装入位,实页号
地址映射过程
优缺点
要查表,增加了访问主存次数。
长度固定,页表简单,调入方便。
页面不可能完全被利用,空间浪费。
段式虚拟存储器
虚拟地址结构
段号+段内地址
段表
段表基址寄存器:存放段表起始地址
段表行:段号、装入位、段起点、段长
地址映射过程
段页式虚拟存储器
程序分段,段的基本单位是页
虚拟地址结构
段号+段内页号+页内地址
地址映射过程
根据段号得到段表行,段表行取出页表起始地址,与段内页号一起得到页表行,从页表行中取出实页号,与页内地址拼接为物理地址。
置换算法
快表TLB
虚拟存储器中总是要查表,使用高速的缓冲区存储经常访问的页对应的页表项,就是快表。以前的表(在内存中)叫做慢表(Page)。
快表根据内容指定地址,使用相联存储器。
查找时,快表慢表一起工作,快表找到慢表的工作就作废。
命中的关系
Cache命中,Page必然命中
Cache命中,说明有主存地址了,必然被调入主存了
TLB命中,Page必然命中
TLB是Page的子集
Page不命中,Cache和TLB不会命中
Page不命中则没有调入主存,没有主存地址Cache不会命中
地址翻译:TLB --> 页表 --> Cache --> 主存 --> 外存
四、指令系统
指令格式
基本格式
操作码+地址码
操作码
地址码
被操作的数的地址
指令寻址方式
采用不同寻址方式的目的
缩短指令字长,扩大寻址空间,提高编程灵活性。
指令寻址
数据寻址
与数据有关的寻址方式划分为三类:立即寻址方式,寄存器寻址方式,存储器寻址方式。
可以划分为下列与数据有关的寻址方式:
CISC与RISC
CISC和RISC的比较
CISC
设置更复杂的新指令来实现软件功能的硬化。
主要特点
RISC
减少指令种类,简化指令功能,从而提高指令的执行速度。
主要特点
五、中央处理器
基本结构
运算器:对数据进行加工和处理
控制器:发出每条指令对应的操作序列对计算机进行控制
指令的执行
指令周期
三种周期
机器速度与机器主频的关系
(1)机器主频高,使得节拍耗时短,此时相同指令在执行过程中每个阶段虽然节拍数一样,但是每个节拍的耗时变短了。
(2)但是机器速度不只与机器主频有关,还与指令集有关。指令集每个阶段的微操作数越少,机器速度越快
指令执行方案
管理多个需要执行的指令的执行步骤顺序和时间。
控制器
控制器的结构
程序计数器、控制信号产生电路、指令寄存器
硬布线控制器
输入:节拍发生器、操作码译码器
处理:硬布线控制器
输出:控制信号
优缺点:
微程序控制器
指令作为微程序存储,然后被执行。
一条机器指令对应一个微程序(微程序可以由更小的微程序组成,如取址),微程序存储在控制存储器(ROM)中。
一个微程序里面包含多个微指令
一个微指令对应一个或多个微操作(M(MAR)\toMDR)
一个微操作对应一个微命令
一个微命令就是发出一个控制信号
一条机器指令执行过程
微程序与硬布线的区别
硬布线什么时候执行什么,有时序逻辑控制。
微程序每次执行完一条微指令需要给出下一条微指令的地址。特别地,写在ROM中的微程序(取指微程序)它的每一条指令的下一个指令地址写在每个指令的下地址字段中(写在ROM中)。
取指微程序执行完之后,其后继微指令的地址是由微地址形成部件形成的。
是由取指微程序放在CMAR中
硬布线在取指阶段把指令操作码送至译码器,再由译码器译码之后作为CU的输入生成下个控制信号。
微程序在取指阶段(取指微程序运行时)把指令的操作码送到微地址形成部件,生成执行周期微程序的首地址。
指令流水线
把指令分成更小的过程(段),多条指令的某些过程可以并行运行,达到提高计算机运行速度的目的。
指令分段:
影响流水线的因素和解决办法
结构相关(资源冲突)
两个指令都要用一个资源
解决:
1.排队,后面的等
2.增加资源
数据相关(数据冲突)
后面的指令依赖前面指令的执行结果,不能并行运行。
WAR 读后写相关
WAW 写后写相关
解决:
1.后面等
2.数据旁路技术,两个指令直接私下交流
3.编译器优化,调整指令顺序
控制相关(控制冲突)
碰见转移指令,流水线后面的指令都作废了
解决:
1.分支预测
静态预测:总是预测条件不满足
动态预测:根据历史情况
2.两个分支的指令都先存着
3.加快形成条件码
4.提高分支预测的猜中率
流水线的性能指标
流水线中的多发技术
超标量技术、超流水线技术、超长指令字
六、总线
总线概念
定义
(1)总线是连接各个部件的信息传输线
(2)总线是各个部件共享的传输介质
(3)总线上信息的传送分为串行和并行。(eg:usb串行,数据总线,地址总线并行传输)
(4)总线上的多个部件只能分时的向总线发送数据,但可以同时从总线上传输数据
引入总线结构的好处:
总线分类
(1)片内总线:芯片内部的总线
(2)系统总线:计算机各部件之间的信息传输总线
(a)数据总线:双向,与机器字长,存储字长有关
(b)地址总线:单向,与存储地址,IO地址有关
(c)控制总线:有出有入。(入的为中断响应)
(3)通信总线:用于计算机系统之间的通信(控制仪表盘,移动通信等)
总线的特性和性能指标
(1)总线宽度:数据线的根数
(2)总线带宽:每秒传输的最大字节数(Mbps)
总线带宽 = 总线宽度 * 总线频率
总线仲裁 (总线的控制)
总线的判优控制 (由哪个部件发数据)
主设备(模块):该模块对总线有控制权
从设备(模块):响应从主设备发送来的总线命令
仲裁方式:
集中式 :
分布式
总线周期
一个总线设备在某一时刻可以有多对主从设备进行同行吗?
不可以,在某一时刻,总线上只有一个主设备控制总线,选择一个从设备与之进行通信(即一对一关系),或对所有设备进行广播通信(即一对多关系)。所以不能有多对主从设备同时进行通信。
七、I/O系统
IO设备与主机信息传送的控制方式
程序查询
CPU不断查询IO设备是否ready,CPU工作效率不高,是串行工作方式。
程序中断
IO设备发出中断请求,予以响应,大大提高了工作效率,是并行工作方式。
工作流程
大部分中断处理的大致流程
中断隐指令:
中断服务程序的入口地址叫做中断向量
所有的中断向量存在中断向量表
中断服务程序:
多重中断和中断屏蔽
中断源与屏蔽字与优先级
例如有四个中断源A、B、C、D
优先级 D>A>C>B
D的中断屏蔽字为:1 1 1 1 屏蔽所有
A的中断屏蔽字为:1 1 1 0 屏蔽ABC
DMA方式
主存与IO设备之间有一条数据通路,如果CPU和DMA同时访问主存,让给DMA。
DMA方式只用于传数据,鼠标和键盘不能用DMA,他们要处理事件
传送方式
停止CPU访问主存
DMA与CPU交替访问访存
周期挪用
CPU不在访存时
CPU正在访存
CPU和IO同时发出请求
传送过程