admin 管理员组文章数量: 887021
2023年12月21日发(作者:kubernetes有什么用)
408计算机组成原理笔记(超全)
(一) 第一章 计算机系统概述
● 考纲内容
● 一、计算机系统层次结构
1. 计算机系统的基本组成
● 一个完整的计算机系统是由硬件系统和软件系统组成的。在计算机系统中,硬件和软件在逻辑上是等效的。
2. 计算机硬件的基本组成
● 五大部件
● 输入设备:将信息转换成为机器能识别的形式
● 输出设备:将结果转换成人们熟悉的形式
● 存储器:存放数据和程序,分为主存储器(内存储器)和辅助存储器(外存储器),主存储器包括地址寄存器MAR、数据寄存器MDR、时序控制逻辑。其中地址寄存器的位数对应着存储单元的个数,数据寄存器的位数和存储字长相等
● 运算器(核心是算术逻辑单元ALU):进行算数运算和逻辑运算
● 控制器:指挥程序运行,由程序计数器PC、指令寄存器IR和控制单元CU组成
● 早期冯诺依曼架构首次提出了“存储程序”的概念,以运算器为中心,指令和数据以同等地位存在存储器中并且按地址寻访,指令和数据都用二进制表示,指令由操作码和地址码组成
● 现代计算机结构以存储器为中心,将运算器和控制器合起来称为CPU
3. 计算机软件和硬件的关系
● 软件按功能分为系统软件和应用软件
● 机器语言:二进制代码语言,是计算机唯一可以识别和执行的语言
● 汇编语言:用英文单词或其缩写代替二进制的指令代码,方便记忆和理解
● 高级语言:是为方便程序设计人员写出解决问题的代理方案和解题过程的程序
● 翻译程序
● 汇编程序:将汇编语言程序翻译成机器语言程序
● 解释程序:将高级语言翻译成机器语言(翻译一句执行一句)
● 编译程序:将高级语言程序翻译成汇编语言或者机器语言
4. 计算机系统的工作原理
● “存储程序”方式
● 在程序执行前就把所含的所有指令和数据送入内存,一旦程序开始执行就无须人为干预,计算机可以自动取指并完成任务
● 高级语言程序与机器语言程序的转换
● 预处理阶段:预处理‘#’开头的命令,如头文件
● 编译阶段:编译器将预处理后的源程序编译成汇编语言程序
● 汇编阶段:汇编器将汇编语言程序翻译成机器语言程序(可重定位)
● 链接阶段:链接器将多个可重定位文件和标准库函数合并为一个可执行目标文件
●
● 程序和指令的执行过程
● 程序执行过程:程序的执行过程就是数据在CPU、存储器和I/O设备之间流动的过程,所有数据的流动都是通过总线、I/O接口等实现的
● 指令执行的过程(以取数指令为例,完成将数据送至运算器的累加器ACC中):先取指,即先将PC中记录的指令的存储地址送到MAR,主存根据MAR中的地址取出存放在该地址的指令放入MDR,MDR将指令送到IR【PC—>MAR—>M—>MDR—>IR】;再分析指令,即控制器根据IR中指令的操作码,生成取数指令相对应的控制信号,这里会将读控制信号发送到总线的控制线上【OP(IR)—>CU】;最后执行指令,即先将IR中取数指令的地址码送到MAR中,然后主存根据读控制信号和MAR中的地址取出存放在该地址的数据并送入MDR,再送到ACC中【Ad(IR)—>MAR—>M—>MDR—>ACC】
● 二、计算机性能指标
1. 机器字长,也叫字长,是CPU内部用于整数运算的运算器位数和通用寄存器的宽度
2. 指令字长和存储字长,指令字长一般是存储字长的整数倍,若指令字长等于存储字长则取指周期等于机器周期
3. 数据通路带宽(数据字长)是指数据总线一次能并行传送信息的位数
4. 主存容量
5. 运算速度
● 吞吐量是指系统在单位时间内处理请求的数量,主要取决于主存的存取周期
● 响应时间是指用户向计算机发送请求到操作系统做出响应并得到结果的等待时间
● CPU时钟周期:CPU中的最小时间单位,执行指令的每个动作都至少需要一个时钟周期
● 主频:CPU时钟周期的倒数,单位是HZ
● CPI:执行一条指令所需的时钟周期数
● IPS:每秒执行多少条指令
● MIPS:每秒执行多少百万条指令
● FLOPS:每秒执行多少次浮点数运算
6. 基准程序:可以理解为跑分软件,但是也存在一定缺陷
● 小知识点
● 冯诺依曼机器的基本工作方式是控制流驱动方式
● 地址译码器一般是主存而不是CPU的构成部分
● 解释程序的速度一般比编译程序慢
● 相联存储器既可以按地址寻址也可以按内容寻址
● 在cpu中,IR、MAR、MDR对各类程序员都是透明的 ,即看不见的;通用寄存器都是可见的(mov指令会用到)
(二) 第二章 数据的表示与运算
● 考纲内容
● 一、数制与编码
1. 进位计数制及其相互转换
● 十进制数转换为任意进制数
● 整数部分采用除基取余法,先余为低,后余为高
● 小数部分采用乘基取整法,先整为高,后整为为低
2. 定点数的编码表示
● 通常用定点补码整数表示整数,用定点原码小数表示浮点数的尾数部分,用移码表示浮点数的阶码部分
● 原码:基本概念略,真值零的原码表示有正零和负零两种形式
● 补码:基本概念略,零的补码是唯一的,小数补码比原码多表示一个-1,整数补码比原码多表示一个-2。从补码到真值和从真值到补码都是按位取反再加一
● 移码:形式上等于将补码的符号位取反,数字上移码=真值+偏移值,其中偏移值=2^{n-1},如8位移码的偏移值为128。移码保持了数据原有的大小顺序,移码大真值就大,移码小真值就小。
● 二、运算方法和运算电路
1. 基本运算部件
● 加法器(ALU的核心部件)
● 一位全加器(FA)是最基本的加法单元
● 本位和表达式:S_i=A_i oplus B_i oplus C_{i-1},其中A和B是本位的两个数字,而C是之前一位的进位,整个式子的结果是ABC中由奇数个1时结果为1,否则为0
● 进位表达式:C_i=A_iB_i+(A_i oplus B_i)C_{i-1}
● 串行进位加法器:将n个全加器相连即可得到n位加法器,即串行进位加法器,计算速度主要取决于进位产生和传递的速度
● 并行进位加法器:各级进位信号同时形成,又称先行进位,实现先行进位的部件叫做先行进位部件,简称CLA部件
● 组内并行,组间串行进位的加法器
● 组内并行,组间并行的加法器
● 算术逻辑单元ALU
●
● A、B为两个n位操作数输入端;ALUop为操作控制端,如ALUop有3位表示ALU最多支持8种操作;Cin为进位输入端,Cout为进位输出端;ZF是0标志位(结果全0为1,否则为0);OF是溢出标志位(由最高位的进位和次高位的进位异或得到);SF是符号标志位(结果的最高位);CF是进位/借位标志位(由最高位进位Cout和sub位异或得到),其中CF仅对无符号数的运算有意义,OF和SF仅对有符号数的运算有意义
2. 定点数的移位运算
● 算术移位(对象是有符号数,移位过程中符号位保持不变)
● 对于正数,原码=反码=补码,不论左移还是右移都是补0
● 对于负数,原码左移和右移补0,反码左移和右移补1,补码由于左边和反码相同,右边和原码相同,所以补码左移补0,右移补1
● 由于位数有限,所以有时候算数移位并不能完全等效于乘除运算
● 逻辑移位
● 将所有操作数视为无符号数,左移和右移都补0
● 循环移位
● 带进位标志CF的循环移位
● 不带进位标志位的循环移位:最高位或者最低位同时进入CF和最低位或者最高位
●
3. 加减运算
● 补码加减运算器
● 公式:[A+B]_补=[A]_补+[B]_补;[A-B]_补=[A]_补+[-B]_补,符号位与数值位一起参与运算,高位丢弃,结果也是补码
● 溢出判断
● 采用一位符号位,直接根据溢出逻辑表达式V=ABoverline{S}+overline{A} ~overline{B}S,当V=1时即为溢出
● 采用双符号位S1S2,其中S1为本应的符号位,S2为结果的符号位
● S1S2=00,结果为正数,无溢出
● S1S2=01,结果正溢出
● S1S2=10,结果负溢出
● S1S2=11,结果为负数,未溢出
● 采用一位符号位,根据数据位的进位情况判断,若符号位的进位与最高数位的进位相同,则说明没有溢出,否则表示发生溢出
● 标志位的生成OF,ZF,CF,SF
4. 乘除运算
● 乘除运算的基本原理
● 乘法基本原理:先加法再移位,重复n次(n为数值位数)
● 原码一位乘法:符号位单独用异或运算,被乘数和乘数均取绝对值参与运算,从乘数的最低位开始,若该位为1,则高位部分积就加上被乘数(绝对值)然后逻辑右移一位;若该位为0,则部分积加上0,然后逻辑右移一位,右移后取丢掉一位的乘数的最低位重复上述过程,知道乘数的所有数值位都参与了运算
● 补码一位乘法:符号位参与运算,因此比原码一位乘法多一次加法,被乘数和部分积用双符号位,用辅助位存储乘数右移时被丢弃的位(初始为0),从乘数的最低位开始,若辅助位-最低位=1,则部分积加上[x]_补并算数右移一位;若辅助位-最低位=-1,则部分积加上[-x]_补并算术右移一位;若辅助位-最低位=0,则部分积直接算术右移一位,直到乘数的符号位作为最低位也参与了运算结束,得到的结果是乘积的补码
●
● 除法的基本原理:累加—左移
● 原码恢复余数法:符号位单独用异或运算,每次默认商1,即先用被除数减去除数(也就是加上除数绝对值的相反数的补码),若余数为正,则商1,再把余数逻辑左移一位;若余数为负,则商0,用余数加上除数的绝对值的补码(即恢复成未减去余数时的数),再把结果逻辑左移一位
●
● 原码不恢复余数法(加减交替法):与原码恢复余数法不同的地方在于,恢复余数法当余数为负时商0,然后加上除数恢复余数逻辑左移一位,再减去除数形成新的余数上商,而加减交替法当余数为负时商0,直接逻辑左移一位并加上除数形成新的余数,此外,加减交替的最后一个余数如果是负数,则还需要加上一次除数才能得到正确的余数
●
● 补码加减交替法:采用双符号位,符号位参与运算,初始时若被除数和除数异号,则用被除数加上除数的补码得到第一个余数;若被除数和除数同号则减去除数的补码得到第一个余数,得到余数后,若余数和除数同号,则商1,余数左移一位减去除数;若余数和除数异号,则商0,余数左移一位加上除数,重复n次,最后一个余数恒置1
● 乘法运算和除法运算的电路基本结构
5. 整数的表示和运算
● 无符号整数的表示和运算
● 表示:n位无符号整数表示范围是0到2^n-1
● 运算
● 带符号整数的表示和运算
● 表示:n位带符号整数表示范围是-2^{n-1}-1~2^{n-1}-1
● 运算
● C语言中的整数类型及类型转换(C语言中定点整数采用补码存储)
● 有符号数和无符号数的转换:不改变二进制数的内容,只改变解释方式,有符号数会将无符号数的符号位也作为数值位重新计算数字的大小
● 长整数转换成短整数:高位截断,保留低位
● 短整数转换成长整数:符号扩展,正数的所有扩展都为0,负数若用原码表示则补0,若用补码表示则整数补1,小数补0
6. 浮点数的表示和运算
● 浮点数的表示:IEEE754标准
● 表示格式:数符+阶码+尾数,其中数符占一位,表示浮点数的符号;阶码,相当于次数,用移码或者补码表示的整数;尾数,用原码或者补码表示的定点小数
● 表示范围:当发生上溢时,计算机产生异常;当发生下溢时,计算机将其当作机器0处理
● 规格化:当尾数用原码表示时,规格化后小数点后的第一位一定是1;当尾数用补码表示时,规格化后小数点后一位和符号位要相反。当尾数的最高位不是有效位时,一定要用左规,只有当运算结果溢出到小数点左边时才用右规
● IEEE754标准,阶码用移码表示,尾数隐藏一个1,小数点在这个1的后面,即尾数若为.011,则实际尾数为1.011,计算实际阶码的实际值时要借助公式移码=真值+偏移值
●
● 浮点数的加减运算步骤
● 对阶:小阶向大阶对齐,保证对阶后两个尾数都还是定点小数
● 尾数求和
● 规格化:需要左规多次或者右规一次
● 舍入:0舍1入法:需要丢弃的最高位为0则舍去,为1则在尾数的末尾加1,这样可能会使尾数再次溢出需要右规;恒置1法:只要因移位而丢弃的位中有1,就把尾数末尾置1;截断法:直接截取所需的位数
● 指数溢出判断:右规时阶加1,需要判断是否发生了指数上溢(全为1则上溢);左规时阶减1,需要判断是否发生了指数下溢(全为0则下溢)
● C语言中的浮点数类型及类型转换
● char—>int—>long—>double和float—>double从前到后精度从小到大,转换过程没有损失
● int—>float时,由于float的尾数部分只有24位,所以会丢失精度
● float—>int时,由于int没有小数部分,所以数据仅保留整数部分,还有可能会发生溢出
● double—>int时,可能发生溢出或者舍入
● 小知识点
1. 由[x]补求[-x]补的方法是符号位和数值位全部取反再+1
2. 数据的大端排列方式:符合人类阅读习惯,从最高有效字节到最低有效字节的顺序存储,即最高有效字节放在前面;小端排列方式:便于机器处理,从最低有效字节到最高有效字节的顺序存储,即最低有效字节放在前面
3. 数据按边界对齐方式存储时,无论所取数据是字节、半字还是字均可一次访存取出,而不按边界对齐时,有可能需要两次访存
4. 对于相同位数的定点数和浮点数来说,可表示的数据个数一样多
(三) 第三章 存储系统
● 考纲内容
● 一、存储器的分类
1. 按在计算机中的作用分类
● 主存储器(主存,内存),CPU可以直接访问,存放计算机运行时需要的程序和数据
● 辅助存储器(辅存,外存),存放暂时用不到的程序和数据,需要被调入内存才能被CPU访问
● 高速缓冲存储器Cache,CPU能直接访问,存放CPU经常使用的指令和数据,位于主存和CPU之间
2. 按存储介质分类:磁表面存储器(磁盘,磁带)、磁芯存储器、半导体存储器、光存储器(光盘)
3. 按存储方式分类
● 随机存取器RAM,主要用作主存和Cache,又分为静态RAM和动态RAM
● 只读存储器ROM,信息一旦写入即使断电也不会丢失,广义上的ROM可以同过电擦除等方式进行写入,但写入比读取慢很多
● 串行访问存储器,进行读写操作时需要按存储单元的物理位置先后顺序寻址,分为顺序存取存储器(磁带)和直接存取存储器(磁盘,光盘)
4. 按信息的可保存性分类
● 易失性存储器:断电后存储信息就消失的存储器,如主存,cache
● 非易失性存储器,如ROM,磁表面存储器和光存储器
● 二、层次化存储器的基本结构
1. 主要思想:上一层的存储器作为低一层存储器的高速缓存,上一层中的内容都是低一层的内容的副本
2. 主要结构:Cache—主存层:解决CPU和主存速度不匹配的问题,数据调动由硬件自动完成,对所有程序员透明;主存—辅存层:解决存储系统的容量问题,数据调动由硬件和操作系统共同完成,对应用程序员透明
3.
● 三、半导体随机存取存储器
1. SRAM(静态随机存储器):用双稳态触发器作为存储元,采用非破坏性读出,存取速度快,但集成度低,功耗较大,价格昂贵,一般用作Cache
2. DRAM(动态随机存储器):用电容中的电荷来存储信息,采用破坏性读出,存储速度比SRAM慢,但容易即成,位价低、容量大,功耗低,一般用于大容量的主存系统
3. Flash存储器:即可以在不加电的情况下长期保存信息,又能在线进行快速擦除与重写
4. SRAM和DRAM的区别
● 四、主存储器
1. DRAM芯片和内存条
● DRAM的工作原理:由于DRAM电容上的电荷只能维持一小段时间,即使不断电信息也会自动消失,所以每隔一段时间必须刷新,通常取2ms,称为刷新周期。刷新对CPU是透明的,由存储器独立完成,刷新的单位是行,刷新操作类似于读操作,但不完全相同
● 刷新方式
● 集中刷新:集中安排时间全部刷新,存取时间不变,但在这段时间CPU不能访问存储器
● 分散刷新:每次读写完都刷新一行,存取时间翻倍
● 异步刷新:将刷新周期除以行数得到t,利用逻辑电路每隔时间t产生一次刷新请求
● DRAM的读写周期:表示DRAM芯片进行两次连续读/写操作时必须间隔的时间
● DRAM芯片的结构
● DRAM芯片的地址引脚复用技术:DRAM芯片容量较大,地址位数较多,为了减少芯片的地址引脚数,通常采用地址引脚复用技术,行地址和列地址通过相同的引脚分两次输入
● 一个内存条可能包含多个存储芯片,这时片选线就用来选择具体的某一个芯片
2. 多模块存储器
● 基本思想:采用多个结构完全相同的存储模块并行工作来提高存储器的吞吐率
● 单体多字存储器:存储器中只有一个存储体,每次并行读出m个字,但m个字地址必须顺序排列且处于同一存储单元
● 多体并行存储器
● 高位交叉编址(顺序方式):模块内的地址是连续的,存取方式仍然是串行存取,各个模块不能被并行访问,在存取连续的两个内容时,需要由于两者都在同一模块中,所以需要等待前一个内容存取完毕并经过一个恢复时间(也就是总共需要等待一个存取周期)后才能进行下一个内容的存取,所以这种方式不能提高存储器的吞吐率
● 低位交叉编址(交叉方式):内容连续存放在相邻模块中,当前一个内容存取完毕后,由于下一个内容存放在想另的模块中,因此无需等待前一模块的恢复时间就可以立即开始下一个内容的存取,即可以采用流水线的方式并行存取,在交叉存取度m大于等于T/r的情况下,连续存取m个字的所需时间为:t=T+(m-1)r,其中T为存取周期,r为总线传送周期(即读写操作所需的时间)
3. 主存和CPU之间的连接
● 连接原理
● 主存容量的扩展(将多个芯片集成到一个内存条上)
● 位扩展法:用多个存储芯片对字长进行扩充,增加存储字长,使存储字的数据位数与CPU的数据线位数相等,连接方式是将多个存储芯片的地址端、片选端和读写控制端并联,数据端分别引出与数据总线连接(比如第一块芯片的四根数据线就连接数据总线的D0到D3,然后第二块芯片连接D4到D7)
● 字扩展法:增加存储器中字的数量,而位数不变。连接方式是各个存储芯片的地址线、数据线、读写控制线都并联,用片选信号来区分选中哪个芯片的地址范围(n根片选线对应2^n个芯片)
● 字位同时扩展法
● 存储芯片的片选
● 线选法:不用译码器,直接一根地址线连接一块芯片,优点是线路简单,缺点是地址空间不连续,选片的地址线必须分时为低电平
● 译码片选法:n条地址线通过译码器的翻译可以表示2^n个片选信号,就可以对应2^n个芯片,可以使得地址空间连续
● 五、外部存储器
1. 磁盘存储器
● 特点:存储容量大,位价格低;记录介质可以重复使用;记录信息长期保存不丢失;非破坏性读出;存取速度较慢,机械结构复杂,对工作环境要求高
● 组成:硬盘存储器由磁盘驱动器(核心部件是磁头组件和盘片组件)、磁盘控制器(存储器和主机的接口,如IDE,SATA等)和盘片组成
● 原理:一块硬盘有若干记录面(盘面号或者磁头数),每个记录面划分为若干磁道(柱面号),在一个盘组中,不同记录面的相同编号的刺刀构成了一个圆柱面,而每条磁道又划分为若干扇区(扇区号),扇区也叫块,是磁盘读写的最小单位,即磁盘按块存取,各个扇区存放的数据量相同,可以用{柱面号,盘面号,扇区号}来唯一标识任意一个扇区。磁头和磁性记录介质相对运动时,通过电磁转换完成读/写操作
● 平均存取时间=寻道时间(磁头移动到目的磁道的时间)+旋转延迟时间(磁头定位道要读写扇区的时间)+传输时间(传输数据所需要的时间)
● 磁盘地址
● 磁盘阵列:由于磁盘在旋转的过程中不能连续的存取两个相邻扇区,所以可以采用RAID(独立冗余磁盘阵列),将多个独立的物理磁盘组成一个独立的逻辑盘,数据在多个物理盘上分割交叉存储、并行访问,提高了传输率、吞吐量、可靠性和容错能力
2. 固态硬盘
● 组成:一个SSD由一个或多个闪存芯片(相当于磁盘)和闪存翻译层(相当于磁盘控制器)组成,一个闪存由若干块组成,每块又划分为若干页,数据是以页为单位读写的,只有在一页所在的整个块被擦除后才能对这一页进行写操作,但在反复写之后闪存块会磨损,因此闪存翻译层中会有一个逻辑来控制将擦除平均分配在所有的块上来最大化每个块的寿命
● 六、高速缓冲存储器Cache
1. 程序访问的局部性原理
● 时间局部性:在最近的未来要用到的信息,很可能是现在正在使用的信息,因为程序中存在循环
● 空间局部性:在最近的未来要用到的信息,很可能与现在正在使用的信息在存储空间上是相邻的,因为指令通常是顺序存放、顺序执行的,数据一般也是聚集地存储在一起的
2. Cache的基本原理
● 利用局部性原理,把程序中正在使用的部分数据存放在一个高速的、容量较小的Cache中,使得CPU的访存操作大多数对Cache进行,从而提高程序的执行速度
● Cache和主存都划分为相等大小的块,Cache块也叫Cache行,CPU与Cache之间的数据交换以字为单位,Cache与主存之间的数据交换以块为单位
● 当CPU发出一个读请求时,会先检查Cache中是否有访存地址对应的数据,若有则命中,直接将此地址转换成Cache地址并对Cache进行读操作,无须再访问主存(也可以同时访问Cache和主存,若Cache命中则停止对主存的访问);若未命中,则访问主存找到对应数据,并把数据所在的块一次性从主存调入Cache,若Cache已满,则用替换算法进行块的替换,整个过程全部由硬件实现
● Cache命中率H=N_c/(N_c+N_m),其中Nc为Cache的总命中次数,Nm为访问主存的总次数
● Cache-主存系统的平均访问时间T_a=Ht_c+(1-H)t_m,其中tc为访问Cache的时间,tm为访问Cache+访问主存(因为是先访问Cache失败了才访问主存)的时间
3. Cache和主存之间的映射方式
● 直接映射:Cache行号=主存块号 mod Cache总行数,主存中每一块只能装入Cache中的唯一位置,这种方式实现简单,但不够灵活,容易发生冲突,空间利用率低。由于采取的是模运算,对于有2^c行的Cache,主
存块号的低c位正好就是它要装入的Cache行号,假设主存块号为m位,给每个Cache行设置一个t=m-c位的标记(tag位)用来存放主存块号的高c位,在这种情况下,将一个Cache行的tag拼接上这一行的行号得到的就是主存块号(从主存块号的角度来说,对于一个主存地址,它的高t位就是它在Cache行中的tag,它接下来的c位就是它的Cache行的行号,它剩余的b位属于块内地址编码)。由于tag位无法区分空的Cache行和第0行,所以用一个有效位置1来表示有效。根据主存地址的访存过程如下:首先根据访存地址的中间c位找到对应的Cache行,对比该Cache行中的tag和主存地址的高t位,若相等且有效位为1则Cache命中,此时根据访存地址除去高t+c位后剩余的块内地址,在Cache行中找到需要访问的字的信息进行存取;若不相等或者有效位为0则Cache未命中,此时CPU从主存中读出该地址所在的主存块送到相对应的Cache行中,将有效位置1,并将高t为设置为tag,同时将该地址的内容送到CPU
● 全相联映射:主存中的每一块都可以装入Cache中的任意一个空闲块,因此Cache行号和主存块号没有向直接映射那样的联系了,每一个Cache行的tag位记录的是完整的主存块号(从主存块号的角度来看,主存块号的高t位是装入的Cache行的tag位,低b位是块内地址),这种方式比较灵活,冲突少,命中率也高,但是标记的比较速度比较慢,实现成本高
● 组相联映射:将Cache分成Q个大小相等的组,组间采用直接映射,组内采用全相联映射(即存放在哪一组是固定的,但存放在组内的哪一行随意),若每一组有r个Cache行,就称为r路组相联。与全相联映射类似,由于采用模运算计算出组号,所以组号不用记录在Cache行中,访存过程如下:先根据访存地址中间的c位组号找到对应的Cache组,将对应的Cache组中的每一个Cache行的tag都与主存地址的高t位比较,若有一个相等的且有效位为1则访问Cache命中,此时根据块内地址进行信息存取;若都不相等或者相等但有效位为0则Cache未命中,此时操作同直接映射
4. Cache中主存块的替换算法
● 随机算法:未遵循程序局部性原理
● 先进先出算法(FIFO):未遵循程序局部性原理,可能会出现抖动
● 近期最少使用算法(LRU):根据程序访问的局部性原理,将近期内长久未访问过的Cache行替换,也可能会抖动。具体操作是为每一个Cache行设置一个计数器,当未命中且还有空余行时,新装入的行的计数器置0,其余全部加1;当未命中且无空余行时,计数器值最大的行被淘汰,新装入的行的计数器置0,其余全部加1;当命中时,所命中的行的计数器值置0,比其低的计数器加1,其余不变(整个过程中都是为了保证2^n个Cache行的计数器的值都不相同且值为0到2^n-1,这样就只需要用n位二进制来作为计数器就可以了)
● 最不经常使用算法
5. Cache写策略
● Cache写命中
● 全写法:当对Cache写命中,将数据同时写入Cache和主存,这样当Cache中的某一块需要被替换时,由于主存对应的块中的内容已经和该Cache行一致,所以此时直接覆盖该cache即可,无须再写回主存。这种方法实现简单,但增加了访存次数,降低了Cache效率,可以在Cache和主存之间加一个写缓冲区来降低这种影响
● 回写法:当对Cache写命中时,只把数据写入Cache,只有当该Cache行要被替换时才写回主存。这种方法需要为每一个Cache行设置一个修改位(脏位),置1表示修改过,需要写回主存
● Cache写未命中
● 写分配法:先把内容加载到Cache中,再更新Cache块,所以可以搭配回写法使用
● 非写分配法:只写入主存,不进行调块,通常搭配全写法使用
● 各级Cache之间一般用全写法+非写分配法;Cache和主存之间一般用写回法+写分配法
● 七、虚拟存储器
1. 虚拟存储器的基本概念
● 主存和辅存共同构成了虚拟存储器,虚拟存储器拥有主存的速度和辅存的容量,并且将主存或辅存的地址空间统一编址供用户编程使用。用户编程使用的地址叫虚地址或者逻辑地址,对应的空间称为虚拟空间或者程序空间。CPU使用虚地址时,需要用硬件辅助找出虚地址和实地址之间的对应关系并判断对应的存储单元是否存放在主存之中,若在则可以直接访问,若不在,则需要把辅存中包含这个字的页或者段调入主存再访问。虚拟存储机制采用全相联映射,每个虚页面可以存放到主存区域的任何一个位置,采用回写法
2. 页式虚拟存储器
● 基本原理
● 把虚拟空间和主存空间划分成为同样大小的页,主存中的页称为页框、页帧,辅存中的页称为虚页。把虚页地址分为虚页号和页内地址两个字段。优点是页面长度固定,页表简单,调入方便,缺点是程序使用的空间可能不是页的整数倍,所以会造成浪费
● 页表
● 是一张存放在主存中的虚页号和实页号的对照表,负责将逻辑地址转换为物理地址,每一个页表项分为有效位、脏位、引用位(用来配合替换算法)、物理页号或者磁盘地址
● 地址转换
● 系统会为每个进程建立一张页表(通常在PCB中),用页表基址寄存器存放页表在内存中的首地址,然后CPU根据虚地址的高位部分(也就是虚拟页号)找到对应的页表项,若该页表项的有效位为1,
则取出物理页号,与虚地址的低位部分(也就是页内地址)拼接组成物理地址;若有效位为0,则产生缺页中断,由操作系统进行缺页处理
●
● TLB快表(SRAM,相联存储器)
● 由于每次地址变换都需要到主存中查找一次页表,因此采用虚拟存储器后访存次数变多了,为了加快指令执行速度,可以根据程序局部性原理增设一个由高速缓冲器组成的快表用来存放最近经常访问的页的页表项,就类似于Cache,但快表中存放的是页表项的副本,而Cache中存放的是主存块的副本。快表采用全相联或者组相联方式,所以快表项由页表项内容加上一个标记字段组成,若使用全相联方式,则标记字段就是该页表项对应的虚页号;若使用组相联方式,则标记字段就是虚页号的高位部分
●
3. 段式虚拟存储器的基本原理
● 按程序的逻辑将存储空间划分成段,每段的长度因程序而异,虚拟地址分为段号和段内地址两部分,使用段表来转换虚拟地址和物理地址,段表的表项分为段号、有效位、段起点和段长(因为段的长度可变,所以要记录段的起始位置和段长)。优点是具有逻辑独立性,便于管理、修改和保护、共享,缺点是由于段长可变,所以分配空间不便,容易留下内部碎片。
4. 段页式虚拟存储器的基本原理
● 先按逻辑划分为段,段内再划分成大小固定的页,程序对主存的调入、调出仍以页为基本单位,每个程序对应一个段表,每个段表对应一个页表,虚拟地址分为段号,段内页号,页内地址三部分。缺点是需要两次查表,开销较大
● 小知识点
● 主板上的BIOS芯片属于ROM,但其实现的引导开机的程序属于内存,即计算机的主存空间由多个内存条(DRAM)和主板上的ROM芯片组成
● 当DRAM使用地址复用技术时,对于原本需要10根的地址线由于分两次传送,所以减半只需要5根,但是为了标识传送的是行地址还是列地址需要额外两根行通选线和列通选线,此时片选线的功能可以由行通选线替代,所以不需要片选线
● 格式化后的磁盘容量比非格式化的磁盘容量小
● SSD易磨损
● 在选用高位地址线作为片选线时,选择的是紧接着已使用的地址线的高位线,比如总共有16根地址总线,现在用0~12根作为地址线,还需要两根作为片选线,应该选择13和14这两根而不是14、15这两根
● 磁盘定位的扇区所花的平均时间是旋转半转用的时间
● 要注意区分装入Cache的地址和Cache行的内容,装入Cache的地址指的就是物理地址对应的字或者字节在Cache中的地址,这个地址是与物理地址的高t位(也就是主存块号)无关的,因为我们拿到一个主存地址后是根据他的中间c位(也就是Cache行号)来找到对应的Cache行的,所以这个主存地址对应的存储单元装入Cache的地址实际上就是主存地址的低c+m位;而Cache行的内容存储的是该物理地址在主存中对应的信息再加上tag位、有效位等信息,这两者一个是地址,一个是地址存放的内容
(四) 第四章 指令系统(机器级代码表示未整理完成)
● 考纲内容
● 一、指令格式的基本概念
1. 一组二进制代码,包括操作码和地址码两部分
● 二、指令格式
1. 根据指令与机器字长的关系可以分为半字长指令、单字长指令、双字长指令
2. 根据所有指令是否长度相等可以将指令系统分为定长指令字结构和变长指令字结构
3. 根据指令中操作数地址码的数目的不同,可以将指令分为
● 零地址指令,对应不需要操作数的情况(如空操作指令、停机指令、关中断指令)或者是操作数默认为栈顶和次栈顶
● 一地址指令,对应只有一个操作数(比如读操作)或者隐含目的地址的双操作数的情况
● 二地址指令,对应常用的算术和逻辑运算指令,其中的运算结果往往保留到目的地址中
● 三地址指令,将前两个地址对应的数进行运算后的结果存放到第三个地址中
● 四地址指令,前三个地址与三地址指令相同,增加的第四个地址用来指出下一条将要执行的指令的地址
4. 扩展操作码指令格式,设地址长度为n,上一层留出m种状态,则,下一层可以扩展出m*2^n种状态
● 三、寻址方式(确定本条指令的数据地址及下一条待执行指令的地址的方法)
1. 指令寻址:寻找下一条指令的地址(该地址始终由PC给出)
● 顺序寻址方式:通过PC+1,自动形成
● 跳跃寻址:由本条指令给出下一条指令地址的计算方式,可能是绝对地址(直接得到)或者是相对地址(相对于当前指令地址的偏移量),当前指令计算出下一条指令地址后会修改PC值
2. 数据寻址:寻找操作数的地址,为了区分各种数据寻址方式,需要在指令中加入寻址特征字段来指明使用的是哪一种数据寻址方式,指令中的地址码称为形式地址A,操作数的真实地址称为有效地址EA(虚拟地址,之后还需要转换为物理地址)
● 隐含寻址:在指令中隐含操作数的地址,如默认第二操作数在ACC中,优点是有利于缩短字长,缺点是需要增加存储操作数或隐含地址的硬件
● 立即数寻址:操作数地址码部分就是操作数本身,而不是操作数的地址,寻址特征用# 表示,操作数用补码表示,优点是指令执行快,缺点是A的位数限制了立即数的范围,通常用于给寄存器赋初值
● 直接寻址:EA=A,优点是执行指令时只需访问一次主存,缺点时A的位数决定了该指令操作数的寻址范围
● 间接寻址:A给出的是操作数地址的地址,也可能是多次间接寻址,优点是扩大了寻址范围,缺点是要多次访存
● 寄存器寻址:由A直接给出存放操作数的寄存器编号,优点是执行指令无需访存,速度快,缺点是造价贵且寄存器个数有限
● 寄存器间接寻址:由A给出存放操作数地址的寄存器编号,优点是比一般间接寻址快,缺点是需要访问主存
● 相对寻址:由A给出相对于当前PC的偏移量,优点是方便程序浮动,广泛用于转移指令
● 基址寻址:由A给出以程序起始地址作为起点的偏移量,该地址存放在基址寄存器中,普通程序员无法修改,将A作为可变的,优点是扩大了寻址范围,用户不用考虑自己的程序存放在哪,有利于多道程序设计,常用于为程序或数据分配存储空间
● 变址寻址:由程序员自己决定哪里作为起始点,存放在变址寄存器IX中,而A给出相对于这个起点的偏移量,与基址寻址不同的是,IX是可以修改的,往往A是不变的,主要用于处理数组问题,适合编制循环程序
● 堆栈寻址:指令的操作数地址隐含使用堆栈指针SP,内容存放在寄存器中的堆栈称为硬堆栈,存放在主存中的堆栈称为软堆栈
● 四、数据的对齐和大/小端存放方式
● 五、CISC和RISC的基本概念
1. CISC:复杂指令系统计算机,增强原有指令的功能,设置更为复杂的新指令实现软件功能的硬化
● 指令系统复杂庞大
● 指令的长度不固定,指令格式多,寻址方式多
● 可以访存的指令不受限制
● 各种指令执行时间相差很大
● 控制器大多数采用微程序控制
● 难以用优化编译生成高效的目标代码程序
2. RISC:精简指令系统计算机,减少指令种类和简化指令功能,提高指令的执行速度
● 选取使用频率最高的一些简单指令,复杂指令的功能由这些简单指令来实现
● 指令长度固定,指令格式种类少,寻址方式少
● 只有Load/Store(取数/存数)指令访存,其余指令的操作都在寄存器之间进行
● CPU中通用寄存器的数量很多
● RISC一定采用指令流水线技术,大部分指令在一个时钟周期内完成
● 以硬布线控制为主,很少采用微程序控制
● 特别重视编译优化工作,以减少程序执行时间
3. CISC和RISC的比较
●
● 六、高级语言程序与机器级代码之间的对应
1. 常用指令
● 数据传送指令
● mov指令,将第二个操作数复制到第一个操作数,但不能直接从内存复制到内存。eg:mov eax ebx意思是将ebx的值复制到eax;mov
byte ptr [var], 5意思是将5保存到var值所指的内存地址的一字节中
● push指令,将操作数压入内存的栈,常用于函数调用,压栈前先将ESP(指向栈顶)的值减4(因为栈增的方向与内存地址增长方向相反),然后将操作数压入ESP指示的地址。eg:push [var]意思是将var值指示的内存地址的4字节值压入栈
● pop指令,出栈,先出栈,然后将ESP加4。eg:pop [ebx]意思是弹出栈顶元素送到ebx值指示的内存地址的4字节中
● add和sub指令,都是将结果保存在第一个操作数中。eg:sub eax,10意思是eax=eax-10
● inc/dec指令
2. 选择结构语句的机器级表示
3. 循环结构预计的机器级表示
4. 过程(函数)调用对应的机器级表示
(五) 第五章 中央处理器
● 考纲内容
● 一、CPU的功能和基本结构
1. 功能
● 指令控制
● 操作控制
● 时间控制
● 数据加工
● 中断处理
2. 结构:分为运算器和控制器两大部分
● 运算器:接收从控制器送来的命令并对数据进行相应的加工和处理
● 算术逻辑单元
● 暂存寄存器(对应用程序员透明)
● 累加寄存器ACC
● 通用寄存器。如AX、BX、CX、DX、SP
● 程序状态字寄存器PSW,保留各种状态信息如OF、SF等信息
● 移位器,对操作数或者运算结果进行移位运算
● 计数器,控制乘除运算的操作步数
● 控制器:整个系统的指挥中枢,负责执行指令
● 程序计数器PC
● 指令寄存器,用于保存当前正在执行的那条指令
● 指令译码器,对操作码字段进行译码,想控制器提供特定的操作信号
● 存储器地址寄存器,存放要访问的主存单元的地址
● 存储器数据寄存器,存放要向主存写入的信息或者从主存读出的信息
● 时序系统,产生各种时序信号
● 微操作信号发生器,产生各种控制信号
3. 工作原理:根据指令操作码、指令的执行步骤(微命令序列)和条件信号来形成当前计算机各部件要用到的控制信号。
● 二、指令执行过程
1. 指令周期:CPU从主存中取出并执行一条指令的时间称为指令周期,指令周期常常用若干机器周期(也就是CPU周期)来表示,一个机器周期又包含若干时钟周期(也就是节拍、cpu时钟周期)。每个指令周期内的机器周期数可以不等,每个机器周期内的节拍数也可以不等。一个节拍中可
以完成多个“相容”的微操作。一个完整的指令周期包括取指、间址、执行和中断4个周期,这四个周期都有访存操作,取指访存是为了取出指令,间址访存是为了取出有效地址,执行访存是为了取操作数,中断访存是为了保存程序断点
● 取指周期,根据PC中的地址取出指令放入IR中,数据流如下:
● 间址周期,取出操作数的有效地址(以一次间址为例)放到MDR中,数据流如下:
● 执行周期,取出操作数并执行指令,无统一数据流向
● 中断周期,cpu在每条指令执行结束前,都要发出中断查询信号,若有中断请求则CPU进入中断响应阶段,也叫中断周期。在中断周期中CPU要把程序断点存入内存的堆栈中并进入中断服务程序,数据流如下:
2. 指令执行方案(如何安排指令的执行步骤)
● 单指令周期:所有指令都在固定的时钟周期内完成,指令之间串行执行
● 多指令周期:可选用不同个数的时钟周期来完成不同指令的执行,指令之间串行执行
● 流水线方案:指令之间并行执行
3. CPU会根据四个触发器的内容哪个置1来判断当前处于哪个周期,FE取指,IND间址,EX执行,INT中断
● 三、数据通路的功能和基本结构
1. 概念:数据在功能部件之间传送的路径称为数据通路,描述了信息从什么地方开始,中间经过了哪些部件,最后到了哪里,数据通路由控制部件控制
2. 功能:实现CPU内部的运算器与寄存器及寄存器之间的数据交换
3. 基本结构
● CPU内部单总线方式:将所有寄存器的输入端和输出端都连接到一条公共通路上,这种方式结构简单,但容易发生数据冲突
● CPU内部三总线方式:将所有寄存器的输入端和输出端都连接到多条公共线路上
● 专用数据通路方式:根据指令执行过程中的数据和地址的流动方向安排连接线路,避免使用共享的总线,这种方式性能较高,但硬件量大
4. CPU的数据传送
● 寄存器之间的数据传送可以通过CPU内部总线完成,如:PC—>Bus,Bus—>MAR
● 主存与CPU之间的数据传送也需要借助CPU内部总线
● 执行算术或逻辑操作时,由于ALU本身没有内部存储功能的组合电路,因此两个操作数必须在ALU的两个输入端同时有效,图中的暂存器Y就用来保存先经过总线输入的操作数,Y的内容在ALU的左输入端始终有效
● 四、控制器的功能和工作原理
1. 结构
2. 功能
● 从主存中取出一条指令,并指出下一条指令在主存中的位置
● 对指令进行译码或测试,产生相应的操作控制信号,以便启动规定的动作
● 指挥并控制CPU、主存、输入和输出设备之间的数据流动方向
3. 根据控制器产生微操作控制信号的方式的不同,可以分为硬布线控制器和微程序控制器
● 硬布线控制器(组合逻辑控制器):由复杂的逻辑门电路和触发器组成。指令越多,设计和实现就越复杂,因此一般用于RISC
● 工作原理:控制器根据指令操作码,目前的机器周期,节拍信号,机器状态条件即可确定现在这个节拍下应该发出哪些命令,每个输出的控制信号都对应着一个微命令(微操作)
● 微程序控制器
● 基本概念:将每条机器指令编写成一个微程序存放在一个控制存储器CM(ROM)中,每个微程序包含若干微指令,每条微指令对应 一个或几个微操作命令。
● 微命令:控制部件向执行部件发出的各种控制命令,是构成控制序列的最小单位
● 微操作:计算机中最基本,不可再分割的操作。微命令和微操作是一一对应的,微命令是微操作的控制信号,微操作是微命令的执行过程
● 微指令:若干微命令的集合
● 微周期:从控制存储器中读取微指令并执行相应微操作的时间
● 微程序:微指令的有序集合,一条指令的功能由一段微程序实现
● 组成和工作过程
● 通常一条机器指令对应一个微程序,任何一条机器指令的取值令操作都是相同的,所以可以在CM中只存一份。若指令系统中有n中机器指令,那么控制存储器中的微程序数至少是n+1
● 微指令的编码方式
● 直接编码:在微指令的操作控制字段中,每一位代表一个微命令,这种方式无需进行译码,执行速度快,操作并行性好,但是字长过长
● 字段直接编码方式:将微指令的微命令字段分成若干小字段,把互斥性微命令组合在同一字段中,把相容性微命令组合在不同字段中,每个字段独立编码,一般每个字段还要留出一个状态来表示本字段不发出任何微命令。这种方式的优点是可以缩短微指令字长,但是需要译码,执行速度比直接编码慢
● 字段间接编码方式:一个字段的某些微命令由另一个字段中的某些微命令来解释,这种方法可以进一步缩短微指令字长,但是降低了微指令的并行控制能力
● 微指令的后继地址形成方式
● 直接由微指令的下地址字段给出
● 根据机器指令的操作码形成(生成第一条微指令的地址)
● 增量计数器法,即CMAR+1即可,适用于后继微指令地址连续的情况
● 微指令的格式
● 水平型微指令:一条水平型微指令可以定义并执行几种并行的基本操作,直接编码、字段直接编码等都属于水平型微指令。优点是微程序端,执行速度快;缺点是微指令长,编写微程序麻烦
● 垂直型微指令:类似于机器指令那样,设置一个微操作码字段,采用微操作码编译法,一条垂直型微指令只能定义并执行一种基本操作。优点是微指令短、简单,便于编写微程序;缺点是微程序长,工作效率低,执行速度慢
● 混合型微指令:在垂直型微指令的基础上增加一些不太复杂的并行操作
● 动态微程序设计:在微程序控制的计算机中,能根据用户要求改变微程序
● 毫微程序设计:将微指令进一步分解为毫微微指令,采用第二级CM
● 硬布线控制器和微程序控制器的特点与区别
● 五、异常和中断机制
1. 异常和中断的基本概念
● 异常:CPU内部产生的意外事件,与正在执行的指令有关
● 中断:CPU外部的设备向CPU发出的中断请求,与当前正在执行的指令无关
2. 异常和中断的分类
● 按异常发生的原因和返回方式分类
● 故障:执行指令时由该指令引起的异常事件,如除数为0、非法操作码等
● 自陷:通常是程序员人为的、实现预设好的异常事件,如断点
● 终止:执行指令的过程中发生的使计算机无法继续执行的硬件故障,它并不是由特定的指令引起的,而是随机发生的
● 异常还可分为硬故障中断(终止)和程序性异常(故障和自陷)
● 中断可分为可屏蔽中断和不可屏蔽中断
3. 异常和中断的检测与响应
● 检测:异常的检测由CPU自身完成,但是中断的检测CPU必须通过中断请求线获取中断源的信息才能知道哪个设备发生了何种中断
● 响应过程(异常和中断相同):关中断,保存断点和程序状态,识别异常和中断并转到相应的处理程序
● 六、指令流水线
1. 指令流水线的基本概念
● 一般认为将一条指令的执行过程分为取指IF、译码ID、执行EX、访存MEM、写回WB五个阶段
● 流水线方式并不能缩短单条指令的执行时间,但对于整个程序来说提高了执行效率
2. 指令流水线的基本实现
● 流水线每一个功能部件的后面都有一个流水寄存器,也叫锁存器,它的所用是保存本流水段的执行结果和前面传递过来的后面需要用的所有控制信号
3. (流水线无法正确执行后续指令而引起流水线阻塞)结构冒险、数据冒险和控制冒险的处理
● 结构冒险(资源冲突):多条指令在同一时刻争用同一资源(比如两个指令同时需要访问存储器)
● 后一个相关指令暂停一个周期
● 单独设置数据存储器和指令存储器(因为如果发生访问存储器冲突不可能是两个指令都是取数据或者取指令,只可能是一个取数一个取指)
● 数据冒险(数据冲突):下一条指令会用到当前指令计算出的结果,也就是下一条指令必须等当前指令执行完才能继续执行。分为写后读,读后写和写后写。当前面的指令需要写入某个寄存器(在WB阶段)而后面的指令需要读该寄存器(在ID阶段)时,若两个指令之间没有隔着三条指令就会发生数据冒险(仅对运算指令分析有效,不包括转移指令和load、store指令)
● 让相关指令等待,可分为硬件阻塞和软件插入“NOP”的方法
● 数据旁路技术,不等前一条指令把计算结果协会寄存器,直接获取前一条指令的ALU的计算结果即可
● 编译优化:通过编译器调整指令顺序
● 控制冒险(控制冲突):流水线由于遇到转移指令和其他改变PC值的指令而断流。注意无条件转移指令会在EX阶段(第三段)将PC值写回PC,而条件转移指令会在M阶段(第四段)将PC值写回PC,所以无条件转移指令call、ret需要停两个周期再去取下一个指令(也就是执行下一个指令的IF阶段)才不会发生控制冒险,条件转移指令jxxx需要停三个周期再去取下一个指令
● 对转移指令进行分支预测,分为静态预测和动态预测
● 预取转移成功和不成功两个控制流方向上的目标指令
● 加快和提前形成条件码(类似之前的多个全加器提前产生进位)
● 提高转移方向的猜准率
4. 流水线的性能指标
● 吞吐率TP:单位时间内完成的任务数量,TP=n/T_k,其中n是任务数量,Tk是k段流水线处理n个任务的总时间,在理想情况下T_k=(k+n-1)t,其中t是时钟周期,所以TP_{max}=1/t
● 加速比S:不使用流水线和使用流水线所用时间之比,S=T_0/T_k=knt/(k+n-1)t=kn/(k+n-1),所以最大加速比S=k
● 效率E:流水线的设备利用率,在时空图中,效率=n个任务占用时空图面积/n个任务所用时间与k个流水段所围成的时空去总面积=T_0/kT_k
5. 超标量和动态流水线的基本概念
● 超标量流水线技术(也叫动态多发射技术):配备多组功能部件,使得每个时钟周期内可以并发执行多条独立指令
● 超长指令字技术(也叫静态多发射技术):将多条能并行操作的指令组合成一条具有多个操作码字段的超长指令字,也要采用多个部件
● 超流水线技术:在一个时钟周期内再分段,进一步缩小两个流水段之间的时间差
● 七、多处理器基本概念
1. SISD、SIMD、MIMD、向量处理器的基本概念
● SISD:单指令流单数据流结构
● SIMD:单指令流多数据流结构,一个指令流同时对多个数据流进行处理,也就是数据并行技术
● MISD:多指令流单数据流结构,不存在
● MIMD:多指令流多数据流结构,同时执行多条指令处理多个数据
● 向量处理器:SIMD的变体,是一种能直接操作一维数组也就是向量的CPU
2. 硬件多线程的基本概念
● 为了减少线程切换的开销,可以为每个线程提供单独的硬件,这样线程的切换只需要激活选中的寄存器,而不用与存储器进行数据交换。硬件多线程可以分为细粒度多线程、粗粒度多线程和同时多线程
3. 多核处理器的基本概念
● 将多个处理单元集成到单个CPU中,每个处理单元称为一个核core,所有核一般是对称的,可以共享Cache也可以单独拥有Cache,一般共享存储器。这种方式可以实现真正意义上的并行
4. 共享内存多处理器(SMP)的基本概念
● 拥有共享的单一物理地址的多处理器就称为共享内存多处理器SMP,这些处理器通过存储器中的共享变量进行通信,一般要用锁的方式实现对共享变量的同步访问
● 小知识点
● CPU中的指令译码器仅仅只对指令的操作码字段进行译码然后决定需要输出哪些控制信号
● 要正确理解按边界对齐存储的意义,比如4GB的存储空间按字节编址,本应该是有32次方个字节对应32位的地址,但是对于一个32位的指令来说,它并不需要定位到每一个字节,只需要每次定位到4个字节即可,所以指令的地址只需要30位即可
● 通常把通过一次总线事务访问一次主存或I/O的时间定位一个机器周期
● 取指操作是控制器自动进行的,不需要得到相应的指令
● CPU中区分存储单元里面存放的是指令还是数据的部件是控制器而不是运算器
● 汇编程序员可见的寄存器有基址寄存器、PSW、程序计数器PC及通用寄存器组
● 内部异常处理后并不是都会返回到当前指令继续执行,比如终止,这种情况下程序会直接终止执行
● 自陷处理完后一般会返回到自陷指令的下一条指令执行,但当自陷指令时转移指令时,会返回到转移目标指令执行
● 数据通路不包括控制部件
(六) 第六章 总线
● 考纲内容
● 总线的基本概念
1. 概念:总线是一组能为多个部件分时共享的公共信息传送线路
2. 特点
● 分时:同一时刻只能有一个部件向总线发送信息
● 共享:总线上可以挂接多个部件,各个部件之间相互交换的信息都可以通过这组线路分时共享,多个部件可以同时从总线上接受相同的信息
3. 总线设备
● 主设备:获得总线控制权的设备
● 从设备:被主设备发访问的设备
4. 总线特性:机械特性、电器特性、功能特性、时间特性
5. 总线分类(按功能)
● 片内总线:芯片内部的总线,如CPU芯片内部寄存器和寄存器之间
● 系统总线:CPU、主存、I/O接口之间相互连接的总线,又分为数据总线、地址总线、控制总线
● I/O总线:连接低速的I/O设备
● 通信总线:计算机系统之间或者计算机系统和其他系统之间传送信息的总线
● 总线的组成及性能指标
1. 系统总线的结构
● 单总线结构:将CPU、主存、I/O设备都挂在一组总线上,优点是结构简单,成本低,易于接入新的设备,缺点是带宽低,负载重,不支持并发传送操作
● 双总线结构:总线分为主存总线和I/O总线,优点是将低速I/O设备从单总线上分离出来,实现了存储器总线和I/O总线的分离,支持突发传送(即传出一个地址,收到多个地址连续的数据)缺点是需要增加通道等硬件设备
● 三总线结构:总线分为主存总线、I/O总线和直接内存访问总线(DMA总线),优点是提高了I/O设备的性能,缺点是系统的工作效率较低,三个总线同时只能有一个在工作
2. 常见总线标准
● ISA,工业标准体系结构,并行总线,系统总线
● EISA,扩展的ISA
● VESA,视频电子标准协会,并行总线,局部总线
● PCI,外部设备互连,并行总线,局部总线
● AGP,加速图形接口,并行总线,局部总线
● PIC-E,取代PCI和AGP,串行局部总线
● RS-232C,串行通信总线
● USB,连接外部设备的I/O总线,通用串行总线
● PCMCIA,并行总线
● IDE,集成设备电路
● SCSI,小型计算机系统接口,并行设备总线
● SATA,串行高级技术附件
3. 总线性能标准
● 传输周期:一次总线操作的时间,通常由若干总线时钟周期组成
● 总线时钟周期:即机器的时钟周期
● 总线工作频率:总线周期的倒数
● 总线时钟频率:时钟周期的倒数
● 总线宽度:总线位宽,总线上同时能传输的数据位数
● 总线带宽:总线的最大数据传输率,即单位时间内总线上最多可传输数据的位数,总线带宽=总线宽度*总线频率
● 总线复用:指一种信号线在不同的时间传输不同的信息,因此可以用较少的线传输更多的信息
● 信号线数:地址总线、数据总线和控制总线的总和
● 总线事务和定时
1. 总线事务:从请求总线到完成总线使用的操作序列称为总线事务
● 请求阶段:CPU或者DMA发出总线传输请求,并获得总线控制权
● 仲裁阶段:总线总裁机构决定将下一个传输周期的总线使用权授予某个申请者
● 寻址阶段:主设备通过总线给出要访问的从设备地址
● 传输阶段:主模块和从模块进行数据交换
● 释放阶段:主模块的有关信息从系统总线上撤除,让出总线使用权
2. 总线定时:总线在双方交换数据的过程中需要时间上配合关系的控制
● 同步定时方式:由同一时钟控制数据传送
● 异步定时方式:采用应答方式,没有公共时钟标准
● 不互锁方式:主设备发出请求后,不必等到从设备的回答信号,经过一段时间便撤销请求信号
● 半互锁方式:主设备发出请求信号后,必须接到从设备的回答信号后才撤销请求信号;而从设备发出回答信号后不必等到主设备的请求信号撤回,经过一段时间后自动撤销回答信号
● 全互锁方式:主设备发出请求信号后,必须接到从设备的回答后才撤销请求,从设备发出回答信号后,必须等到主设备请求撤销后才撤销回答信号
● 小知识点
● 突发传送指的是靠一个地址就可以取出多个连续的数据
(七) 第七章 输入/输出系统
● 考纲内容
● 一、I/O接口(I/O控制器)
1. I/O接口的功能和基本结构
● 概念:I/O接口(I/O控制器是主机和外设之间的交互界面,通过接口可以实现主机和外设之间的信息交换)
● 功能
● 进行地址译码和设备选择
● 实现主机和外设的通信联络控制
● 实现数据缓冲
● 信号格式的转换
● 传送控制命令和状态信息
● 基本结构
● 要注意的是CPU对外设的控制命令是通过数据线而不是控制线传送的
2. I/O端口及其编址
● 概念:I/O端口是指接口电路中可以被CPU直接访问的寄存器
● CPU对数据端口能够进行读写操作,对状态端口只能进行读操作,对控制端口只能进行写操作
● 编址:要对端口进行编号后才能被CPU访问
● 统一编址:把I/O端口当作存储器的单元进行地址分配,RISC机器常用,用统一的访存指令就可以访问I/O端口,优点是不需要专门的输入/输出指令,方便灵活,缺点是内容容量变小,执行速度较慢
● 独立编制(I/O映射方式):I/O端口的地址空间和主存的地址空间是分离开来的,需要设置专门的I/O指令来访问I/O,优点是编程便于理解,缺点是输入/输出指令少,比较复杂
● 二、I/O方式
1. 程序查询方式
● 概念:CPU会通过读取外设接口的状态信息不断查询I/O设备是否准备就绪
● 特点:CPU一旦启动I/O就必须停止当前进程,CPU可能会出现“踏步”现象,CPU和I/O是串行工作的,一段时间内只能和一台外设交换信息,效率低
2. 程序中断方式
● 中断的基本概念:CPU现在程序中的某个时机启动外设,然后CPU继续执行当前程序,一旦外设完成数据传送的准备工作,就会向CPU 发出中断请求,此时CPU在一条指令执行完成后就停止正在执行的程序转去为外设服务
● 中断响应过程
● CPU在一定条件下(中断源有中断请求;CPU允许中断及开中断;一条指令执行完毕且没有更紧迫的任务)响应中断后,通过中断隐指令转去执行中断服务程序。
● 中断隐指令并不是一条指令,本质上是一系列的硬件自动操作
● 关中断:为了保存断点的过程中不被打扰,必须要先关中断,便于实现原子操作
● 保存断点:将原程序的断点(PC和PSW的内容)保存在栈或特定寄存器中,一般来说异常指令由于本身并没有执行成功,其断点是当前指令的位置,而中断的断点则是下一指令的位置
● 引出中断服务程序:通过硬件向量法或者软件查询法识别中断源,将对应的服务程序入口地址送入程序计数器PC
● 软件查询法:CPU会设置一个存放所有异常或者中断原因的寄存器,查询该表的时候按优先级顺序查询
● 硬件向量法:异常或中断处理程序的首地址称为中断向量,所有的中断向量都存在中断向量表中,每一个中断或者异常都会对应一个中断类型号,通过类型号就可以快速在中断向量表中找到对应的处理程序
● 中断处理过程
● 关中断
● 保存断点
● 中断服务程序寻址
● 保存现场和屏蔽字:现场信息由指令可以直接访问,所以通过软件方式保存,而断点的保存由硬件直接完成
● 开中断:允许更高级别的中断请求得到响应
● 执行中断服务程序
● 关中断:保证在恢复原程序时不受影响
● 恢复现场和屏蔽字
● 开中断,中断返回
●
● 多重中断和中断屏蔽的概念
● 中断响应优先级在硬件上是固定的,一般不会改动;但是中断处理优先级可以利用中断屏蔽技术动态调整。中断响应的判优通常是用硬件排队器实现的。一般来说,不可屏蔽中断>内部异常>可屏蔽中断;内部异常中,硬件故障>软件中断;DMA中断>I/O设备中断;在I/O传送中,高速/输入/实时设备>低速/输出/普通设备
● 多重中断:CPU暂停现行的中断服务程序,转去处理新的中断请求
● 中断屏蔽技术:为每个中断源设置一个屏蔽字寄存器,该寄存器的内容就是该中断源的屏蔽字,屏蔽字中的1越多,表示该中断的处理优先级越高,每个屏蔽字中至少有1个1(屏蔽自身)
3. DMA方式
● 概念:在外设和内存之间开辟一条“直接数据通道”,使得信息传送不必再经过CPU
● 特点
● 主存可以被CPU访问,也可以被外设访问
● 在数据块传送时,主存地址的确定、传送数据的计数等都由硬件电路直接实现
● 主存中要开辟缓冲区,及时供给和接受外设的数据
● CPu和外设并行工作
● DMA在开始传送前要通过程序进行预处理,结束后要通过中断方式进行后处理
● DMA控制器(DMA接口)的组成
● DMA传送方式
● 停止CPU访存
● 周期挪用(周期窃取):当I/O设备有DMA请求时,若CPU正在访存,则要等到存取周期结束后CPU才能将总线让出;若CPU和I/O同时请求访存,则CPU会放弃,由I/O设备挪用一个或几个存取周期,完成一个数据的传送后让出总线,是一种单字传送法。
● DMA与CPU交替访存:若CPU的工作周期比主存存取周期长,则可以将CPU的工作周期分成两个周期分别供DMA和CPU访存
● DMA传送过程
● 预处理:CPU测试I/O设备状态,给DMA控制器的有关寄存器置初值,设置传送方向,启动I/O设备,然后CPU继续执行原程序,当I/O设备准备就绪,就会想DMA控制器发送DMA请求,再由DMA控制器向CPU发送总线请求
● 数据传送:该过程完全由DMA(硬件)控制,传送单位可以是单字节也可以是数据块(通过循环实现)
● 后处理:DMA控制器向CPU发出中断请求,CPU执行中断服务程序,校验数据是否正确、测试传送过程中是否出错等
● DMA方式和中断方式的区别
● 中断方式需要保护和恢复现场,而DMA方式除了预处理和后处理其他时候不占用CPU资源
● 对中断请求的响应只能发生在每条指令的中断周期;而对DMA请求的响应可以发生在每个机器周期结束时(即在取指、间址、执行周期后均可)
● 中断传送过程需要CPU的干预;DMA方式不需要
● DMA请求优先级高于中断请求
● 中断方式可以处理异常事件;DMA方式只能用于I/O操作
● 中断方式靠程序传送;DMA 方式靠硬件传送
● 小知识点
1. 缺页属于内中断
2. 中断服务程序的最后一条指令应该是中断返回指令而不是无条件跳转指令,前者不仅要修改pc值,还要恢复寄存器的值
3. DMA请求是外设发出的,DMAC发出的是总线请求
4. 外部中断通常来自cpu和内存以外
版权声明:本文标题:408计算机组成原理笔记(超全) 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.freenas.com.cn/jishu/1703147122h439896.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论