微程序设计级、一般机器级、操作系统级、汇编语言级、高级语言级。
硬件:
第1级:微程序机器层M0(微指令系统),由硬件直接执行微指令
第2级:传统机器M1(机器语言机器),用微程序解释机器指令
软件:
第3级:虚拟机器M2(操作系统机器),用机器语言解释操作系统
第4级:汇编语言M3(汇编语言机器),用汇编程序翻译成机器语言程序
第5级:虚拟机器M4(高级语言机器),用编译程序翻译成汇编语言程序
基本工作方式:控制流驱动方式;
最根本的特征:采用“存储程序”原理,即按地址访问并顺序执行指令;
指令和数据均以二进制形式存放在存储器中;
CPU区分依据是:指令周期的不同阶段。
冯·诺依曼计算机:以运算器为中心
现代的计算器:以存储器为中心
5大部件:存储器、运算器、控制器、输入设备、输出设备(适配器)
三大部分:CPU(运算器、控制器)、I/O设备(输入设备、输出设备)、主存储器
将指令和数据放在两个独立的存储器,允许在一个机器周期内同时获得指令和操作数,提高了执行速度。
机器字长:
1、CPU一次能处理数据的位数。
通常与CPU的寄存器位数有关。字长越长,精度越高。
2、机器的字长也会影响机器的运算速度。
字长较短,运算位数多,可能需要多次运算才能完成。
3、对硬件造价有影响。
直接影响ALU、数据总线以及存储字长的位数。
存储容量:
主存容量、辅存容量
运算速度:
吞吐量和响应时间
主频和CPU时钟周期
CPI:执行一条指令所需的时钟周期数。
CPU执行时间:指运行一个程序所花费的时间。取决于:1、主频;2、CPI;3、指令条数
MIPS:每秒执行多少百万条指令。
MFLOPS:每秒执行多少百万次浮点运算。(标志系统性能最有用参数)
GFLOPS:每秒执行多少十亿次浮点运算。
TFLOPS:每秒执行多少万亿次浮点运算。
①输入码(外码):区位码、国际码、拼音码、电报码、表形码等
②内码:0、1(机器码)
③输出码:汉字字形码
汉字编码包括汉字的输入编码、汉字内码、汉字字形。用两个字节表示一个汉字,每个字节用七位码。区位码是4位十进制数,前2位是区码,后2位是位码。
国标码是将十进制的区位码转换为十六进制后,再在每个字节上加上20H。为了方便计算机区分中文字符和英文字符,将国标码两个字节的最高位都改为“1”,这就是汉字内码(十六进制)。
小端模式:按先存储低位字节、后存储高位字节的顺序存放字符串的内容。
大端模式:按先存储高位字节、后存储低位字节的顺序存放字符串的内容。
①奇偶校验码:只能检出一位错误,不能确定出错的位置;只能检验处奇数位错误,不能检测出偶数位错误。
奇校验码:整个校验码中“1”的个数为奇数。
偶校验码:整个校验码中“1”的个数为偶数。
②海明(汉明)检验码:可检出错位位置
③循环冗余校验(CRC)码:可检出错误位置(通过除法运算)
1、原码、补码、反码三种机器数的最高位均是符号位。
2、当真值为正时,原码、补码、反码的表示形式均相同,即符号位用“0”表示,数值部分与真值相同。
当真值为负时,原码、补码、反码的表示形式不同,但其符号位都用“1”表示,而数值部分补码是原码的“求反加1”,反码是原码的“每位求反”。
3、同一个真值的移码和补码仅差一个符号位。
4、不同机器数表示±0时,其形式不同。
[+0]原≠[-0]原, [+0]反≠[-0]反,[+0]补=[-0]补,[+0]移=[-0]移
5、当机器字长确定后,补码比原码、反码能多表示一个负数。
6、移码只能表示整数,用它表示浮点数的阶码时,能方便地判断阶码的大小。
基本公式:(将符号位和数值部分一起参加运算,并且将符号位产生的进位自然丢掉即可)
加法:[A]补+[B]补=[A+B]补
减法:[A-B]补=[A]补+[-B]补([-B]补由[B]补连同符号位在内,每位取反,末尾加1)
溢出判断:
①用一位符号判断溢出:实际参加操作的两个数符号相同,结果又与原操作数的符号不同,即为溢出。
②用两位符号位判断溢出:当2位符号位不同时,表示溢出,否则,无溢出。不论是否发生溢出,高位(第1位)符号永远代表真正的符号。(变形补码,运算时多一位)
01正溢出(上溢);10负溢出(下溢)
③采用一位符号位根据数据位的进位情况判断溢出。如果符号位的进位与最高数位的进位不同,则表示结果溢出。
(1)对阶:两个数的小数点位置对齐(使阶码相等),两个数的阶码相减求阶差,使小阶的尾数向右移位,每右移一位,阶码加1。
(2)尾数求和:将对阶后的两个尾数按定点加(减)运算规则进行运算。
(3)规格化:补码规格化形式为[S]补 00.1××××;[S]补 11.0××××。
①左规:尾数出现00.0××××或11.1××××时,需左规。尾数左移一位,阶码减1。
②右规:尾数出现01.××××或10.××××时,表示尾数溢出,但在浮点运算中不算溢出,可通过右规处理。尾数右移一位,阶码加1。
(4)舍入:在对阶和右规的过程中,可能会将尾数的低位丢失,引起误差,影响精度,用舍入法来提高尾数的精度。
①“0舍1入”法:被移去的最高位数值位为0,则舍去;被移去的最高数值位为1,则在尾数的末位加1。又溢出时,再右规……
②“恒置1”法:不论丢掉的最高数位是“1”还是“0”,都使尾数末位恒置“1”。
两种方法同样都有使尾数变大和变小两种可能。
(5)溢出判断(是否溢出由阶码的符号决定)
①上溢:阶码[j]补=01,×××,作溢出处理
②下溢:阶码[j]补=10,×××,按机器零处理
上溢:当浮点数阶码大于最大阶码时,上溢,机器停止运算,进行中断溢出处理。
下溢:当浮点数阶码小于最小阶码时,下溢,溢出的数绝对值很小,通常将位数各位强制为0,按机器零处理,机器可以继续运行。
原码、反码:-127—+127
补码、移码:-128—+127
现代计算机中,浮点数一般采用IEEE制定的国际标准:
常用的浮点数有三种:
阶码用移码表示,短实数、长实数、临时实数的偏移量用十六进制数表示分别为7FH(127)、3FFH、3FFFH。
尾数部分通常是用原码、规格化表示,即非“0”的有效位最高位总是“1”,但在IEEE标准中,有效位呈如下形式:1▲ff…ffff,其中▲表示假想的二进制小数点。在实际表示中,对短实数和长实数,这个整数位的1省略,称隐藏位;对于临时实数不采用隐藏位方案。
规格化的短浮点数真值: ( − 1 ) S × 1. m × 2 E − 127 (-1)^{S}×1.m×2^{E-127} (−1)S×1.m×2E−127
存储器主要性能指标:速度、容量、每位价格(位价)
一般来说,速度越高,位价越高;容量越大,位价越低;容量越大,速度越低。
①缓存-主存:主要解决CPU和主存速度不匹配问题
(由硬件自动完成)数据调动对任何程序员透明。
②主存-辅存:主要解决存储系统的容量问题
(由硬件和操作系统共同完成)数据调动对应用程序员透明。
一般取2ms,对动态RAM的全部基本单元电路必作一次刷新,称为刷新周期,又称再生周期。刷新的单位是行,仅需要行地址。
①集中刷新:在规定的一个刷新周期内,对全部存储单元集中一段时间逐行进行刷新,此刻必须停止读/写操作,称“死时间”或“死区”。(全部一起刷)
②分散刷新:对每行存储单元的刷新分到每个存取周期内完成。优点:没有死区。缺点:存取周期加长,整个系统速度降低。(一个个刷)
③异步刷新:是前两种方式的结合,既缩短“死时间”,又充分利用最大刷新时间间隔为2ms的特点。(一行行刷)
一行行刷的平均刷新时间:
行数 = 芯片容量 / 每行存储单元个数
平均刷新时间 = 间隔最长 / 行数
(1)位扩展
增加存储字长。例如:2片1K4位的存储芯片可组成1K8位的存储器。
注意:其中一片的数据线作为高4位D7-D4,另一片的数据线作为低4位D3-D0。
(2)字扩展
增加存储器字的数量。例如:2片1K8位的存储芯片可组成一个2K8位的存储器。
注意:两片都连地址线A0-A9。(从低位连起)
(3)字、位扩展
既增加存储字的数量又增加存储字长。
为了提高CPU访问存储器的速度,可以采用双端口存储器(空间并行)、多模块存储器(时间并行)等技术,都属于并行技术。
为了提高访存速度。(CPU速度比存储器快,同时从存储器中取出n条指令,可以充分利用CPU资源,提高运行速度)
(1)单体多字系统
在一个存取周期内,从同一地址取出n条指令,然后逐条将指令送至CPU执行,即每隔1/n存取周期,主存向CPU送一条指令,增大了存储器的带宽,提高了存储器的工作速度。
例如:从同一地址取出4条指令,为单体四字结构,每字W位。按地址在一个存取周期内可读出4*W位的指令或数据,使主存带宽提高到4倍。
缺点:指令和数据在主存内必须是连续存放的,一旦遇到转移指令,或者操作数不能连续存放,这种方法的效果就不明显。
(2)多体并行系统
采用多提模块组成的存储器。每个模块可以并行工作,也可以交叉工作。
①低位交叉编址
程序连续存放在相邻体中(交叉存储)。低位地址表示体号,高位地址表示体内地址。
地址的低n为片选。
优点:相邻地址单元的数据放在不同组,各组可以并行工作,能较好提高存储器的带宽。
缺点:某一组出现故障,会影响整个存储器的正常工作。
②高位交叉编址
按体内地址顺序存放(顺序存储)。高位地址表示体号,低位地址表示体内地址。
地址的高n位片选。
优点: 某一组的故障不影响其他组,且容易通过添加模块来扩充容量。
缺点:相邻地址单元的数据放在同一组存储单元,各组间串行工作,不利于提升存储器的带宽。
由主存地址映射到Cache地址称为地址映射。
(1)直接映射
主存数据只能装入Cache中的唯一位置。若这个位置已有内容,则产生块冲突,原来的块将无条件地被替换出去(无需使用替换算法)。
映射关系: i = j m o d 2 c i=j \mod\ 2^{c} i=jmod 2c
地址结构:
主存字块标记 | Cache字块地址 | 字块内地址 |
---|
优点:实现简单,只需利用主存地址的某些位直接判断,即可确定所需字块是否在缓存中。
缺点:不够灵活,降低命中率。
(2)全相联映射
允许主存中每一字块映射到Cache中的任何一块位置上。可以从已被占满的Cache中替换出任一旧字块。
通常采用昂贵的“按内容寻址”的相联存储器来完成。
地址结构:
主存字块标记 | 字块内地址 |
---|
优点:灵活,命中率高,缩小了块冲突率,空间利用率高。
缺点:地址变换速度慢,实现成本高
(3)组相联映射(上述两种映射的折中)
将Cache空间分成大小相同的组,主存的一个数据块可以装入到一组内的任何一个位置(组间采取直接映射,组内采取全相联映射)。
映射关系:i=j mod Q (i是缓存的组号,j是主存的块号,Q是Cache的组数)Q=1是变为全相联映射
地址结构:
主存字块标记 | 组地址 | 字块内地址 |
---|
(1)先进先出(First-In-First-Out,FIFO)算法
(2)近期最少使用(Least Recently Used,LRU)算法
(3)随机法
磁盘寻址的最小单位是扇区。
道密度:沿磁盘半径方向单位长度的磁道数。
位密度:单位长度磁道上记录二进制的位数。
平均寻道时间:从一个磁道转移到另一个磁道的平均时间。(全部寻道时间的一半)
平均等待时间:旋转等待的平均时间。(转一周时间的一半)
一扇区的传送时间:T=1 / (转速×扇区数)
存取一个扇区的时间:T=每个扇区位数 / (转速×扇区数)
平均存取时间=平均寻道时间 + 平均等待时间 + 传输时间
每个记录面的磁道数:K=[(外直径-内直径)/2]*磁道密度
盘组格式化容量:C = 记录面数 * K * 每个扇区字节数 * 扇区数
盘组非格式化容量:CN = 记录面数 * K * 最内圈磁道周长 * 内层位密度
WE 为写允许信号:低电平0为写,高电平1为读
CS为片选信号:低电平0有效
借位/进位C:1=结果的最高位发生了进位,0=结果的最高位未发生进位
溢出标志位V:1=溢出,0=没有溢出
寻址方式 | 有效地址 | 访存次数(不计取指令) | 优点 | 缺点 |
---|---|---|---|---|
立即寻址 | A是操作数 | 0 | 获取操作数最快的方式,不必访问存储器。 | A的位数限制了立即数的范围。 |
直接寻址 | EA=A | 1 | 寻找操作数比较简单,指令执行阶段对主存只访问一次。 | A的位数限制了操作数的寻址范围;修改A的值才能修改操作数的地址。 |
隐含寻址 | 程序指定 | 0 | 有利于缩短指令字长。 | 需增加存储操作数或隐含地址的硬件。 |
间接寻址(一次) | EA=(A) | 2 | 与直接寻址相比,扩大了操作数的寻址范围;便于编制程序(方便地完成子程序返回)。 | 指令的执行阶段需要访存两次(一次间接寻址)或多次(多次间接寻址),致使指令执行时间延长。 |
寄存器寻址 | EA=Ri | 0 | 无须访存,减少了执行时间(第二快);指令字较短,节省存储空间。 | 寄存器价格昂贵,计算机中寄存器个数有限。 |
寄存器间接寻址(一次) | EA=(Ri) | 1 | 比间接寻址少访存一次,速度更快。 | 指令的执行阶段还需要访问主存。 |
基址寻址 | EA=A+(BR) | 1 | 扩大操作数的寻址范围。在多道程序中极为有用。可用于编制浮动程序。 | 偏移量(形式地址A)的位数较短。 |
变址寻址 | EA=A+(IX) | 1 | 扩大操作数的寻址范围。主要用于处理数组问题,适合编制循环程序。**偏移量(变址寄存器IX)**的位数足以表示整个存储空间。 | |
相对寻址 | EA=A+(PC) | 1 | 转移地址不固定,随PC值的变化而变化,有利于编写浮动程序。 | |
堆栈寻址 |
序号 | 复杂指令系统计算机(CISC) | 精简指令系统计算机(RISC) |
---|---|---|
1 | 指令系统复杂庞大,指令数目一般为200条以上。 | 选取使用频率最高的一些简单指令,复杂指令的功能由简单指令的组合来实现。 |
2 | 指令的长度不固定,指令格式多,寻址方式多。 | 指令长度固定,指令格式种类少,寻址方式种类少。 |
3 | 可以访存的指令不受限制。 | 只有取数/存数(Load/Store)指令访问存储器,其余指令的操作都在寄存器内完成。 |
4 | 各种指令使用频度相差很大。 | CPU中有多个通用寄存器。 |
5 | 各种指令执行时间相差很大,大多数指令需多个时钟周期才能完成。 | 采用流水线技术,大部分指令在一个时钟周期内完成。采用超标量和超流水线技术,可使每条指令的平均执行时间小于一个时钟周期。 |
6 | 控制器大多数采用微程序控制。 | 控制器采用组合逻辑控制,不用微程序控制。 |
7 | 难以用优化编译生成高效的目标代码程序。 | 采用优化的编译程序。 |
寄存器——寄存器型(RR型);
寄存器——存储器型指令(RS型);
存储器——存储器型(SS型)。
(1)单指令周期
对所有指令都选用相同的执行时间来完成。
下一条指令只能在前一条指令执行结束之后才能启动。(串行)
指令周期取决于执行时间最长的指令的执行时间。
(2)多指令周期
对不同类型的指令选用不同的执行步骤来完成。
下一条指令只能在前一条指令执行结束之后才能启动。(串行)
可选用不同个数的时钟周期来完成不同指令的执行过程。
(3)流水线方案
指令之间可以并行执行的方案。
追求的目标是力争在每个时钟脉冲周期完成一条指令的执行过程。
通过在每一个时钟周期启动一条指令,尽量让多条指令同时运行,但各自处在不同的执行步骤中。
时钟周期:计算机操作的最小单位,由计算机主频确定,是主频的倒数。
工作脉冲:控制器的最小时间单位,起定时出发作用,一个时钟周期有一个工作脉冲。
机器周期:即CPU周期,包含若干个时钟周期。
指令周期:可由多个CPU周期组成。
存取周期:存储器进行两次独立的存取器操作(连续两次读或写操作)所需最小间隔时间。
存储字长:存放在一个存储单元中的二进制代码位数
机器字长:CPU一次能处理数据的位数。
指令字长:一般去存储字长的整数倍。
(1)水平型微指令:直接编码、字段直接编码、字段间接编码和混合编都是。
特点:一条水平型微指令定义并执行几种并行的基本操作。
(2)垂直型微指令:采用类似机器指令操作码的方式,设置操作码字段μOP
特点:一条垂直型微指令只能定义并执行一种基本操作。
(3)混合型微指令:在垂直型的基础上增加一些不太复杂的并行操作。指令较短,仍便于编写;微程序也不长,执行速度加快。
优缺点 | 水平型微指令 | 垂直型微指令 |
---|---|---|
优点 | 微程序短,执行速度快 | 微指令短、简单、规整,便于编写微程序 |
缺点 | 为指令长,编写微程序较麻烦 | 微程序长,执行速度慢,工作效率低 |
比较:
比较 | 水平型微指令 | 垂直型微指令 |
---|---|---|
并行操作能力 | 强 | 弱 |
效率 | 高 | 低 |
灵活性 | 强 | 弱 |
执行速度 | 快 | 慢 |
微指令字长 | 长 | 短 |
微程序 | 短 | 长 |
掌握难易 | 难以掌握 | 容易掌握(因为与指令类似) |
比较 | 硬布线控制器(组合逻辑控制器) | 微程序控制器 |
---|---|---|
工作原理 | 微操作控制信号由组合逻辑电路根据当前的指令码、状态和时序,即使产生 | 微操作控制信号以微程序的形式存放在控制存储器中,执行指令时读出即可 |
执行速度 | 快 | 慢(访问控制存储器) |
规整性 | 烦琐、不规整 | 较规整 |
应用场合 | RISC CPU | CISC CPU |
易扩充性 | 困难(不能修改) | 易扩充修改 |
控制存储器CM:是微程序控制器的核心部件,用于存放微程序,可用ROM构成。
微指令寄存器CMDR:用于存放从CM中取出的微指令,位数同指令字长相等。
微地址形成部件:产生初始微地址和后继微地址,以保证微指令的连续执行。
微地址寄存器CMAR:接受微地址形成部件送来的微地址,为在CM中读取指令作准备
。
地址转移逻辑:在有分支转移时形成新的后继地址。
每条机器指令编写成一个微程序;
每一个微程序包含若干条微指令;
每一条微指令对应一个或几个微操作命令。
三种:结构相关、数据相关、控制相关
数据相关:写后读(RAW)、读后写(WAR)、写后写(WAW)
若发生数据相关冲突:如果在硬件设计上采用向前传送技术加以改进,则可不延迟。
总线是构成计算机系统的互联机构,是多个系统功能部件之间进行数据传送的公共通路。
(总线仲裁还有另一种方式:分布仲裁方式)
(1)链式查询
有3根控制总线用于总线控制(BS总线忙、BR总线请求、BG总线同意)
总线同意信号BG是串行地从一个I/O接口送到下一个I/O接口。(离总线控制部件最近的设备具有最高的优先级)
(2)计数器定时查询
比链式查询多了一组设备地址线,少了一根总线同意先BG。
特点:
①计数从“0”开始,一旦设备的优先次序被固定,设备的优先级就按0、1、2、…的顺序降序排列,固定不变。
②计数从上一次计数的终止点开始,即使一种循环方法,此时设备使用总线的优先级相等。
③初始值可由程序设置,优先次序可以改变。
(3)独立请求方式
每一台设备均有一对总线请求先BRi和总线同一线BGi。
总线控制部件中有个排队电路,可根据优先次序确定哪一台设备的请求。
1、同步定时方式
通信双方由统一时标控制数据传送称为同步通信。
优点:规定明确、统一,模块间的配合简单一致。
缺点:主、从模块都用同一时限,造成对各不相同速度的部件而言,必须按最慢的部件来设计公共时钟,严重影响总线的工作效率,也给设计带来了局限性,缺乏灵活性。
适用于:总线长度较短、各部件存取时间比较一致的场合。
特点:总线传输周期越短,数据线的位数越多,直接影响总线的数据传输率。
2、异步定时方式
允许各模块速度不一致,没有公共的时钟标准,不要求所有部件严格的统一操作时间,采用应答方式(又称握手方式)。
应答方式可分为三种类型:不互锁、半互锁、全互锁。
(1)不互锁方式(如:CPU向主存写信息)
(2)半互锁方式(如:多机系统中,某个CPU需访问共享存储器)
(3)全互锁方式(如:网络通信中,通信双方)
1、PCI总线(外部设备互连总线)
高性能的32位或64位总线,专为高度集成的外围部件、扩充插板和处理器/存储器系统而设计的互联机制。目前常用的PCI适配器有显卡、声卡、网卡等。
2、USB总线(通用串行总线)
是一种连接外部设备的I/O总线标准,属于设备总线。具有即插即用、热插拔等优点,有很强的连接能力。
总线宽度:一个总线周期中并行传输的字节数
总线带宽 = 总线宽度 * 总线时钟频率