第一章 计算机系统概述
一、计算机的发展
1.硬件的发展
(1)第一代:电子管时代
(2)第二代:晶体管时代
(3)第三代:中小规模集成电路时代
(4)第四代:大规模、超大规模集成电路时代
2.发展趋势:(1)更微型、多用途;(2)更巨型、超高速
二、计算机系统层次结构
1.计算机系统的基本组成 硬件+软件
2.计算机硬件的基本组成
输入设备+输出设备+存储器+运算器+控制器(冯·诺依曼计算机)
特点:
(1)指令和数据以同等地位存于存储器,可按地址寻访;
(2)指令和数据用二进制表示;
(3)指令由操作码和地址码组成;
(4)以运算器为中心;(现代计算机以存储器为核心;CPU=运算器+控制器)
(5)主存与辅存:主存储器(归为主机,手机内存)与辅助存储器(归为I/O设备,机械硬盘,固态硬盘)
3.主存储器的基本组成 存储体+MAR+MDR
存储体+存储地址寄存器(MAR)+存储数据寄存器(MDR)
4.运算器的基本组成 ACC+MQ+X+ALU
5.控制器的基本组成 CU+IR+PC
6.工作过程
7.软件
(1)系统软件:用来管理整个计算机系统
eg:操作系统、数据库管理系统、标准程序库、网络软件、语言处理程序、服务程序
(2)应用软件:按任务需要编制成的各种程序
eg:抖音、王者荣耀、QQ、微信
8.翻译程序
(1)汇编程序(汇编器):将汇编语言程序翻译成机器语言程序。
(2)编译程序(编译器):将高级语言翻译成机器语言或汇编语言。(只需翻译一次)
(3)解释程序(解释器):将源程序翻译机器指令并立即执行。(每次执行都要翻译)
三、计算机的性能指标
1.存储器容量:存储器中存储单元的总数目。总容量=存储单元个数×存储字长 bit
(2^MAR × MDR)eg.MAR为32位,MDR为8位 总容量=2^32 * 8 bit = 4GB
(1KB=1024B=2^10B 1MB=2^20B 1GB=2^30B,用来描述文件大小)
2.CPU性能指标
(1)主频与时钟周期:CPU内数字脉冲信号振荡的频率。
CPU主频=时钟周期的倒数 ( f=1/T ),单位:Hz
CPU时钟周期,单位:微秒,纳秒
(2)CPI:执行一条指令所需的时钟周期数
执行一条指令的耗时=CPI×CPU钟周期
(3)CPU执行时间 = CPU时钟周期数/主频 = (指令条数×CPI)/ 主频 = 时钟周期数×时钟周期
eg.某CPU主频为1000Hz,某程序包含100条指令,平均来看指令的CPI=3。则该程序在CPU上执行需要多久? 100*3*(1/1000) = 0.3s
(4)IPS:每秒执行多少条指令; IPS = 主频 / 平均CPI (KIPS,MIPS)
FLOPS:每秒执行多少次浮点运算; FLOPS = 程序中的浮点操作次数 / 程序执行时间(s)(KFLOPS MFLOPS GFLOPS TFLOPS)
此处的K、M、G、T为数量单位(大多用来描述频率、速率) K= 10^3,M=10^6,G=10^9,T=10^12
3.数据通路带宽:数据总线一次所能并行传送信息的位数(各硬件部件通过数据总线传输数据)
4.吞吐量:指系统在单位时间内处理请求的数量。
5.响应时间:表示发起一个有效请求到系统产生响应之间的等待时间。
第二章 数据的表示和运算
一、进制转换
1.进制表示
二进制: 1011B 十进制:165D 十六进制:165H 0x165
2.十进制转换为其他进制
(1)转换为二进制:整数部分取余法,小数部分乘基取整法(小数部分有可能无法精确转换)
(2)转换为其他进制:先转换为二进制,再通过二进制转换为其他进制
3.真值和机器数
真值:实际的带正负号的数值(人类习惯的样子)
机器数:把正负号数字化的数(存到机器里的样子)
二、BCD码
三、无符号整数的表示和运算
1.表示:(1)全部二进制位都是数值位,没有符号位。
(2)n比特无符号整数表示范围0~2^n-1,超出则溢出。
2.运算:(1)加法:从最低位开始,按位相加,并往更高位进位。
(2)减法:被减数不变,减数全部按位取反,末位+1,减法变加法。
四、带符号整数的表示和运算
1.带符号整数的表示:原码、补码、反码
(1)原码:符号位不参与运算,需设计复杂的硬件电路才能处理,成本高昂
(2)补码:用补码表示真值——符号位可以参与运算
(3)原码→反码→补码的转换
注:①原码和反码可以通过数值位取反相互转换;
②补码转换为反码:补码→原码→反码
③原码与补码相互转换(机算法:将数值位取反,末尾加一)手算法如下图
2.带符号整数的运算:
(1)补码加法运算:补码数值位不能解读为位权
(2)补码减法运算:将减法变加法(与无符号整数减法处理方法类似)
注:已知一个数的补码,求其负数的补码(手算法:可以从右往左找到第一个1,这个1左边的全部位按位取反)机算法如下图:
(3)各种码的基本特性(特别注意补码:范围为-128~127,最小的数与真值0的表示)
(4)移码:只能用于表示整数,表示范围与补码相同(-2^n~2^n-1)
3.定点小数的表示和运算
(1)定点小数的编码表示:原码、反码、补码()
原码:符号位与数值位用“点”隔开
相互转换方式与定点整数完全相同
(2)定点小数的运算:同样需要先转换为补码,方法与整数一致
(3)特性比较:位数扩展不一样,0向后扩展
五、奇偶校验码
奇校验码:整个校验码中1的个数为奇数
偶校验码:整个校验码中1的个数为偶数
六、电路的基本原理和加法器设计
1.逻辑运算
2.补码/无符号数加减运算器
(1)加法器原理
(2)补码加/减法运算方法(减法运算时:Sub赋予Cin值为1,Y经过非门即按位取反)
(3)溢出判断
情况一(上溢):正+正=负; 情况二(下溢):负+负=正
方法二:判断符号位的进位Cs,最高数值位的进位C1,Cs与C1不同时有溢出。
硬件判断:逻辑表达式 V=Cs⊕C1 (若V=0,无溢出;若V=1,有溢出)
异或逻辑:不同为1,相同为0
方法三:采用双符号位 正数符号位00,负数符号位11(相加后符号位两个数字不相同则有溢出)
硬件判断:同样用将得到的符号位进行异或运算
(4)如何解决溢出:符号扩展,将短数据扩展为长数据
整数在符号位与数值位之间扩展,定点小数在数值位后面扩展
3.标志位生成
OF:溢出标志 SF:符号标志 ZF:零标志 CF:进位/错位标志
七、定点数的移位运算
算数移位:左移一位相当于×基数,右移一位相当于÷基数
1.原码的算数移位
符号位不变,仅对数值进行移位;定点小数与定点整数算数移位相同
2.反码的算数移位
3.补码的算数移位
右移相当于÷2;左移相当于×2
4.逻辑移位
可以看作是无符号数的算数移位
逻辑右移:高位补0,低位舍弃
逻辑左移:低位补0,高位舍弃
5.循环移位
八、定点数的乘除运算
1.原码的乘法运算
(1)原码一位乘法(最后记住修改符号位)
当前位为1则加上被乘数,当前位为0则加0
(2)手算模拟
2.补码乘法运算
(1)补码一位乘法:进行n轮加法、移位,最后再多来一次加法(即符号位也参与到运算),每次加法可能+0、+[X]补、+[-X]补
注: 1)根据当前MQ中的最低位、辅助位来确定加什么;
①辅助位-MQ最低位=1时,ACC+[x]补;
②辅助位-MQ最低位=0时,ACC+0
③辅助位-MQ最低位=-1时,ACC+[-x]补;
2)每次移位是“补码的算数右移”(正数右移高位补0,负数右移高位补1);
3)符号位参与运算。
(2)手算模拟
3.原码的除法运算
(1)恢复余数法:先默认商1,如果出错则恢复余数
注:(1)根据余数正负判断商0还是商1;
(2)最后一步商余数为负,也需要恢复余数并改为商0;
(3)最终结果的余数需要×2^-n次方;
(4)记住最后有符号位的确定。
(2)手算模拟:
(3)加减交替法(不恢复余数法)
4.补码的除法运算
加减交替法(根据余数和除数是否同号判断商0还是商1,且最后结果的商,末位位置1)
总结:
九、浮点数的表示和运算
1.浮点数的表示
2.浮点数规格化
当浮点数的尾数超出存储空间时,需要进行规格化(要求尾数最高数值位必须是一个有效值)
规格化的特点:
补码规格化中尾数最高数值位必须和尾数符号位相反
3.IEEE 754标准
移码 = 阶码真值 + 偏移量
注:(1)当阶码E全为0,尾数M不全为0时,表示非规格化小数 ±(0.xx...x)2×2^-126
(2)当阶码E全为0,尾数M全为0时,表示真值±0
(3)当阶码E全为1,尾数M全为0时,表示无穷大±∞
(4)当阶码E全为1,尾数M不全为0时,表示非数值"NaN"
4.浮点数的运算
eg.二进制浮点数加减运算(注意这里是补码浮点运算规则)
第三章 存储系统
一、存储器的基本概念
1.存储器的层次结构
越靠近上层的读写速度越快、容量越小、价格越高
2.存储器的分类
按存储介质分类:半导体存储器、磁表面存储器、光存储器
按存取方式分类:相联存储器(按内容查找)、(按地址查找)随机存储器、顺序存储器、直接存储器
按信息的可更改性:读写存储器、只读存储器(ROM-辅存)
按信息的可保存性:易失性存储器、非易失性存储器、破坏性读出存储器(如DRAM芯片)、非破坏性读出存储器(如SRAM芯片、磁盘)
3.存储器的性能指标
存储容量:存储字数×字长(2^MAR×MDR)
单位成本:每位价格=总成本/总容量
存储速度:数据传输率=数据的宽度/存储周期(数据宽度即存储字长;存储周期=存取时间+存取周期)
主存带宽(Bm):又称为数据传输率,表示每秒从主存进出信息的最大数量,单位为:字/秒、
字节/秒(B/s) 或 位/秒(b/s)
二、主存储器的基本组成(RAM+ROM)
1.存储器芯片的基本组成
基本元件:MOS管(作为通电"开关")+电容,存储电荷(即存储二进制0/1)
译码器:将地址信号转化为字选通线的高低电平
eg.某芯片容量为64K×16位,则地址线有16根,数据线有16根,片选线1根,读写控制线至少1根(读写分开则为两根),另外还有供电引脚线和接地引脚线
2.寻址
3.DRAM和SRAM
RAM:(存放指令数据)易失性的,支持随机存取
DRAM芯片:使用栅极电容存储信息,用于主存(即标题1中的图中结构)
SRAM芯片:使用双稳态触发器存储信息,用于Cache,速度更快
对比图
DRAM的刷新
DRAM的地址线复用技术:将行、列地址通过地址线分两次送,可使地址线更少,芯片引脚更少
注:(1)在计算DRAM下的引脚数量时,地址引脚需要减半的;
(2)刷新由存储器独立完成,不需要CPU控制。
4.只读存储器ROM(辅存)
ROM是非易失性的,且很多ROM也具有随机存取的特性
MROM-掩模式只读(不可重写); PROM-可编程只读(可写一次);
EPROM-可擦除编程只读(可多次重写);
UVEPROM-紫外线擦除所有信息; EEPROM-电擦除特定的字;
Flash Memory-闪存(U盘、SD卡)(需要先擦除再写入,写比读慢);
SSD-固态硬盘:控制单元+存储单元(Flash芯片)可进行多次快速擦除重写
主板上的BIOS芯片:存储“自举装入程序”,负责引导装入操作系统
5.双口RAM&多模块存储器
注:存取周期T
(1)双口RAM
(2)多体并行存储器
下图中,m模块数 即M0,M1,M2,M3共计四块,当m=T/r时流水线效率最佳。
6.主存储器与CPU的连接
(1)单块存储芯片与CPU连接
(2)存储器芯片的输入输出信号
(3)增加主存的存储字数
①位扩展:位(即数据线)进行扩展
②字扩展:
线选法:将专门的地址线作为片选信号来选中某一块芯;若CPU有n条多余的地址线,则有n个片选信号。
译码器片选法:通过译码器,n条多余的地址线可以有2^n个片选信号。
eg.38译码器,即3条地址线,通过译码器可以有8条输出,下图中高电平1连接的CS有效
③字位同时扩展法:
三、外部存储器
1.外存储器
(1)计算机的外存储器又称为辅助存储器,目前主要使用磁表面存储器。
(2)优缺点:即可作为输入设备,也可以作为输出设备
2.磁盘设备的组成
磁盘驱动器:核心部件是磁头组件和盘片组件
磁盘控制器:是硬盘存储器和主机的接口,主流的标准有IDE、SCSI、SATA等
3.性能指标
(1)磁盘容量 (2)记录密度:越往外密度越小,每条磁道记录信息量相同
(3)平均存取时间
(4)数据传输率:磁盘存储器在单位时间内向主机传送数据的字节数,称为数据传输率。
假设磁盘转数r(转/秒),每条磁道容量为N个字节,则数据传输率为Dr=rN
3.磁盘地址与硬盘工作过程
4.磁盘阵列
RAID0:
RAID1:
5.SSD固态硬盘
四、Cache高速缓冲存储器(重点)
1.引入Cache原因
在现在的计算机中,从主存中取到数据,处理器需要花费上百个时钟周期。如果没有cache,那么处理器在等待数据的大部分时间内将会停滞不动。
2.工作原理
采用局部性原理
空间局部性:现在使用的信息,很可能在最近的未来会使用与其相邻的信息;
时间局部性:现在使用的信息,很可能在最近的未来也要用到。
3.性能分析
注:Cache中的一个块也称为行
4.Cache和主存的映射方式
即如何区分Cache与主存的数据块对应关系(三种方式)
(1)全相联映射(主存块可放在Cache任意位置)
(2)直接映射(主存块只能放在特定位置)
主存对应的Cache块号 = 主存块号 % Cache总块数
注:1)主存块号最后三位地址就是Cache中的块号,所以将其余位作为标记即可;
2)若Cache总块数为2^n,则主存块号末尾n位直接对应Cache块号。
(3)组相联映射(Cache块分为若干组,每个主存块可放到特定分组中的任意位置)
主存对应的Cache组号 = 主存块号 % 分组数;
注:1)主存块号最后两位地址对应Cache的组号,将其余位作为标记即可;
2)一个组内有n个块,就称为n路相联映射。
(4)总结对比
全相联 | 直接 | 组相联 | |
---|---|---|---|
特点 | 任意位置 | 特定位置 | 特定分组中的任意位置 |
主存地址结构 | 标记+块内地址 | 标记+行号+块内地址 | 标记+组号+块内地址 |
优点 | Cache存储空间利用充分 | 对任意地址,对比一个标记,速度最快 | 综合效果好 |
缺点 | 可能对比所有行的标记,速度慢 | Cache利用不充分,命中率低 |
5.Cache替换算法(重点)
提要:全相联映射—Cache满了,需要在全局中选择替换哪一块;
直接映射—对应位置非空,则直接替换;(无需考虑替换算法)
组相联映射—分组内满了才需要替换,需要在分组内选择替换哪一块。
(1)随机算法(RAND)
原理:若Cache满了,则随机选择替换一块。
缺点:虽然实现简单,但命中率低,实际效果不稳定。
(2)先进先出算法(FIFO)
原理:若Cache满了,则替换最先被调入Cache的块。
缺点:未考虑局部性原理,最先被调入Cache的块可能是被频繁访问的。
(3)近期最少使用(LRU)
原理:为每一个Cache块设置一个“计数器”,用于记录每个Cache块已经有多久没有被访问了。当Cache满后,替换”计数器“值最大的。
特点:
①Cache块的总数= ,则计数器的位数只需要n位,且Cache装满后所有计数器的值一定不重复。
②基于局部性原理,近期被访问过的主存块,未来很可能仍会被访问,LRU算法实际运行效果优秀,Cache命中率高。
③若频繁访问的主存块数量>Cache行的数量,则有可能发生"抖动"(即频繁的换入换出现象—刚被替换的块很快又被访问)。
(4)最近不常使用(LFU)
原理:为每一个Cache块设置一个“计数器”,用于记录每个Cache块被访问过几次,当Cache满后,替换”计数器“值最小的(访问次数最少的)。
缺点:曾经被经常访问的主存块在未来不一定会用到。并没有很好地遵循局部性原理,因此实际运行效果不如LRU。
6.Cache写策略
作用:CPU修改Cache中数据副本,如何确保主存中数据母本的一致性
(1)写命中(在Cache中写入)
①写回法:当CPU对Cache写命中时,只修改Cache的内容,而不立即写入主存,只有当此块被换出时才写回主存。减少了访存次数,但存在数据不一致的隐患。
通过“脏位”判断块是否被修改,只换出被修改的块。
②全写法:当CPU对Cache写命中时,必须把数据同时写入Cache和主存,一般使用写缓冲。CPU写的速度很快,但写操作频繁时,可能会因写缓冲饱和而发生阻塞。
(2)写不命中
①写分配法:当CPU对Cache不命中时,把主存中的块调入Cache,在Cache中修改。通常搭配写回法使用,改完后要被换出,才在主存中修改。
②非写分配法:当CPU对Cache写不命中时,只写入主存,不调入Cache,搭配全写法使用。
五、虚拟存储器
定义:在操作系统的管理下,只把当前需要的部分数据调入主存,暂不需要的部分留在辅存中。在用户看来,似乎获得了一个超大的主存。
1.页式虚拟存储器(使用页表,每行称作页表项)
逻辑地址=逻辑页号+页内地址(虚地址=虚页号+页内地址)
物理地址=主存块号+页内地址(实地址=实页号+页内地址)
一个程序(进程)在逻辑上被分为若干个大小相等的”页面“,”页面“大小与”块“的大小相同。每个页面可以离散的存放在不同的主存块中。
引入快表:相当于存放慢表的副本,是在地址变换中起到加速的作用;
若快表中查询不到(未命中),则会去页表(慢表)中查找,并将相应数据放入快表中。
2.段式虚拟存储
按照功能模块拆分出不同大小的模块。
虚拟地址=段号+段内地址
3.段页式虚拟存储
把程序按逻辑结构分段,每段在分固定大小的页,主存空间也划分为大小相等的页,每个程序对应一个段表,每段对应一个页表。
虚拟地址=段号+段内地址+页内地址
第四章 指令系统
一、指令格式
1.指令概念
又称机器指令,是指示计算机执行某种操作的命令,是计算机运行的最小功能单位。
一条指令就是机器语言的一个语句,一条指令通常要包括操作码和地址码两部分:操作码主要指明用户干什么,地址码主要指明对谁操作。。
一台计算机的所有指令集合构成该机的指令系统,也称为指令集。
2.指令分类
(1)零地址指令:不需要操作数,如空操作、停机、关中断等指令。
(2)一地址指令:
①只需要单操作数,如加1,减1,取反,求补,完成一条指令需要3次访存:取指→读→写。
②需要两个操作数,但其中一个隐含在某个寄存器中,需要两次访存:取和读。
(3)二地址指令:常用于需要两个操作数的算术运算、逻辑运算相关指令。
完成一条指令需要访存四次,分别为取指→读第一个操作数→读第二个操作数→写回第一个操作数。
(4)三地址指令:常用于两个操作数的算术运算、逻辑运算,结果放在第三个地址中。
完成一条指令需要访存四次,分别为取指→读第一个操作数→读第二个操作数→写到第三个操作数。
(5)四地址指令:在三地址指令基础上,执行指令后,将PC的值修改为第四个操作数所指地址
注:若指令长度不变,地址码数量越多,寻址能力就越差
按指令长度分类
(1)半长指令:是机器指令长度一半
(2)单字长指令:与机器指令长度一样
(3)双字长指令:是机器指令长度两倍
定长指令字结构:指令系统中所有指令的长度相等;
变长指令字结构:指令系统中各种指令的长度不等。
按操作码的长度分类
(1)定长操作码:指令系统中所有指令的操作码长度相同;
(2)可变长操作码:指令系统中各指令的操作码长度可变。
按操作类型分类
3.扩展操作码指令格式
指令是定长的,但是操作码的长度可变。
通常情况下,使用频率高的指令分配短的操作码;而使用频率低的指令分配长的操作码,减少指令译码和分析的时间。
二、指令寻址
1.指令寻址(由PC指出)
(1)顺序寻址
PC+”1“,这里的1指指令字长,每次取值结束后PC会+1
(2)跳跃寻址
执行转移类指令导致的PC值改变
每一条指令的执行都分为“取指令”、“执行指令”两个阶段
2.数据寻址
定义:确定本条指令的地址码指明的真实地址。
(1)直接寻址:操作数的真实地址,访存次数为一次(指令执行期间)。
(2)间接寻址:操作数地址的地址。