第一章 计算机系统概述
1.1 计算机基本概念
计算机按照指令和数据流的分类:
(1)单指令单数据流:SISD,传统冯诺依曼体系
(2)单指令多数据流:SIMD,
(3)多指令单数据流:这种计算机实际上不存在
(3)多指令多数据流:MIMD,
软硬件逻辑上等效:
如果一个功能,既能用软件实现,又能用硬件实现,则称其为软硬件逻辑等效
高级语言-类自然语言 -> 虚拟机器M4
汇编语言-符号语言 -> 虚拟机器M3
----------------------------------
操作系统 - 虚拟机M2
(一开始计算机并没有设计这一层,后来为了把每次编程都需要用到的文件管理,内存管理等抽取出来而形成)
----------------------------------
机器语言-二进制 -> 实际机器M1
微指令系统 -> 微程序机器M0
【注】一条机器指令就是一条微程序,这条微程序是由多条微指令构成的,每个微指令发送一个微命令进行一个微操作让计算机前行。
计算机硬件基本组成:冯诺依曼机器
(1)运算器,控制器,存储器,输入输出设备
(2)采用存储程序的方式执行,数据用二进制形式表示
(3)指令由操作码和地址码组成
(4)指令在存储器中按照执行顺序存放,由PC致命要执行的指令的存储单元。一般为按顺序递增
(5)冯诺依曼机以运算器为核心,而现代机器以存储器为核心(总线结构能看出来)
CPU:运算器ALU+控制器CU
主机:CPU+主存
硬件:外存
IO设备:输入输出设备
1.2 冯诺依曼结构中的5大部件
运算器
运算器的长度x表明,一次最多可以对2个x位的数据进行操作
存储器
(1)存储器由多个小房间组成,一个小房间存储8bit数据,也就是1byte
(2)210210差生一个单位递进
(3)MAR:存储地址的寄存器
MDR:存储数据的寄存器
(4)MAR的位数和MDR的位数可以算出整个主存的大小。
MAR的位数给出了主存中有几个小房间,而MDR的位数给出了每个小房间的大小是多少。eg:MAR10位,MDR8位,则主存总共210∗8bit210∗8bit 3. 控制器
(1)任务:按照一定顺序逐条取指令,对指令译码,然后执行指令的操作
(2)控制器在一个取值周期到来后从内存读取信息流(指令流),流向执行器
(3)执行器再周期的从内存中读取信息流(数据流),流向运算器
计算机的全过程
(1)输入程序和数据
(2)程序首地址放到pc
(3)启动应用程序
(4)把PC寄存器的值放到MAR寄存器中
(5)按照MAR的地址从主存取得数据放到MDR
(6)此时取得的数据是指令,所以再把MDR的数据放到IR(指令寄存器)
(7)分析指令OP(IR):分解开操作数和操作码,把IR的操作码放到CU(控制码)
(9)执行指令:把IR的操作数(需要操作的数的地址)部分拿出来放到mar,按照mar的地址去主存取数放到MDR,再把MDR的数据放到ACC(ALU中的累加器)
(10)最后执行PC+1放到PC
(11)打印结果
(12)卸载程序
1.3 计算机性能指标
机器字长:参与运算的数据的基本位数。也是加法器,寄存器的位数
数据总线一次传输的数据位数称作数据同路的宽度
吞吐量:指的是系统在单位时间内处理的请求数量
响应时间:系统对请求做出响应的时间=CPU时间+等待时间
1)CPU时间为运行程序所花的时间
2)等待时间:用于磁盘访问,存储器访问,IO操作,操作系统的开销时间
CPU主频又称时间频率,表示数字脉冲信号振荡的频率。单位是时钟周期/s
主频的倒数就是时钟周期
CPI是每条指令执行时所需的时钟周期数。CPI往往使一个平局数,使用概率论算出来的概率和
IPC是每个时钟周期执行的指令数,和CPI成倒数关系
CRC校验
(1)在硬盘和主机进行数据交换时校验
(2)解决的问题:
a)数据位是n位要增加多少位的校验位呢?校验位个数和数据位个数无关
b)通讯双方有一个约定:生成多项式(k+1位),k是校验位的位数
c)由数据位和生成多项式产生CRC编码
(3)数据位和生成多项式是已知的,要产生CRC编码,只有校验位不知道。产生校验位的方法就是模二计算
(4)模二计算:没有进位也没有借位的计算(有加减乘除的模二计算),模二加减法运算相当于异或操作,相同的数相加为0,不同的数相加为1
(5)校验码就是用模二除法计算得来
(6)如何生成CRC码
(1)设数据位m(x)为100占3位,约定生成多项式g(x)100占3位
(2)则校验位占2位,就是说模二除法的余数占2位
(3)用数据位m(x)除以生成多项式g(x)得到余数r(x)
(4)过程:因为余数占2位,所以把数据位向左移动2位。m(x)x^k,即数据位编程10000,
接着,用100000模二除以101,得到商101,余数01,即r(x)=01,得到CRC编码为m(x)x^k + r(x),即最终的CRC校验码为10000+01=10001,所以发送的10001比特位在接收端除以生成多项式的余数为0,表示传输没错 。
(5)公式上的推导:
m(x)∗xkg(x)=Q(x),r(x)m(x)∗xkg(x)=Q(x),r(x) //Q(x)是商,r(x)是余数
所以m(x)∗xk=g(x)∗Q(x)+r(x)m(x)∗xk=g(x)∗Q(x)+r(x)
而CRC码:$m(x)x^k + r(x) = g(x)Q(x) + r(x) + r(x) $
/** 因为r(x)和r(x)是模二加运算,所以相加后为0,消去了r(x) **/
最终CRC码变成了g(x)*Q(x),到对方当校验的时候,CRC码除以g(x)就不会有余数
(6)CRC的检错:所有位的都能知道是哪一位出错,也只能知道一位
eg:设数据位m(x)=1100,生成多项式G(x)为1011,求产生的CRC码
(a)生成多项式1011,是4位,所以余数位(产生的校验位)为3位,
(b)数据位左移三位,变成1100000,模二除1011,得到商1110,余数010
(c)CRC码:1100010
(7)纠错:
设CRC码的第7位传输出错,则CRC变成1100001。 此时,除以生成多项式得到余数001。
设CRC码的第6位传输出错,则CRC变成1100000。 此时,除以生成多项式得到余数010。
而这个010,恰恰是第7位传输出错后的余数001,后面补一位0后除以1011的
(a)反过来想,CRC的纠错功能,要让每一位传输出错后,除以多项式的余数都不同,所以如果数据为4位,余数的位数要满足4+n+1<2^n,此时n=3(4+n后面还要加1是因为1代表没有出错的情况)。所以生成多项式要有4位
(b)余数;如果001补两个0,的道德余数就是第5位出错的余数,循环的意义在与此:在计算出错位数除以生成多项式产生的余数时,可以先计算一个最低位出错后产生的余数,之后比他高一位的位传输错误产生的余数就可以用循环补0除以多项式的方法计算。所以g(x)不好选,要构成这种循环。
(c)根据这种循环计算出错位产生的余数方法,就行成了一个出错位对应产生余数的表。有了这个表,接收端计算后发现传输的数据有余数时,就能知道是哪一位出错了,也就有了纠错的功能。
(d)发现对应位出错,就把该位置的数据取反。电路实现上,不能在每一位数据加上一个非门,这样硬件成本太高。而是采用,只有一个非门,改变数据的时候,只需把数据循环移位,将出错的位置移到第一位,非门改变第一位数据后,再次循环移位成原来的顺序
(8)生成多项式的产生要满足检错纠错的功能
第三章 存储器的层次结构
3.1 存储器分类
按存储介质分类
(1)半导体存储器:
TTL,MOS,SSD。
易失
(2)磁表面存储器:
磁头,载磁体
非易失
(3)磁芯存储器:
硬磁材料,环状元件
非易失
(4)光盘存储器:
激光,慈光
非易失
按存取方式
(1)存取时间与物理地址无关 (随机存取)
类比于数据结构中的线性表数组(取数组某个元素的时间和物理地址无关,只和index有关)
(a)随机存储器:程序执行过程中可读可写
(b)只读存储器:程序执行过程中只读
(2)存取时间与物理地址有关(串行访问)
类比于数据结构中的链表
(a)顺序存取存储器:磁带
(b)直接存取存储器:磁盘(根据物理地址,直接移动磁头)
按在计算机中的作用分类
(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)辅存
磁盘,磁带,光盘
3.2 存储器的存储结构
存储结构综述
(1)cpu只能和主存,cache进行数据交互,而不能直接获得辅存的数据
(2)辅存的数据只能调入主存,不能直接进入缓存中。
(3)辅存到主存的映射是由OS操作系统管理的。但是主存和辅存之间的一个映射关系被放到TLB中,TLB在cache中。
(4)虚拟存储中的页表,段表,段页表被放到了主存中。cpu通过页表访问辅存时,发现缺页中断,就会先暂停程序的执行,先把数据调到内存
二. cache的写方式
写通(Write through)
cpu在更新cache的内容时,会立刻更新对应的内存的值
写直通要同时写主存和cache,造成速度降低
写回(Write Back),line增加dirty
i. 在cache line的内容需要被置换时,先将修改过的值写会内存,再置换成新的line值
ii. 如何知道line被修改过呢,需要在line中增加一个dirty标志位,dirty为1,表示内存的内容被修改过,置换时需要写回内存
iii.LiP缓存程序,程序不会被修改,所以L1P没有dirty标志,而L1D缓存数据会被更改,所以有dirty标志位
image_1atae6ccsve8dqedqt1epb17ifm.png-6.3kB
三. cache一致性
多核cpu下的cache一致性问题
多核处理器中运行着不同的线程,当1个核心中的1个线程使修改一个内存地址的数据时,由于cache的写回策略,导致该核心中cache line的数据还没写回到对应内存。当另一个核心的进程也需要操作这个内存地址的数据时,从内存地址中读取的数据就是旧值。
cache一致性协议的2个硬件操作
(1)Write Invalidation:置无效
当一个核心的cache line更新了数据时,如果发现其他核心的cache line也存在对应内存地址数据的拷贝,则把其他核心的cache line的valid标志位置为无效
(2)Write Update:数据更新
当一个核心的cache line更新了数据时,如果发现其他核心的cache line也存在对应内存地址数据的拷贝,则更新其他核心的cache数据
Write Update设计复杂,会产生大量的数据更新操作,通常使用Write Invalidation
cache一致性协议(Write Invalidation的实现:MESI)
(1)MESI协议包含4种状态
M:modify,该cache line数据有效,被更新过,和内存中不一致,数据只存在本cache中
E:Exlusive,该cache line数据有效,且和内存中一致,数据只存在本cache中
S:shared,该cache line数据有效,数据和内存中一致,数据存在多个核心的cache line中
I:invalid,此cache line数据无效
(2)cache snoop(窥探)
MESI协议中,每个core的cache控制器不仅可以知道自己cache的读写情况,同时也窥探其它core的cache的读写操作。每个cache line的数据状态在本core和其它core的读写状态之间进行变换。
(3)MESI的读写行为
i. Local Read:本core读本cache
ii. Local Write:本core写本cache
iii. Remote Read:其它core读其它cache
V. Remote Write:其它core写其它cache
(4)目录式的一致性协议
i. MESI协议需要snoop窥探,电路实现简单,但是cache line的沟通成本很高
ii. 有一种集中管理的目录式协议,将cache共享信息集中在一起,只有共享的cache line才会交互数据,减少沟通成本
3.7 虚拟存储器
一. 页式虚拟存储
概念
(1)程序员在比实际主存大得多的逻辑地址空间中编写程序
(2)程序执行时,把当前需要的程序段和数据块掉入主存,其他暂不使用的放在磁盘上
(3)执行指令时,通过硬件将逻辑地址转化为物理地址。虚拟地址高位为虚页号,低位为页内偏移地址
(4)当程序发生数据访问或程序访问失效(缺页时),由操作系统把信息从磁盘调入主存中
分页
(1)基本思想:
内存被分成固定长度且长度较小的存储块(页框,实页,物理页)
每个进程也被划分为固定长度的程序块(页,虚页,逻辑页)
通过页表,实现逻辑地址想物理地址的转化
(2)逻辑地址
程序中指令所使用的地址(进程所在地址空间)
(3)物理地址
存放指令或数据的实际内存地址
“主存-磁盘”层次
(1)与“cache-主存”层次相比,页大小远比cache的行大小要大(windows中的页位4k)
(2)采用全相联映射方式:磁盘中的任意一个页能用射到内存中的任意一个页
因为缺页导致中断时,操作系统从磁盘拿数据通常要耗费几百万个时钟周期。增大页大小,可以减少缺页中断
(3)为什么让软件处理“缺页”
因为访问磁盘需要好粉几百万个时钟周期,硬件即使能立刻把地址打给磁盘,磁盘也不能立即响应
(4)为什么地址转换用硬件实现
硬件实现地址转换可以加快指令的执行速度
(5)为什么页写会策略采用write back
避免频繁的慢速磁盘访问
页表结构
页表的首地址放在基址寄存器。采用基址寻址方式
每个页表项前面有一个虚页号:从0开始递增的序号。页表项又分为几个结构:
(1)装入位:该页是否在内存中
(2)修改位:该也在内存中是否被修改
(3)替换控制位:用于clock算法
(4)其他
(5)实页号(8进制)
TLB
(1)一次磁盘引用需要访问几次主存?2次,一次查页表,一次查物理地址。于是,把经常查的页表放到cache中。这种在cache页表项组成的页表称为TLB(Translation Lookside Buffer)
(2)TLB的页表结构:tag + 主存中的页表项
当采用全相连映射时,tag为页表项前面的虚页号。需要把tag和虚页号一一比较
当采用组相联映射时,tag被分为tag+index,虚页号的高位为tag,虚页号的低位为index,做组内索引(属于组内第几行)
二. 段式虚拟存储
段式存储是根据程序逻辑,给程序分段。使得每段大小不同。这种虚拟地址划分方法适合程序设计
段式存储的虚拟地址由段号和段内偏移地址组成。段式虚拟存储器到物理地址的映射通过段表实现
段式虚拟存储会造成空页
三. 段页式虚拟存储
段页式虚拟存储,先把程序按照逻辑分成段,再把每段分成固定大小的页。
程序对主存的调入调出是按照页面进行的;但他有可以根据段实现共享和保护
缺点是段页式虚拟地址转换成物理地址需要查询2个表:段表和页表。段表找到相应页表的位置,页表找到想也页的位置
段页式细腻地址的结构可以为以下形式:
程序地址: 用户号(进程pid) | 段号 | 页号 | 页内偏移地址
指令的最基本格式
【操作码 | 地址码】
(1)操作码: 反应机器做什么操作
操作码的长度在RISC中固定,而在CISC中长度可变。CISC的长度可变是指利用指令的其他字段对操作码字段进行扩展
(2)一条指令至少需要至少包含以下几个信息
1. 操作码
2. 操作数地址
3. 操作结果的存储地址
4. 下一条指令的地址
指令的设计极为灵活,只要包含以上4点信息,就能构成一条指令,而不必在意其字段个数。
指令的操作码表示指令要完成的操作,指令的地址码描述指令操作的对象
指令类型
cpu要完成各种运算,需要3中类型的指令
(1)算数逻辑指令:移位,加减法
(2)控制指令:跳转指令
(3)数据传送指令:数据导入导出。load:数据从存储器到寄存器,store:方向相反
5.1 CPU的功能和结构
控制器的功能
(1)取指令
(2)分析指令
(3)执行指令,发出各种操作命令
(4)控制程序输入及结果输出
(5)总线管理
(6)处理异常和特殊请求
运算器的功能
实现算术运算和逻辑运算
CPU寄存器
(1)用户可见的寄存器
( a ) 存放操作数:可做某种寻址方式所需的专用寄存器
( b ) 数据寄存器:存放操作数(满足各种数据类型)。两个寄存器拼接可存放双字长的数据
( c ) 地址寄存器:存放地址,其位数应满足最大的地质范围。
( d ) 条件码寄存器:存放条件码,作为程序分支的依据。eg:正,负,0,溢出,进位
(2)控制和状态寄存器(用户不可见)
( a ) 控制寄存器:
PC -> MAR -> M -> MDR -> IR
控制CPU操作,其中除PC用户可见外,其他寄存器均不可见。
( b ) 状态寄存器:存放条件码和PSW寄存器
其中PSW寄存器即为程序状态寄存器,可以用来区分改程序处于用户态还是内核态。每个进程都有一个PSW状态字,1表示自身是内核态
一. 三种周期
指令周期:
(1)指令从取指,分析指令,到执行完成的全过程所需的全部时间。
(2)有时指令周期还包括间指周期(间接寻址访问主存)和中断周期(响应中断)
(3)执行完指令后才能进入中断周期,响应中断
机器周期:
(1)通常把一个指令周期划分为若干个机器周期,每个机器周期完成一个基本操作
(2)不同的指令包含不同个数的机器周期
(3)因为指令的而全部过程有多个步骤,取耗时最长的那个步骤作为机器周期
时钟周期
(1)一个机器周期内,要完成若干个微操作,每个微操作要耗费1个节拍,一个节拍就是一个时钟周期
剖析CU如何发送指令,这是计算机的核心)基本概念:
(1)微命令:控制部件向执行部件发出的各种控制命令。它是构成控制序列的最小单位
eg:打开或关闭控制们的电位信号,把某个寄存器的值打入脉冲等
(2)微操作:微命令的操作过程就是微操作
微命令和微操作是一一对应的
微操作是微命令的操作过程
微操作是执行部件中最基本的操作
(3)由于数据通路的结构关系,微操作分为相容和互斥的两种:
互斥的微操作:不能再同一个节拍中执行的微操作。可用编码表示
相容的微操作:能够同时在同一个节点并行执行的微操作。必须各站一位。eg:不相关的部件的微操作
(4)微指令:(并行微命令的集合)
把同一个CPU周期内并行执行的微操作放在控制信息里,存储在控制存储器里,称为一条微指令。
一条微指令分为两个部分:
- 操作控制字段:又称微操作码字段,用于产生哥哥微操作的控制信号
- 顺序控制字段:又称微地址码字段。用于产生下一条要执行的微指令地址。记作μmarμmar或cmarcmar(control)
- 【注】:微指令没有操作数,因为控制单元不用取操作数。而普通指令通过PC找到下条指令,而微指令在指令中给出下条指令的地址
(5)微程序
一系列微指令的有序集合就是微程序,一条机器指令对应一个微程序。
控制单元在拿到操作码后,开始查找内部对应这个操作码的微程序,按序执行这个微程序的每条微指令,每条微指令都在一个节拍下进行并行的微命令,于是执行了这条指令
6.1 总线的基本概念
总线:
(1)总线是连接各个部件的信息传输线
(2)总线是各个部件共享的传输介质
(3)总线上信息的传送分为串行和并行。(eg:usb串行,数据总线,地址总线并行传输)
(4)总线上的多个部件只能分时的向总线发送数据,但可以同时从总线上传输数据
总线结构
(1)面向CPU的双总线结构:CPU连接所有IO设备的IO总线 + CPU连接主存的数据总线
(2)单总线结构:一根总线把所有设备(CPU,主存,IO设备)全部连在一起
(3)以主存为中心的双总线结构:主存和CPU连接的存储总线 + 主存和系统总线连接(系统总线再连接所有设备)
总线分类
(1)片内总线:芯片内部的总线
(2)系统总线:计算机各部件之间的信息传输总线
(a)数据总线:双向,与机器字长,存储字长有关
(b)地址总线:单向,与存储地址,IO地址有关
(c)控制总线:有出有入。(入的为中断响应)
(3)通信总线:用于计算机系统之间的通信(控制仪表盘,移动通信等)
总显的特性和性能指标
(1)总线宽度:数据线的根数
(2)总线带宽:每秒传输的最大字节数(Mbps)
总线带宽 = 总线宽度 * 总线频率
总线仲裁 (总线的控制)
(1)总线的判优控制 (由哪个部件发数据)
主设备(模块):该模块对总线有控制权
从设备(模块):响应从主设备发送来的总线命令
总线判优控制:
集中式 :
链式查询:
计数器定时查询
独立请求方式