计算机组成与设计-笔记

计算机组成与设计1/2 笔记

计算机组成与设计1

概论

摩尔定律

集成电路芯片的集成度每18个月翻一番

诺尔曼计算机

诺尔曼计算机

特点:

  1. 将计算机要处理的问题用指令编成程序,并将程序存放在存储器中

  2. 在计算机工作的过程中,总是一条指令接一条指令地执行

  3. 计算机的指令、数据及其他信息均是用二进制编码来表示的

存储程序—为计算机连续自动地工作奠定了基础

程序控制—取出指令并执行

采用二进制

运算器(ALU):算术运算和逻辑运算

存储器:存放数据和程序

计算机层次结构

应用软件虚拟机 系统软件虚拟机 物理机

{应用语言} ->{高级语言->汇编语言}-> {操作系统->机器语言->微程序->硬件逻辑}

FLYNN费林法

I:指令 D:数据流 S:单 M:多

SISD、SIMD、MISD、MIMD

SISD的!

Flynn

IS:指令流——机器执行的指令序列,它由存储器(MM)流入控制单元(CU)

CS:控制流——指令流(IS)进入CU,由CU产生一系列的控制流(信号),在控制流的控制下完成指令的功能

DS:数据流——由指令流(IS)所使用的数据,包括输入数据、中间数据和结果。数据在处理单元(PU)中进行处理

计算机的性能指标

每秒钟执行指令的百万条数 MIPS=$\frac {指令条数}{执行时间10^6}=\frac{1}{CPI时钟周期数10^6}=\frac f {CPI10^6}$

每秒钟执行浮点数的百万次操作的数量 MFLOPS=$\frac {浮点操作数}{执行时间*10^6}$

Amdahl定律:$S_p$加速比=$\frac{改进前的系统总执行时间\space T_0}{改进后的系统总执行时间\space T_n}$

$f_e$可改进部分 总是小于或等于1 主要受这个的影响

可改进加速比$r_e$ 大于1

$T_n=T_0(1-f_e+\frac {f_e}{r_e})$

$S_p=\frac 1{(1-f_e)+\frac {f_e}{r_e}}$

多个部件可改进的时候:

$S_p=\frac 1{(1-\sum f_e)+\sum \frac {f_e}{r_e}}$

响应时间:计算机完成某一任务所耗费的全部时间

CPU事件:CPU工作时间(不包括I/O等待时间)

$CPU时间=总的时钟周期数时钟周期长度=总的时钟周期数/时钟频率=\sum \{ICCPI\}时钟周期长度=\sum \{ICCPI\}/时钟频率$

CPI平均时钟周期数 $CPI=总的时钟周期数/IC=\sum( CPI_i * \frac {IC_i}{IC})$

CPU影响性能因素:

CPU的时钟频率、完成某任务所需的指令条数、每条指令执行所需时钟周期数

程序执行时间=$\frac {\sum( CPI_i *IC_i)}{f(HZ)}$

计算机中的数据表示

定点整数

字长n位

表示范围:000……001~111111

编码数目:$2^n$

最小编码(变化单位):000……001(1)

最大编码:111……111($2^n-1$)

分辨率:000……001(1)

模MOD:1000……000($2^n$)

定点小数

表示范围:0.00……001~1.11111

编码数目:$2^n$

最小编码(变化单位):0.00……001($2^{-(n-1)}$)

最大编码:111……111($2-2^{-(n-1)}​$)

分辨率:0.00……001($2^{-(n-1)}$)

模MOD:10.00……000($2$)

浮点数

M尾数 R基数 E阶码

$F=M*R^E$

浮点数

规格化

符号位与第一数值位是不一致的话,就是规格化数,反之就不是规格化数

11.1xxx 00.0xxxx左规

10.xxx 01.xxxx 右规

尾数:补码,规格化

$2^{-1}~1-2^{-(m-1)}$

$-1~-(2^{-1}+2^{-(m-1)})$

阶码:移码

$-2^{l-1}~2^{l-1}-1$

所以:

最大正数:$(1-2^{-(m-1)})*2^{2^{l-1}-1}$

最小正数:$(2^{-1}*2^{(-2^{l-1})})$

最大负数:$-(2^{-1}+2^{-(m-1)})*2^{(-2^{l-1})}$

最小负数:$-1*2^{2^{l-1}-1}$

机器零附近不可表示的数是正(负)下溢,当作机器零来处理

两边不可表示的数是正(负)上溢,机器停止运算

IEEE754

原码表示的尾数,因此$b_0$一定是1,因此默认的1也被省去了,有效位增加了一位

原码

原码

优点:

  1. 表示简单、直观
  2. 机器数和真值间的相互转换很容易
     3. 乘除运算简单
    

缺点:

  1. 机器零不唯一
  2. 加减运算复杂

反码

反码

注意:反码的正数部分与原码的相同

表示范围和原码相同

补码

补码

注意:同样,正数部分还是不变

补码2

$[x+y]_补=[x]_补+[y]_补$

$[x-y]_补=[x]_补+[-y]_补=[x]_补+[[y]_补]_{求补}$

$[x]_补<—^{符号位和数值位}_{按位取反,加1}—>[-x]_补$

移码

移码

大小反映了真值的大小

补码的符号位取反即是移码了!!!!

校验码

奇偶校验码

水平奇偶校验码、垂直奇偶校验码、水平垂直奇偶校验码

纠错码

海明码

海明距离(数值不同的位置数目)

若对k个码位错误进行检测,则要求最小海明距离为k+1

若对k个错误进行检测和校正,则要求最小海明距离为2k+1

k位数据位,r位校验位时,发现并改正错误,须:

循环冗余校验码(CRC码)

有效信息M(x)

生成多项式G(x)【 k+1位】

如1011即为x^3+x^1+1

发送:M(x)后面补上k个零

接受:M(x)后面补上最后余数;如果最后新算出来的余数为0,则正确;否则错误。出错位是2^k-新的最后余数

例子:

G(x)=x^3+x+1

求1010110的编码字

【1001100100】

模2运算

加法、减法、乘法:按位运算,不考虑进位借位

除法:每求1位商,使部分余数减少1位;进商的规则是:余数首位为什么,商即为什么;当余数位数小于除数位数时,即为最后余数

运算方法与运算器

加减运算

溢出判断

只有同符号的数相加,相异符号数相减时,运算结果才有可能溢出。

  1. 双符号位(不一致则溢出)
  2. 进位判决法(符号位的进位和最高位的进位不一致时)
  3. 结果符号位和进位标志
  4. 运算前后的符号位
移码加减

$[x]_移±[y]_移=[x±y]_补$

浮点加减运算
  1. 对阶(小阶对大阶,即和大阶相同)【用补码】
  2. 尾数加(减)运算
  3. 规格化
  4. 舍入处理
    1. 截尾法
    2. 末尾恒置1法
    3. 0舍1入法

乘法运算

原码一位(符号位单独处理)

原码一位乘法

补码一位Booth法(带符号计算)【$A_{-1}$不在结果集】

补码一位乘法Booth

Booth

浮点乘法

规格化数,且一个为0则为0;否则,阶码相加(判断是否溢出),尾数相乘,规格化乘积的尾数(若需要,不管左规还是右规,均只需要一次即可)

除法运算

X/Y 必须满足|x|<|y|,|y|!=0,计算到与y同样的精确度或者除尽为止

原码除法运算
恢复余数法(符号位单独处理)

原码除法恢复余数法

加减交替法

加减交替法 原码除法

求余数的时候,如果最后的商为1的时候,是虚线之前的;若为0的时候,则再加上Y之后的虚线之前的!!!

加减交替法求余数

补码除法

若余数和除数同号,上商1,余数左移,减除数

若异号,上商0,余数左移,加除数

在除不尽的时候,通常可用商的最低位恒置1,进行修正保证精度

浮点除法

规格化数,且y为0,出错处理;x为0则为0;否则,阶码相减(判断是否溢出),尾数相除,规格化尾数(若需要,不管左规还是右规,均只需要一次即可)及舍入处理

总结

乘法,右移;除法,左移

乘法,先加减后移动;除法,先移动后加减

乘法,虚线从前面开始画,直到底;除法,虚线从后面开始画,直到余数位Y的位数

原码,不带符号计算;补码带符号计算;

结果均在DA中;

除法做之前,必须先判断两个初始条件呐!

由什么码计算的,结果就是什么码!

CPU

是由运算器、寄存器、内部总线和控制器构成

ALU(算术逻辑运算单元)

一个CPU周期内,某条总线上的数据必须是唯一的,且不能保留(至下一个CPU周期)

标志寄存器(状态寄存器)

用来保存ALU操作结果的某些状态

  • ZF:结果为零,置1
  • CF:有进位/借位,置1
  • OF:有溢出,置1
  • SF:【符号标志】为负数,置1
  • PF:【奇偶标志】“1”的个数为偶数,置1

指令系统与汇编语言

CISC & RISC

CISC 复杂指令

指令数多、寻址方式多、指令格式多

绝大数指令执行需要多个时钟周期

采用微程序控制

RISC 精简指令

$P=NCT$

P程序总执行时间

N 待执行的指令总条数

C CPU平均周期数/指令

S 每个CPU周期的时间

RISC的C👇 T👇 => N👆

CISC的N👇=> C👆T👆

性能比CISC高2~5倍

硬布线逻辑方式直接实现

指令格式

机器指令在计算机中是用二进制表示的

三地址指令格式

OP A1 A2 A3 (A1)OP(A2)=>A3

二地址指令格式

OP A1 A2 (A1)OP(A2)=>A1

一地址指令格式

OP A1 (AC)OP(A1)=>(AC)

零指令格式

OP 无需操作数,或者操作数默认的

多地址指令格式

影响因素

  • 内存大小与组织
  • CPU数据总线宽度
  • CPU内部寄存器的数量
  • 寻址方式
  • 指令数量
指令操作码扩展编码方式

比如,对于三地址的编码字段长度为4,那么其可以有$2^4$种,其中,若它用了L种,那么对于二地址编码来说,可以有$(2^4-L)*2^4$种,以此类推,因此对于每个字段都占4位的来说,零地址的指令条数有

注意:对于算中间那种列(不)等式的,应该有个向(上)下取整【看符号啦!!!】

哈夫曼编码Huffman

使用频率高的指令采用短操作码

平均操作码长度$l_a=log_2n$

缺点:

  • 操作码长度不规整,硬件译码困难
  • 地址码共同组成固定长的指令比较困难

扩展编码

寻址方式

偏移地址:也叫作有效地址EA

段地址:段内偏移地址称为逻辑地址

段寄存器的内容16+偏移地址称为*物理地址

一般低字节在前,高字节在后

  • 立即寻址 MOV AX, 2000H 【操作数在指令中】

  • 寄存器寻址 MOV DS, AX 【操作数在寄存器中】

  • 直接寻址 MOV AX, [2000H] 【操作数在偏移量+DS*10H的数据段区域中】

    这里读出的数据要读两个字节啊,且先读的是低字节的

  • 寄存器间接寻址 MOV AX, [SI] 【SI、DI、BX,操作数在数据段DS*10H+SI中】

    ​ MOV AX, [BP] 【BP,操作数在堆栈段SS*16+BP中】

    段超越:默认的段寄存器是可以缺省的,而段超越的前缀是不能缺省的

    ​ MOV AX, ES: [SI] 【操作数在附加段ES*16+SI中】

  • 寄存器相对寻址 MOV AX, DISP[SI] 【操作数在数据段DS*10H+SI+DISP中】

    ​ MOV AX, DISP[BP] 【BP,操作数在堆栈段SS*16+BP+DISP中】

  • 基址、变址寻址 MOV AX, [BX][SI] 【BX操作数在数据段DS*10H+BX+SI中】

    MOV AX, [BP][SI] 【BP,操作数在堆栈段SS*16+BP+SI中】

  • 基址、变址相对寻址 MOV AX, DISP[BX][SI] 【BX操作数在数据段DS*10H+BX+SI中】

    MOV AX, DISP[BP][SI] 【BP,操作数在堆栈段SS*16+BP+SI中】

  • 隐含寻址

总结

除寄存器寻址和立即寻址外,均是内存寻址mem,找到的都是操作数的地址,都有[]

相对寻址都有disp

指令系统

双操作数中必须有一个是r,除非源操作数是立即数

单操作数不允许是立即数

MOV 目的,源

目的操作数:mem【存储器】、r【通用寄存器】、SEG(除CS)【段寄存器】

源操作数:im【立即数】、mem、r、SEG(含CS)

目的操作数不能为立即数或CS、IP

内存单元之间不能进行数据直接传送

必须如下

1
2
MOV AX,[SI]
MOV [DI],AX

立即数不能直接传送到段寄存器中

必须如下

1
2
MOV DX,0100H
MOV DS,DX

段寄存器之间不能进行数据直接传送

必须如下

1
2
MOV DX,DS
MOV ES,DX
XCHG 目的 源

交换指令

这种交换能在通用寄存器与累加器之间、通用寄存器之间、通用寄存器与存储器之间进行。

LEA 目的 源

地址传送指令

1
2
3
; SI = 1000H,DS = 5000H,(51000H)=1234H
LEA BX,[SI] ;BX=1000H 相当于一个是直接等于地址&
MOV BX,[SI] ;BX=1234 一个取了它的内容*
堆栈指令
1
2
3
PUSH OPRD ;r、 mem、 SEG(含CS),以字为单位
POP OPRD ;r、 mem、 SEG(除CS),以字为单位
;所以 PUSH AL是错误的

PUSH

POP

加法指令
ADD OPRD1,OPRD2
ADC OPRD1,OPRD2

ADC 指令用于多字节运算

1
2
ADD AX,CX
ADC DX,BX
INC OPRD

INC 常用于在循环程序中修改地址指针和循环次数等

影响标志位AF、CF、OF、PF、SF、ZF(INC,不影响CF)

1
2
3
4
5
6
7
8
9
10
11
AF 辅助进位标志 运算过程中第三位有进位,置AF=1
CF 进位标志 最高有效位产生的进位值,置CF=1
OF 溢出标志 产生溢出,OF=1
PF 奇偶标志 当操作数中有偶数个1时,置PF=1
SF 符号标志 结果为负时,SF=1
ZF 零标志 结果=0,ZF=1
减法指令
SUB OPRD1,OPRD2
SBB OPRD1,OPRD2
DEC OPRD
NEG OPRD

取补指令

CMP OPRD1,OPRD2

比较指令

可能会发生溢出(需要分类讨论)

影响标志位AF、CF、OF、PF、SF、ZF(DEC,不影响CF)

乘法指令
MUL OPRD

被乘数隐含在AL中,乘积一定放在AX(或DX和AX连在一起构成的32位寄存器中)

IMUL OPRD

带符号数

除法指令

被除数隐含在AX(或DX+AX)中,商在AL,余数在AH中,(或商在AX中,余数在DX中)

DIV OPRD
IDIV OPRD
逻辑运算
NOT OPRD
AND OPRD1,OPRD2

自己和自己与,操作数不变,但是CF清零

OR OPRD1,OPRD2

自己和自己或,操作数不变,但是CF清零

XOR OPRD1,OPRD2

自己和自己异或,操作数变为0,且CF清零

TEST OPRD1,OPRD2

按位与,结果不保存

移位指令

A 算术 H 逻辑

L 左移 R 右移

m可以是1,或者CL中的内容

SAl/SHL OPRD,m

每移位一次在右面最低位补一个0,左边最高位则移入标志位CF

若左移次数为1的情况下,移位完之后,操作数的最高位和CF不相等的时候,则OF=1

SAR OPRD,m

符号位保持不变,最低位移至标志位CF

SHR OPRD,m

与上不同的是,最高位补0,而不是补符号位

循环移位指令

O 不带进位 C带进位

L 左移 R 右移

最高位和标志位不同 OF=1

ROL OPRD,m

最高位->CF,最高位->最低位

ROR OPRD,m

最低位->CF,最低位->最高位

RCL OPRD,m

最高位->CF,CF->最低位

RCR OPRD,m

最低位->CF,CF->最高位

串操作命令
对其中的每个字或字节均作同样的操作
MOVS

MOVS 目的串,源串

MOVSB 字节传送

MOVSW 字传送

REP

串指令前缀

如 REP MOVS

重复串指令执行,重复次数为(CX)

DF=0:使变址寄存器SI或DI的地址指针自动增加,字串处理由前往后

DF=1:SI或DI的地址指针自动递减(会自动根据字还是字节,增加2还是1的)

程序控制指令
JMP

直接转移

JMP SHORT OPRD

JMP NEAR OPRD

JMP FAR OPRD

以单个标志位为条件 无符号数比较 带符号数比较
JO OPRD 溢出转移 JA/JNBE OPRD JG/JNLE
JNO OPRD 不溢出转移 JAE/JNB OPRD JGE/JNL
JS OPRD 结果为负转移 JB/JNAE OPRD JL/JNGE
JNS OPRD 结果为正转移 JBE/JNA OPRD JLE/JNG
JC OPRD 进位转移
JNC OPRD 无进位转移
JE/JZ OPRD 等于零转移
LOOP OPRD

根据CX是否等于0

处理器控制命令

STC 将进位标志CF置1 CLC 置CF标志为0

CMC 使F取反

STD 将方向标志DF置1 CLD置DF标志为0

STI 将中断标志IF置1 CLI置IF标志为0

HLT 暂停命令

NOP 空操作命令

WAIT 等待指令

输入输出命令

INC ACC,PORT

OUT PORT,ACC

PORT为接口地址,ACC可以为AX,也可以是AL

1
2
3
4
5
6
;直接寻址,只有256个(00H到FFH)
IN AL,35 ;这里的35是偏移地址哦!
OUT 44H,AH
;寄存器间接寻址
MOV DX 03F8H
IN AL,DX

汇编语言的语句格式

[标号:] 指令助记符 [操作数][;注解]

冒号也可以不加

指令助记符,如:REP

伪指令

DB——定义字节

DW——定义字

1
2
3
4
5
6
BUF1 DB 1,2,3,25 ;25即是19H
TAB DW ? ;随机数字
BUF3 DW 200 DUP(6) ;从BUF3开始的200个字即400个字节 用0600H填充
NUM EQU 200
BUF3 DW NUM DUP(6) ;这两行等效于上一行,这里用符号定义伪指令EQU

定义过程的伪指令 PROC 和 ENDP

段定义伪指令 SEGMENT 和 ENDS

一个完整的汇编程序由3个段组成,即堆栈段、数据段和代码段

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
STACK SEGMENT
DB 500 DUP(0)
STACK ENDS
DATA SEGMENT
BUF1 DB 3,12H
BUF2 DW 3,1234H
SUM DB 100 DUP(0)
CONT DB ?
TIMES EQU 100
DATA ENDS
CODE SEGMENT
MAIN PROC FAR
ASSUME CS: CODE, DS: DATA, ES: DATA, SS: STACK
PUSH DS
MOV AX,0
PUSH AX
MOV AX, DATA
MOV DS,AX
MOV ES,AX
RET ;子程序调用指令CALL用来调用一个过程或子程序。当调用的过程或子程序结束时,可使用返回指令RET,使程序从调用的过程或子程序返回;过程体内必须至少存在一条RET指令
CODE ENDS
END START

汇编结束伪指令 END

运算符

算术运算符: + - x /

逻辑运算符:AND OR XOR NOT

关系运算符: EQ NE LT GT LE GE

取值运算符: SEG OFFSET

1
2
3
;TAB的地址是2000H:0100H
MOV AX,SEG TAB ;AX = 2000H
MOV AX,OFFSET TAB ; AX = 0100H

其实很容易理解,SEG又是段寄存器的简写,所以就拿到了段地址

属性运算符: PTR

push [1000H] 就不用指明访问的是字单元还是字节单元,因为push指令只进行字操作。

通过寄存器名指明要处理的数据的尺寸。(既有寄存器,可以不用ptr来限制了,系统会自动分析的)

1
2
3
TAB DW 25
MOV [BX],BYTE PTR TAB ;字节传送,19H,不知道操作数的大小么
MOV [BX],WORD PTR TAB ;字节传送,0019H

注意事项

  • 看清楚字还是字节,这样INC SI的时候可能需要两次
  • AX相加的时候用ADCAL相加的时候ADD,然后用ADC AH 0

处理器(CPU)设计

CPU的结构

CPU的功能

CPU:中央处理器

指令控制、操作控制、时间控制、数据加工、中断处理、其他处理

CPU的基本组成

控制器 PC、IR、PSW、DR、AR

运算器 ALU、单总线、暂存器(T、S)

通用寄存器组

(Cache高速缓存、内部总线、总线接口、中断系统、浮点运算器……)

CPU中的主要寄存器

DR 数据缓冲寄存器

IR 指令寄存器

PC 程序计数器

AR 地址寄存器

R 通用寄存器组(AX、BX、CX、DX、……)

AC 累加寄存器(AX)

PSW 状态寄存器

指令系统设计

:操作数和单/双字指令无关

CPU执行指令的过程

取指FIC -> [取操作数FDC] -> 执行EXE -> [写结果]

微操作:处理器(CPU)的基本或原子操作。通过控制器控制信号发送到相关部件上引起部件动作而完成的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
;双操作数
;ADD BX,[DI]
;取指令
PC->MEMadr ;[PC->AR AR->AB]这两条的等效
RD,PC+1->PC
MM->DB
DB->DR
DR->IR
;取操作数
DI->MEMadr
RD
DB->S
;执行指令
BX->ALU
ADD->T
T->BX
;MOV AX,4000H
;取指令
PC->MEMadr ;[PC->AR AR->AB]这两条的等效
RD,PC+1->PC
MM->DB
DB->DR
DR->IR
;取操作数
PC->MEMadr ;[PC->AR AR->AB]
RD,PC+1->PC
MM->DB
DB->DR
DR->AX
;单操作数
;SHR CX
;取指令
PC->MEMadr ;[PC->AR AR->AB]这两条的等效
RD,PC+1->PC
MM->DB
DB->DR
DR->IR
;取操作数
CX->S
;执行指令
ALU->T
T逻辑右移
T->CX
;INC [BX]
;取指令
PC->MEMadr ;[PC->AR AR->AB]这两条的等效
RD,PC+1->PC
MM->DB
DB->DR
DR->IR
;取操作数
BX->MEMadr
RD
DB->S
;执行指令
S+1->T
BX->MEMadr
T->DB,WR
;无操作数
;IRET
;取指令
PC->MEMadr ;[PC->AR AR->AB]这两条的等效
RD,PC+1->PC
MM->DB
DB->DR
DR->IR
;取操作数
SP->MEMadr
RD,SP+1
DB->PC
;执行指令
...
;NOP
;取指令
PC->MEMadr ;[PC->AR AR->AB]这两条的等效
RD,PC+1->PC
MM->DB
DB->DR
DR->IR
;取操作数
;执行指令
...
;转移指令译码
;JMP disp
;取指令
PC->MEMadr ;[PC->AR AR->AB]这两条的等效
RD,PC+1->PC
MM->DB
DB->DR
DR->IR
;取操作数
PC->AR
AR->AB
RD,PC+1->PC
DB->DR
DR->S
;执行指令
PC->ALU
ADD->T
T->PC

微命令:控制微操作完成的控制信号;由控制器产生的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
;MOV AX, 4000H
;取指令FIC
PCout , ARin
AR->AB
RD,PC+1
MM->DB,DRin
DRout,IRin
;取操作数FDC
PCout , ARin
AR->AB
RD,PC+1
MM->DB,DRin
DRout , AXin
;执行指令EXEC
;ADD BX,[DI]
;取指令FIC
PCout , ARin
AR->AB
RD,PC+1
MM->DB,DRin
DRout , IRin
;取操作数FDC
DIout , ARin
AR->AB, RD
MM->DB , DRin
DRout , Sin
;执行指令EXEC
S->ALU
BX->ALU
ADD , ALU->T, Tin
Tout , BXin

微指令:一组微命令的组合(完成一定的操作功能)

微程序:完成一条机器指令的一系列微指令的序列

控制存储器 CM:存放微程序的存储器(常用于CISC处理器控制器的实现)

后继微地址

两地址格式(断定方式)

$uAR$:微地址寄存器

$uIR$:微指令寄存器

单地址格式(计数方式,增量方式)

$uPC$:加1 or 复位

$uIR$:微指令寄存器

可变格式

在顺序执行时只提供控制信号的产生,需要分支时再提供跳转地址。

水平型微指令:同时有效,并行执行

  • 直接表示法

  • 字段译码法(互斥——同一字段 相容——不同字段)
    按功能(类同),资源(同一部件)放在同一字段中
    每个字段都要设计一个无效控制信号
    NA AC(后继地址控制字段) 微命令

垂直型微指令:表示不同功能

其他

位b,字节B,字

位bit 字节byte

1 B = 8b

1字=2字节(16位计算机)或4字节(32位计算机)

1KB=1024B

计算机简单框图

计算机简单框图

8088内部寄存器

8088内部寄存器

CS:IP

SS:IP 或 SS:偏移地址

DS:偏移地址

ES:偏移地址

以……为首地址的xx个【随机】【无符号】字节(字)中取/进行【功能】,放入xx中

例如:将DATA数据段偏移地址为TAB开始的顺序的180个单元,按>=90、89~75、69~60、<60分类统计,并将统计结果存放在当前数据段偏移地址为BUFFER的顺序单元中。

原码二位乘法(暂不知道考不考)

原码二位乘法

寻址方式设计(不知道要不要记)

设计寻址方式

考前需做题

  1. X=-0.1101 Y=+0.0110 分别用原码1位乘及布斯法求乘积【1.01001110原 1.10110010补】

  2. X=-0.10101 Y=+0.11011分别用原码加减交替法和补码加减交替法完成X除以Y的运算【原码 商1.11000 余数$1.110002^{-5}$;补码 商1.00111 余数$0.111102^{-5}$】

  3. $x=11/162^{-4}\space\space\space\space y=35/642^{-3}$求x-y,其中阶码5位阶码,尾数7位补码【01011 1001100】

  4. 实现ADD AX,[BX]的微流程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    ;取指令
    PC->AR
    AR->AB,RD,PC+1
    DB->DR
    DR->IR
    ;取操作数
    BX->AR
    AR->AB,RD
    DB->DR
    DR->S
    ;执行指令
    S->ALU
    AX->ALU,ADD
    ALU->T
    T->AX
  5. 实现ADD AX,DISP[SI]的微流程

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    ;取指令
    PC->AR
    AR->AB,RD,PC+1
    DB->DR
    DR->IR
    ;取操作数
    PC->AR
    AR->AB,RD,PC+1
    DB->DR
    DR->S
    SI->ALU,ADD
    ALU->T
    T->AR
    AR->AB,RD
    DB->DR
    DR->S
    ;执行指令
    S->ALU
    AX->ALU,ADD
    ALU->T
    T->AX
  6. ALU

写出2((R0)-1)->R0的微命令

1
2
R0out , Bin
B->ALU , 全1->ALU , ADD , L ,R0in
  1. 试编程序,统计由21000H开始的顺序4KB个字节单元中所存放的数据中,字符‘A’的个数,并将结果存放在DX

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    START: MOV DI, 2000H
    MOV DS, DI
    MOV SI, 1000H
    MOV CX, 1000H
    MOV DX, 0000H
    GOON: MOV AL, [SI]
    CMP AL, 'B'
    JNE, NEXT
    INC, DX
    NEXT: INC SI
    DEC CX
    JNZ GOON
    HLT
  2. 微命令——微操作

  3. 相容——互斥

  4. 组合逻辑控制器又称硬连线控制器,是由一系列门电路构成。它可以根据不同的指令产生完成该指令所需要的控制信号

  5. 纯小数应该是无规格化的,注意上标有个负号,$[-1,-2^{-(n-1)}]\space AND \space [0,1-2^{-(n-1)}] $

  6. 正数什么码都一样啊!!!!!!!!

  7. 提高一倍[*1.5]

  8. PC的位数决定于可寻址的最大内存空间,即存储器的容量
    IR决定于指令字长

  9. 条件转移指令是根据状态寄存器(PSW)的内容来决定是否转移

  10. 注意大题前面对于机器字长的说明

  11. 左规,小数点是右移的,数字变大;右规,则……

  12. IEEE 754 阶码是移码,尾数是原码,还要把小数点左边置1,默认不写

  13. 阶符和阶码的位数k合起来决定浮点数的表示数值范围,决定了所表示的数值的大小,阶符决定阶码的正负,尾数的位数决定浮点数的精度

  14. 在计算机中,指令和数据均以二进制编码的形式存放在存储器中,CPU区分它们的依据是指令周期的不同阶段

  15. CPU从主存中取出一条指令并执行该命令的全部时间叫做指令周期,它常常由若干机器周期来实现

  16. CPU中,保存当前正在执行的指令的寄存器是指令寄存器;保存指令执行结果的寄存器是PSW;决定指令执行顺序的寄存器称为PC

  17. 在CPU中用于跟踪指令地址的寄存器是___PC__。


计算机组成与设计第二部分

流水线技术

概述

流水线技术:将一重复的处理过程分解为若干子过程,每个子过程都可有效地在其专用功能段上与其它子过程同时执行的技术

流水线的引进,是为了提高速度

  • 流水线不能缩短单个任务的响应时间,但可以提高吞吐率
  • 流水线速度限制于最慢流水站的速度
  • 流水线中多个任务是并行处理的
  • 最大加速比=流水站数

为了防止流水线各段的相互干扰,通常在流水线各段之间放置快速缓冲器来分离各段,并利用缓冲寄存器逐段传送处理数据。所有缓冲寄存器受同一时钟控制

特点

  • 流水过程由多个相关的子过程组成,这些子过程称为流水线的“”或“”。段的数目称为流水线的“深度
  • 每个子过程由专用的功能段实现,各功能段的时间应基本相等,通常为1个时钟周期(1拍)
  • 流水线需要经过一定的通过时间才能稳定
  • 流水技术适合于大量重复的时序过程

时-空图

时间空间两个方面描述流水线的工作过程,横坐标表示时间纵坐标表示各流水段

分类

单功能流水线和多功能流水线

  • 按流水线所完成的功能分类
  • 单功能流水线
    • 是指只能完成一种固定功能的流水线
  • 多功能流水线
    • 是指各段可以进行不同的连接,从而完成不同的功能

静态流水线和动态流水线

在多功能流水线下,按同一时间内流水线的连接方式划分

  • 静态流水线
    • 是指在同一时间内,流水线的各段只能按同一种功能的连接方式工作
    • 适合处理一串相同的运算操作;否则将会失去意义,效率下降到与顺序处理一样的水平
  • 动态流水线
    • 是指在同一时间内,当某些段正在实现某种运算时,另一些段却在实现另一种运算
    • 具有更高的效率,但是会使流水线的控制变得很复杂

所以在做题目的时候,要看清题目中的是静态的还是动态的

部件级、处理机级及处理机间流水线

  • 流水的级别划分
  • 部件级流水线
    • 又叫运算操作流水线,是把处理机的算术逻辑部件分段,使得各种数据类型的操作能够进行流水
    • 多个功能部件连在一起构成流水线
    • 例如浮点加减法运算流水线
  • 处理机级流水线
    • 又叫指令流水线,是把解释(执行)指令的过程按照流水方式处理
    • 将指令执行采用了流水线的处理机称为流水线处理机
    • 例如将指令分为:取指周期、取操作数周期及执行周期
  • 处理机间流水线
    • 又叫宏流水线,是由两个以上的处理机串行地对同一数据流进行处理,每个处理机完成一项任务(每个处理机完成任务的一部分)
    • 例如:连续图像的存储系统(一个处理机采集和预处理,并将结果放在存储器中;另一处理机从存储器中取出图像数据,压缩后再放入存储器;再一个处理机,取出数据并处理,最后进行存储)

线性流水线和非线性流水线

  • 按照是否有反馈回路来进行分类
  • 线性流水线
    • 流水线的各段串行连接,没有反馈回路
    • 每个功能段都流过一次,且仅流过一次
    • 通常,一条线型流水线只完成一种固定功能
  • 非线性流水线
    • 流水线中除有串行连接的通路外,还有反馈回路
    • 但是存在流水线调度的问题:确定什么时候向流水线引进新的输入,从而使新输入的数据先前操作的反馈数据在流水线中不产生冲突,此即所谓流水线调度问题
    • 预约表:一张预约表对应一种工作方式;一条非线性流水线可以有多种预约表

顺序流动流水线和乱序流动流水线

  • 按照输出端任务流出顺序与输入端任务流入顺序是否相同划分
  • 顺序流动流水线
    • 流水线输出端任务流出的顺序与输入端任务流入的顺序相同
  • 乱序流动流水线
    • 也可称为无序流水线、错序、异步流水线,
    • 是指流水线输出端任务流出的顺序与输入端任务流入的顺序不一定相同

标量流水处理机和向量流水处理机

  • 按照是否具备向量表示、处理能力分类

性能分析

三项指标:吞吐率、加速比和效率

吞吐率

吞吐率是指单位时间内流水线所完成的任务数或输出结果的数量

  • 最大吞吐率$TP_{max}$是指流水线在达到稳定状态后所得到的吞吐率
  • 设流水线由$m$段组成,完成$n$个任务的吞吐率称为实际吞吐率,记作$TP$

最大吞吐率

假设流水线各段的时间相等,均为$\Delta t_0$,则:

假设流水线各段时间不相等,第$i$段时间为$\Delta t_i$,则:

最大吞吐率取决于流水线中最慢一段所需的时间,该段成为流水线的瓶颈

消除瓶颈的方法
  • 细分瓶颈段
  • 重复设置瓶颈段

最大吞吐率1

最大吞吐率2

实际吞吐率

多种原因会使流水线的实际吞吐率小于最大吞吐率,例如流水线的工作不是连续的

若各段时间相等(假设均为$\Delta t_0$),则完成时间

实际吞吐率

显而易见:$TP<TP_{max}$

当$n>>m$时,$TP\approx TP_{max}$

若各段时间不相等(假设第i段为$\Delta t_i$),则完成时间

这里,$\Delta t_j=max\{\Delta t_i\}$

看图就很明显,除第二段的部分,其他都算一次,第二段部分需要每个都算

实际吞吐率

加速比

加速比是指流水线速度与等功能的非流水线速度之比

其中流水线为$m$段

若各段时间相等,每段时间均为$\Delta t_0$

$T_{非流水}=nm\Delta t_0,\ T_{流水}=m\Delta t_0+(n-1)\Delta t_0$

当$n>>m$时,$S\approx m$(最大加速比=流水线站数【前面提到的】)

若各段时间不相等

$T_{非流水}=n\displaystyle \sum_{i=1}^m\Delta t_i,\ T_{流水}=\sum_{i=1}^{m}\Delta t_i+(n-1)\Delta t_{max}$

效率

效率指流水线的设备利用率

由于流水线有通过时间排空时间,所以流水线的各段并非一直满负荷工作,$E<1$

若各段时间相等,则各段效率也相等,

即$E=e1=e2=e3=\cdot\cdot\cdot=n\Delta t_0/T_{流水}=\frac{n}{m+n-1}=\frac 1 {1+\frac{m-1}{n}}$

n很大的时候,效率接近于1

从时-空图上看,效率就是n个任务所占的时空区与m个段总的时空区之比

若各段时间不相等,由上述结论可知

注:做题的时候,用阴影/所有,就可以啦!

三个性能指标的关系

仅以各段时间相等来讨论:

  1. 效率是实际加速比$S$与最大加速比$m$之比
  1. $\Delta t_0$不变时,流水线的效率与吞吐率呈正比。为提高效率而采取的措施,也有助于提高吞吐率

  2. 当$m$和$\Delta t_0$不变时,流水线的加速比与吞吐率呈正比,为提高加速比而采取的措施,也有助于提高吞吐率

小结:

  • 流水线并不能减少(而且一般是增加【流水线段间存在缓冲寄存器的传输延迟、附加控制和时钟扭曲带来的额外开销时间】)单条指令的执行时间,但能够提高吞吐率,高吞吐率是流水线设计中重点追求的目标
  • 增加流水线的深度(段数)可以提高流水线性能
  • 流水线深度受限于流水线的延迟、流水线段的时间不均衡和流水线的额外开销等因素的影响
  • 当时钟周期小于最慢流水线段的运行时间时,流水线不能正常工作;当时钟周期小到与额外开销相当时,流水已没有意义
  • 需要用高速锁存器作为流水线寄存器
  • 指令之间存在的相关,限制了流水线的性能

流水线中的相关

流水线中的相关是指相邻或相近的两条指令因存在某种关联,后一条指令不能在原先指定的时钟周期开始执行

消除相关的基本方法——暂停

暂停流水线中某条指令及其后面所有指令的执行,该指令之前的所有指令继续执行

轻则影响流水线的性能,重则导致错误结果

类型

结构相关

当指令在重叠执行过程中,硬件资源满足不了指令重叠执行的要求,发生资源冲突时将产生“结构相关”

在流水线机器中,为了使各种指令组合能顺利地重叠执行,需要把功能部件流水化,并把资源重复设置

产生原因:

  • 功能部件不是全流水
  • 重复设置的资源数量不足

解决方法:

  • 插入暂停周期(产生“(流水线)气泡”),必然会降低了流水线的吞吐率
  • 改变资源以便它们能并发的使用,设置相互独立的指令存储器和数据存储器 或 设置相互独立的指令Cache和数据Cache

避免结构相关的方法:

  • 所有功能单元完全流水化
  • 设置足够多的硬件资源(代价大)

存在一些设计方案允许结构相关的存在,来降低成本,减少功能单元的延迟

数据相关

因一条指令需要用到前面指令的结果,而无法与产生结果的指令重叠执行时,就发生了“数据相关”

产生原因:

  • 当指令在流水线中重叠执行时,流水线有可能改变指令读/写操作数的顺序,使之不同于它们在非流水实现时的顺序,这将导致数据相关

分类:

两条指令i和j,都会访问同一寄存器R,假设i先进入流水线,则它们对R有四种不同的访问顺序

  • 写后读RAW【最常见的数据相关,严重制约了CPU的性能,是程序最重要的特征之一】
  • 写后写WAW【两条写指令对同一个变量运算并存储,但是前面那条写指令的执行周期过长,导致顺序变化】
  • 读后写WAR(很少发生)【读的过程很长,导致写先进行了,比如读的是存储器间接寻址】
  • 读后读(不引起数据相关!)

解决方法:

向流水线中插入暂停周期

  • 采用直通技术forwarding(定向技术)
    • 控制逻辑将前面指令的结果从其产生的地方直接连通到当前指令所处的位置
    • 定向通道即在某些流水线段之间设置的直接连接通路,也称为旁路或段路
    • 减少指令访问操作数需要花费的时间,避免流水线停顿
  • 增加专用硬件
    • 增加流水线互锁硬件。互锁硬件先要检测流水线中指令的数据相关性,当互锁硬件发现数据相关时,使流水线工作停顿下来,直到相关消失为止
  • 利用编译器
    • 流水线调度/指令调度:编译器可以对指令重新排序或插入空操作指令,使得加载任何冲突数据的操作被延迟,但对程序逻辑或输出不受影响

控制相关

当流水线遇到分支指令和其它会改变PC值的指令时就发生“控制相关”

解释:在一条指令流水线中,一条正在处理的转移指令在执行之前,流水线已获取甚至译码了几条指令,转移指令的执行必然导致已进入流水线的指令变为不可用,需要将转移目标处的指令流重新发送到流水线中,从而出现流水线断流或停顿。

使程序执行顺序发生改变的转移指令有两类:

  • 无条件转移指令(如无条件跳转子程序或过程调用返回指令等)
    • 某些CPU,紧跟在无条件跳转指令之后的指令必须执行
    • 另一些CPU,采取相对复杂的方法,如提前计算出转移目标地址
  • 条件分支转移指令(如零跳转循环控制指令等)
    • 不仅需要延迟槽,而且一直到流水线的深处,取指单元才能知道到哪里去取下一条指令
      • 分支延迟槽branch delay slot:程序中位于转移指令后面的存储单元位置
    • 条件分支指令对流水线性能的影响远比无条件转移指令要大

对条件分支指令的解决方法:

  • 冻结流水线freeze
    • 一旦在指令译码段检测到分支指令,就在转移目标地址确定之前保存或删除所有紧随分支指令之后的指令,当分支指令从执行段流出、确定出新的PC值时,流水线才继续依据新PC值填充流水线
    • 会严重地影响流水线的性能
    • 早期的CPU
  • 预取分支目标prefetch branch target
    • 当条件分支指令被识别时,除了紧随其后的指令外,分支目标也被预取,并保存到分支指令被执行
    • 如果分支跳转发生,已预取到的目标指令可立刻执行
  • 循环缓冲器loop buffer
    • 循环缓冲器是一个小的、非常高速的存储器保存最近获取的n条顺序的指令。如果分支发生,硬件首先检查分支目标是否在缓冲器中。如果在,下一条指令从缓冲器中获取
    • 优点:
      • 当分支未发生时,顺序获取的指令已在缓冲器中
      • 虽然循环缓冲器有一定的容量,但对于目标地址仅仅是在分支指令之后的几个单元处,则当分支发生时,目标将已在缓冲器中。对常见的if-thenif-then-else语句有利
      • 特别适合处理循环或重复操作,如果循环缓冲器大到足以容纳一个循环中的全部指令,则循环中的指令仅需从内存中读出一次
      • 类似于指令Cache,差别是循环缓冲器仅保留顺序指令,且容量比cache小得多,成本较低
  • 分支预测branch prediction
    • 提高分支预测的准确性是关键
    • 静态分支预测
      • 可以采用的预测方法:
        • 预测分支不会发生(出错检测处理)
        • 预测分支总是发生(循环)
        • 由编译器预测
        • 剖面法profiling【实际运行该程序(一般是在模拟器上),然后将有关信息送给编译器】
          • 预测错误时,对已经执行和将要执行的指令需要取消,因此需要将执行结果保存在临时寄存器中,或者把将要被覆盖的寄存器的原值保存在临时寄存器中【但是这两种方法都很复杂,且需要付出很大的努力才能使它们正确工作,尤其是在第一次预测未定时,又遇到第二个条件分支时】)
    • 动态分支预测
      • 通过记录分支指令的近期运行历史,并以此作为预测的依据,来提高分支预测的准确度
      • 分支历史表(是否成功,1位【上一次是否成功】,2位【预测和上一次是否成功「有限状态机」】)
      • 分支目标缓冲器(保存分支转移目标的地址)
  • 延迟分支/延迟转移delayed branch
    • 流水线遇到分支指令时,按正常方式处理,同时执行延迟槽中的指令
    • 编译器的任务就是在延迟槽中放入有用的指令或者空操作指令(NOP),称为延迟槽调度【根据延迟槽中放置的信息分类;其本质就是交换指令的执行顺序,注意被调度的指令应该不和分支有关,不然可能会发生分支的值的改变】「掩盖了流水线原来必须插入的停顿周期,从而减少分支开销」(其中插入延迟槽的指令不一定是一条)
      • 从分支前调入
      • 从目标处调入
      • 从失败处调入
    • 限制:
      • 放入延迟槽的指令需要满足一定的条件
      • 编译器要有预测分支是否成功的能力

小结

  • 转移指令引起的控制相关,对流水计算机吞吐率、效率的影响比数据相关严重的多,所以被称为全局性相关
  • 数据相关一般被称为局部性相关

指令级高度并行的超级处理器

两种技术:每个时钟周期发射多条指令(即发射指令的宽度)和增加流水线的深度(段数)来提高速度

但是硬件会复杂,并且需要更高频率处理器时钟。

之后会提到多核处理器(将指令级并行上升到线程并行)

多指令流出技术

一个时钟周期内流出多条指令,$CPI<1$,$ipc>1$

IPC(Instructions Per Cycle ) :每个时钟周期内完成的指令条数。

IPCCPI的倒数

多指令流出处理器有三种基本结构:

  • 超标量superscalar
    • 每个时钟周期流出的指令数不定,它既可以通过编译器静态调度,也可以通过动态调度
  • 超流水super pipeline
    • 每个功能部件进一步流水化,特别是取指令或指令流出被分解为多个段,使得一个功能部件在一拍中可以处理多条指令
  • 超长指令字VLIWvery long instruction word
    • 每个时钟周期流出的指令数是固定的,它们构成一条长指令,或说是一个混合指令包,这种处理器目前只能通过编译静态调度

指令级高度并行的超级处理器

超标量处理机

标量流水技术:一条指令分成若干周期处理以达到多条指令重叠处理,从而提高处理器部件利用率的技术

超级标量是指处理器内有多条流水线,这些流水线能够并行处理;可以使得处理器的$IPC>1$

采用多指令流水线,每个$\Delta t$流出m条指令(称度为m);一般m的取值在2~4居多

超级标量机能同时对若干条指令进行译码,将可以并行执行的指令送往不同的执行部件,在程序运行期间,由硬件(通常是状态记录部件和调度部件)来完成指令调度。

主要靠编译程序来优化编排指令的执行顺序,将能并行的指令搭配成组,硬件不对指令顺序进行调整

利用硬件资源重复,设置多个执行部件寄存器堆端口,来实现空间的并行操作

适合处理稀疏向量、矩阵这类复杂的标量计算问题

超长指令字处理机

在编译时,编译程序找出指令间潜在的并行性,将多个能并行执行的不相关或无关的操作先行压缩组合在一起,形成一条有多个操作段的超长指令(运行时,不再用软件或硬件来检测其并行性,直接由这条超长字指令控制机器中多个相互独立的功能部件并行操作)。超长指令中所包含的指令称为子指令也称为指令槽。

且一定会包含一条NOP指令,当某一指令不需要该槽中的子指令时,则此槽中就应放一条NOP指令。

相当于同时执行多条指令

由于每一指令槽中所包含的指令多少不同,寻址方式不同,每一指令槽的位数也就不同。

处理机内部必须同时(即并行地)对每一个指令槽中的子指令译码并执行,这就需要根据指令槽的需要设置多个独立的功能部件,以便处理指令槽中的字指令。

相对于超标量处理机来说,每条指令所需拍数更少,指令译码容易,开发标量操作间的随机并行性更方便,并行性较高;但是与一般计算机不兼容,且指令字段中许多字段没有操作,浪费了存贮空间,不紧凑

超流水线处理机

每个$\Delta t’$仍只流出一条指令,但它的$\Delta t’$值更小。一台度为m的超流水线处理机的$\Delta t’$只是基本机器周期$\Delta t$的$1/m$。因此,一条指令需花费$km\Delta t’$的时间,$k$为一条指令所含的基本机器周期数。

在超流水线处理机中的度就是将原本$\Delta t$分成的小段数$m$,但从度的定义来看,又是与超标量处理机相同的

着重开发时间并行性,高速时钟机制,较短时钟周期深度流水来提高速度【即增加流水的深度,并同时提高时钟频率】

通常,把指令流水线有8个或8个以上流水级的处理机称为超流水线处理机

当n很大时,超流水线处理机的加速比Sp接近于m

超标量超流水线处理机

将超标量技术和超级流水线技术结合在一起。

如果超标量超流水线处理机在一个周期里发射n次指令,且每次发射m条指令,则此处理机每个周期就能发射mn条指令,称为mn度超标量超流水线处理机。

小结

  • 并行处理机的相对性能:超标量处理机>超标量超流水线处理机>超流水线处理机

(因为超流水线处理机指令之间的启动延时较大,条件转移造成的损失较大,指令执行部件的冲突较大)

  • 当横坐标表示的设计指令级并行度较小时,处理机实际指令并行度提高较快。但当设计指令级并行度进一 步增加时,处理机实际指令并行度提高变缓,且越来越慢。因此实际设计超标量、超流水线或超标量超流 水线处理机的指令并行度应适当,否则花费大量硬件 代价,而可能得不到指令并行度的期望值。
  • 一个特定程序的指令并行度的最大值是确定的,所以无论哪种处理机最后会收拢于同一点上;不同程序的收拢点不同
  • 并非流水线级数越多会越好,也并非处理机工作频率越高越好。
  • 于是出现了多核处理器:并将指令级并行上升到了线程级并行,可以替代并超越超标量处理器和超长指令字处理器的最佳选择

练习题

注意最大吞吐率和实际吞吐率的问题

这里只需要计算产生一个单元的加速比就可以了,没有告诉n的情况下

注意这里的重点是静态流水线,所以每一个时间间隔内只可以完成一个功能

以$ \displaystyle \sum_{i=1}^4 A_iB_i$为例计算

静态流水线下:

  1. 确定适合于流水处理的计算过程

    1
    2
    3
    4
    5
    6
    7
    8
    A1B1 A2B2 A3B3 A4B4
    \ / \ /
    \ / \ /
    \ / \ /
    + +
    \ /
    \ /
    +
  2. 画时空图

    共34个有色方块,共8*20=160个方块

  3. 计算性能

    $T_{非流水}=44\Delta t+36\Delta t=34\Delta,\ T_{流水}=20\Delta t$

    $TP=\frac {7}{20\Delta t}$ $S=\frac{34\Delta t}{20\Delta t}=1.7$ $E=\frac{34\Delta t}{160\Delta t}=0.21$

动态流水线下:

  1. 确定适合于流水处理的计算过程(同上)

  2. 画时空图

    共34个有色方块,共8*19=152个方块

    当$A1B1,\ A2B2$计算出来后就可以开始计算$A1B1+A2B2$了

  3. 计算性能

    $T_{非流水}=44\Delta t+36\Delta t=34\Delta,\ T_{流水}=19\Delta t$

    $TP=\frac {7}{19\Delta t}$ $S=\frac{34\Delta t}{19\Delta t}=1.79$ $E=\frac{34\Delta t}{152\Delta t}=0.22$

存储系统

层次结构

主存(内存)——半导体存储器

辅存(外存)——磁盘、磁带、光盘、U盘

常用的层次结构:

  • 第一种
    • 主存——辅存
      • 大容量、低成本;软硬件结合完成
    • Cache—主存
      • 高速度、低成本;纯硬件完成
  • 第二种
    • cache-主存-辅存
      • 三级存储体系

协调系统的三个指标:容量、速度、价格/位

  • 计算机层次结构中,越是靠近上层,其速度越快容量越小单位存储容量的价格也越高
  • 解决存储系统大容量、高速度、低成本相互制约的矛盾

存储器

MDR(memory data register)主存数据寄存器用来缓存从主存中读取的数据(包括指令)

MAR(memory address register)主存地址寄存器用来读取主存时缓存地址

$\overline {CS}$片选信号的引线

分类

  • 按存储信息介质分
    • 半导体存储器
    • 磁存储器
    • 激光存储器
  • 按与CPU的关系分
    • 主存储器MM
    • 控制存储器CM
      • 在CPU内部,用于存放微程序的存储器是控制存储器
    • 高速存储器Cache
    • 外存储器
      • 用来存放当前暂不使用的大量信息的存储器是外部存储器,又称外存
      • 如磁盘存储器、光盘存储器、U盘、MMC(SD)存储卡、磁带存储器等
  • 按读写功能分
    • 随机存储器(读写存储器)RAM
      • 半导体随机读写存储器RAM就是易于挥发的易失存储器(当存储器断电后,有的存储器所存信息也随之丢失)
      • 随机读写其任一单元所用的时间都一样
      • SRAM
      • DRAM
    • 只读存储器ROM
      • 非易失存储器,断电后所存信息不会丢失
      • ROM
      • PROM
      • ERPOM
      • EEPROM(FM)

主要性能

大容量、高速度、高可靠性、低功耗、低成本是存储器的主要要求

存储器容量

存储器速度

通过存取周期【是指连续对存储器进行存(取)时,完成一次存(取)所需要的时间】、存取时间(又称访问时间)【是对存储器中某一单元的数据进行一次存(取)所需要的时间】、存储器带宽$B_m$【单位时间里存储器可以读出(或写入)的字节数$n$】来表现

存储器可靠性

对于一些部件,不可维修,可以用平均无故障时间或平均故障前时间MTTF来描述;对于一些可维修的部件,可以用平均故障间隔时间MTBF来描述

价格(成本)

其中:$S$是存储容量,$C$为整个存储器的价格

功耗

使用功耗低的存储器构成存储系统,不仅可以减少对电源容量的要求,而且还可以提高存储系统的可靠性

其他

体积、重量、封装方式、工作电压、环境条件

内部存储器(主存储器)

主存储器,也称为内部存储器,简称内存

是一种在计算机中用于存放当前正要执行刚执行的程序和数据的存储器

对于简单的计算机,只要将半导体集成电路芯片接在计算机的系统总线上便可以构成内部存储器。在构成内存时,必须注意存储器与CPU在速度上的协调。只有当CPU读写内存的时间大于内存所要求的读写时间时,才能保证可靠的读写,即CPU提供的信号持续时间必须大于等于存储器芯片所要求的信号时间

如果快速的CPU使用了慢速的存储器时,可以降低CPU时钟的频率,即延长CPU所提供的读写时间;或选用读写速度更快的存储器芯片;或在CPU读写该慢速存储器时,适当延长CPU的读写时间,常用READY信号使CPU插入若干时钟周期

主存由各种半导体存储器构成,如SRAM、DRAM、ROM、高速缓存Cache等

在读写的时候,存储器需要和CPU进行协调;一般来说,只有当CPU的读写内存的时间大于内存所要求的读写时间时,才能保证可靠的读写。

随机读写存储器RAM

RAM(Random Access Memory)

SRAM 静态随机读写存储器

常规RAM芯片,其外部有:

  • 地址引线

    • 地址引线在芯片内部译码,选中芯片内部的相应存储单元

    • 某静态RAM芯片内部上有n条地址线时,地址线上所能表示的地址编码就有$2^n$种。这就意味着该芯片内部有$2^n$个存储单元。(注意这里的单位是存储单元,而不是bit)

    • 内部译码存在一维译码二维译码,显然二维译码的译码器制作更简单些

    • 单元电路

      • 1位SRAM(MOS型)结构及工作原理
        • 高电平,场效应管饱和
        • 低电平,场效应管截止

      • 数据一旦写入,其信息就稳定的保存在电路中,静静地等待读出。无论读出多少次,只要不断电,此信息会一直保持下去。这也许就是静态的由来
      • 在电路工作时,即使不进行读写操作,只要保持在加电状态下,电路中就一定有晶体管导通,就一定会有功耗消耗。因此,与DRAM相比,SRAM的功耗大
  • 数据引线

  • 控制信号引线

20条地址信号线(所以地址编码有$2^{20}$种);8条双向数据线

$\overline {OE}$为输出允许信号,只有当$\overline {OE}=0$,即其有效时,才允许该芯片将某单元的数据送到芯片外部的$D0\widetilde\ D7$上

$\overline {WE}$为写允许信号

当$\overline {WE}=0$,允许将数据写入芯片;

当$\overline {WE}=1$,允许芯片的数据读出

$\overline {CS}$片选信号的引线,当片选信号同时有效时,即$\overline {CS}=0$时,才能选中该芯片

存储器的扩展

存储容量扩展——用多片存储器芯片构成主存储器

字扩展

即存储单元数的扩展

首先看芯片,$D0\to D7$,所以共有8b,并且$A0\to A_{12}$,所以有$2^{13}=8K$,这样我们就可以知道芯片的大小了

位扩展

即每个存储单元二进制位数的扩展

可以看到两片的数据线接的接口不同,但是地址线还是都接的

通过编程对上图的内存进行检测

1
2
3
4
5
6
7
8
9
# 对内存单元40000H的检测
MOV AX, 4000H
MOV DS, AX
MOV SI, 0000H ;初始化DS:SI为内存地址40000H
MOV [SI],55H ;将55H写入40000H内存单元
MOV AL, [SI] ;读出40000H内存单元的内容
CMP AL, 55H ;将读出值与55H进行比较
JNE ERROR ;比较结果不相等,则为出错

字位同时扩展

例子——80x86内存的连接

16位机、32位机的存储器结构比较复杂,内存按字节编址,必须分为2个或4个体,在存储器的连接上也有许多不同。

为了实现能够一次访问一个字(16位),又能一次访问一个字节(8位),故将其内存地址空间分成偶存储体和奇存储体

16位机的内存组织:

  • 分为两个体:高位库(奇址)、低位库(偶址)
  • 高位库连接数据线高8位$D_8\to D_{15}$
  • 低位库连接数据线低8位$D_0\to D_7$
  • 其中$A_0$连接低位库的$\overline {SEL}$;$\overline {BHE}$连接高位库的$\overline {SEL}$;且两个都是为0的时候选中
  • 注意这里$A_0$和$\overline{BHE}$都是在整体的值为0的时候“有效”
$\overline {BHE}$ $A_0$ 读/写的字节
0 0 读/写高低两个字节
0 1 读/写高位字节(奇地址)
1 0 读/写低位字节(偶地址)
1 1 不传送

x8086:

选中为0,并且选中$\overline{Y_0}$的时候,即$\overline{Y_0}=0$的时候,然后门电路的输出就是0,因此选中了片选信号$\overline{CS}$

32位机:很显然分为4组,每组8个数据线

DRAM 动态随机读写存储器

PC的内存条一般采用动态存储器

1位动态存储单元同样是由场效应管组成的,但是SRAM有两个,DRAM只有一个。

有写入、保持、读出、再生(刷新)的状态

【按行刷新】「通过选中$\overline{RAS}$,却不选中$\overline{CAS}$,地址总线送入行地址,便可以刷新周期了」

在DRAM中,既有行地址也有列地址,方便动态选择;地址是复用的

在这里的数据线,不再是$A_0\to A_i$了,而是$D_{IN}$和$D_{out}$

$\overline {RAS}$为行地址锁存信号,同时兼职片选信号的功能

$\overline {CAS}$为列地址锁存信号,同时兼职$\overline {OE}$引脚的功能

$\overline {WE}$为写允许信号

读取过程:

  • 通过地址总线将行地址传输到地址引脚
  • $\overline{RAS}$引脚被激活,行地址被传送到行地址锁存器中
  • 行地址解码器根据接收到的数据选择相应的行
  • 确定$\overline {WE}$引脚处于不激活状态(即等于1),即不会进行写入操作
  • 列地址通过地址总线传输到地址引脚
  • $\overline{CAS}$引脚被激活,列地址被传送到列地址锁存器中
  • $\overline{CAS}$引脚兼职的$\overline{OE}$引脚的功能,所以$D_{out}$引脚便知道需要向外传输数据
  • $\overline {RAS}$和$\overline{CAS}$均变为不被激活的状态,进入下一个周期的数据操作

对于写过程,前面一样,只是$\overline{WE}=0$,如果$\overline{WE}=0$在$\overline{CAS}$之前,那么称为提前写;否则,会先将单元读出到$D_{out}$上,然后再把$D_{in}$的数据写入该单元,这种情况可以一次完成读和写,故称为读变写操作周期

DRAM内部改善存储性能措施:

  • 快速页模式Fast Page Mode
  • 同步DRAM(SDRAM)
    • 同步是指SDRAM与CPU共享同一个时钟,同步工作,内部的命令的发送与数据的传输都以它为基准
    • 时钟被用来驱动一个有限状态机,对进入的指令进行流水线操作。
    • SDRAM基于双存储体结构:内含两个交错的存储阵列,通过这两个存储阵列的紧密切换,读取效率就能得到成倍的提高
    • 第一代 SDR SDRAM(也称为SDRAM)
    • 第二代DDR SDRAM
    • 第i代DDRi-1 SDRAM(目前i到第5代为止)
    • DDR双倍数据传输
      • DDR在时钟上升沿与下降沿各传输一次数据,使得DDR的数据传输速度为传统SDRAM的
      • DDR内存采用数据传输频率作为命名标准
        • 如DDR333,其工作频率就是333/2=166MHz
      • DDR内存带宽
        • $带宽=内存核心频率内存总线位数倍增系数$
        • $带宽=数据传输速率*内存总线位数$
        • DDRi,一次预读$2^i\ bit$,倍增系数是$2^i$
      • DDR内存有三种不同的频率指标,分别是核心频率(内存的真实运行频率)、时钟频率(I/O Buffer的传输频率)和数据传输频率
        • 数据传输频率=时钟频率$*2$
        • 数据传输速率=核心频率$*2^i$
SRAM与DRAM的对比

SRAM

  • 稳态电路存信息,不需刷新
  • 相对于DRAM,速度快、集成度低、功耗大、成本高

DRAM

  • 暂态电路(电容)存信息,电容量小(容量越小速度越快)
  • 尽管不工作时,晶体管不导通(因此没有电流流过【会有极小的漏电流存在】,也就没有功率消耗,因此DRAM功耗非常小,其集成度可做得很高),但电容总有很微小的漏电,时间长了,存放的信息就会丢失。因此,必须在电荷漏掉前不断地补充电荷以保证信息不会丢失,这就是刷新。刷新一般每2~4ms进行一次。刷新过程就是每次刷新一行。需定时不断地刷新
  • 地址采用复用技术,分行列两次加载,$\overline {RAS}$、$\overline{CAS}$
  • 相对于SRAM,速度慢、集成度高、功耗小、成本低
  • 刷新(再生)方法:集中式、分散式、异步式
  • 刷新控制电路:刷新计数器、刷新/访存裁决、刷新控制逻辑,是CPU和DRAM的接口
  • 不适合小电路
其他存储器

提高存储器速度的技术

  • 双端口存储器
    • 用于提高访存速度
    • 多端口:时间并行
    • 结构特点:
      • 具有多(两)组独立的读写端口
      • 允许多(两)个CPU或控制器从多(两)个端口同时异步访问存储单元
      • 当两个端口同时对同一单元数据时,就会引起竞争(访问冲突),产生错误
        • 解决方法:芯片内电路裁决;外部电路与写状态控制程序
      • 对同一单元写和读时,不算发生混乱
  • 多体(模块)交叉存储器
    • 通过扩宽数据总线的宽度提高访存速度
    • 多模块:空间并行
    • 下面的方式很像磁盘阵列RAID呢!
    • 顺序组织方式
      • 只有一个模块工作,通过增添模块来扩充存储器容量比较方便;但各模块串行工作,存储器的带宽受到了限制
    • 交叉组织方式
      • 连续地址分布在相邻的不同模块内,对连续字的成块传送可实现多模块流水式并行存取,大大提高存储器的带宽
    • 多体并行访问
    • 多体交叉访问
  • 相联存储器
    • 依据内容决定内容的地址或者寻找与其相关的内容(为什么有种软体的……emm……不记得什么模式了)
    • 用于许多领域,如高速缓冲存储器(想到Cache的作用的时候,觉得很有道理)及虚拟存储器中

只读存储器ROM

非易失性半导体存储器

只读存储器ROM:掩膜$ROM$

通过选中行和列,读出某一具体存储单元的数据(电路一般为场效应管,所以选中的行为高电平,选中的列为低电平,这样就可以将电路导通了)

一旦制出成品之后,其存储的信息即可读出使用,但不能改变;常用于批量生产,生产成本比较低。计算机中一些固定不变的程序或数据常采用这种ROM存储

一次性编程只读存储器$PROM$

允许用户对其进行一次编程——写入数据或程序,通过场效应管加熔丝(所以是一次的);一旦编程之后,信息就永久性地固定下来。用户只可以读出和使用,但再也无法改变其内容

可擦可编程只读存储器$EPROM$

通过浮栅场效应管,所以可以擦除(利用物理方法【紫外线】擦去的PROM,用电的方法对其重新编程

电可擦可编程只读存储器$E^2PROM$

通过浮栅场效应管+控制栅+电的控制

$\text{READY}/\overline{\text{BUSY}}$接口,实际上是一个状态指示,表示对对应数据区域进行擦除(用高电压进行擦除)以及写入操作,在信号有效期间,不可以再进行写入操作。

快擦除读写存储器$Flash\ Memory$:闪存

EEPROM能在字节水平上进行删除和重写,而闪存的大部分芯片需要块擦除(可以整个芯片擦写)

  • NOR型有独立的地址线和数据线,基本存储单元是bit,按存储单元进行删除和访问,容量较小,价格较贵
  • NAND型的地址线和数据线是共用的I/O线,基本存储单元是页(Page),类似硬盘的扇区;成本要低一些,而容量大得多
  • NOR型闪存比较适合频繁随机读写(并行存取)的场合,通常用于存储程序代码并直接在闪存内运行,如手机的“内存”,容量通常不大
  • NAND型闪存主要用来存储资料(串行存取),常用的如闪存盘、数码存储卡都是用NAND型闪存

Cache

用于存放正在执行程序正在使用数据,用以克服主存储器速度太慢的存储器是高速缓冲存储器Cache

整个Cache系统是由硬件实现的

Cache的出现是为了提高CPU访问存储器的速度,同时又可以降低成本

工作原理

主要依据:程序执行及数据访问的局部性原理

时间局部性:某位置若被访问,则近期内很可能又被访问

空间局部性:某位置若被访问,则临近的位置也可能被访问

位置

  • 基于程序及数据访问的局部性原理,在CPU和主存之间,尽量靠近CPU的地方设置一种容量比较小而速度高的存储器,将当前正在执行的程序和正在访问的数据放在其中
  • 在程序运行时,不需要从慢速的主存中取指令和数据,而是直接访问这种高速小容量的存储器,从而可以提高CPU的程序执行速度,这种存储器就称为高速缓冲存储器Cache

地址映射

Cache地址=Cache块号+块内地址

若Cache块号4位,块内地址8位,则每块$2^8=256B$,划分为$2^4=16$块,所以共4KB

主存和Cache按字节编址

映射:是MM地址到Cache地址

地址变换:是MM地址转换成Cache地址

地址映像、地址变换
全相连映射方式

Cache和主存分成容量相等的块,只是两者的块的个数各不相同


例如:主存64MB($2^{26}$),Cache为32KB($2^{15}$),若均将它们分为4KB($2^{12}$)的块。那么在全相联的方式下,Cache为3+12位,MM为14+12位。

所以Cache分为8块,每块4KB,而MM,分为16K块,每块4KB。

而对于两者连接的相联存储器,则是8块(同Cache),但每块只需要存放MM的块号就可以了,所以是$14b$,因此大小是$8*14b$


地址的映射法则是:主存的任何一块可以装入到cache的任何一块中


Cache块内地址=MM块内地址

相联存储器的存储内容=MM主存块号


Cache块内地址数=MM块内地址数

相联存储器的块数=Cache的块数

相联存储器的块内地址的位数等于主存区号的位数

我感觉就是MM和Cache的块内地址大小相同,然后两个块号通过相联存储器连接起来,而相联存储器的大小由两者构成,共有和Cache的块号一样多的块,然后每块的内容就是主存块号的地址,所以就是$2^{Cache块号位数}\cdot主存块号位数\ b$

优点:主存装入Cache特别灵活,主存的任一块都可装入Cache的任一块中,只有全部装满后才需替换。在替换时,根据算法只需淘汰掉任何一块即可装入新的

缺点:要求相联存储器容量大,而且比较检索时需全部检索相联存储器才能获得Cache的块号,地址变换机构复杂

直接映射方式

地址的映射法则是:主存各区中块号相同的块只能装入与Cache中相同的块号中


Cache的块号=MM的块号=相联存储器的块号

Cache的块内地址=MM的块内地址

相联存储器的内容=MM的主存区号


Cache的块号的位数=MM的号数的位数

Cache的块内地址的位数=MM的块内地址的位数

相联存储器的块数等于Cache的块数

相联存储器的块内地址的位数等于主存区号的位数

我感觉就是Cache的所有的东西是在MM的最后几位的,然后相当于MM有好多区,每个区里面都有一个Cache的感觉

优点:地址变换简单【只需根据主存地址中的块号——即相联存储器的地址去检索该单元存放的是否是给定的地址的区号即可。是,则命中;不是,则未命中。】「对于全相联映射的时候,要查找整个相联存储器,而直接映射只需看相联存储器对应的块即可」若命中,则由主存地址可直接获得Cache地址

缺点:效率低,只能替换块号相同的块,如果此块正在使用,则需要等待【即不同区的相同块号是不允许同时存在于Cache中】「因此,这种方式更适合于大容量Cache」

组相连映射方式

“组间直接,组内全相连”

该方式的基本思想是将Cache先分组,组内再分块;而内存是先以Cache的总容量分区,区内按Cache的方法分组,组内再分块。

地址的映射法则是:组间直接映射而组内的块全相联映射;也就是说主存的某号组只能装入Cache的同号组中,而组内的块可以装入同组号的任意一块中


Cache的组号=MM的区内组号=相联存储器的组号【所以对于一个内存地址需要查找(主存区号的位数+组内块号的位数)*(组内块数)

Cache的组内块号=相联存储器的块号

Cache的块内地址=MM的块内地址

相联存储器的内容=MM的主存区号+块号


Cache的组号的位数=MM的区内组号的位数

Cache的组内块号的位数=MM的组内块号的位数

Cache的块内地址的位数=MM的块内地址的位数

相联存储器的组数等于Cache的组数

相联存储器的块号等于Cache的块号

相联存储器的块内地址的位数等于主存区号+块号的位数

只需比较MM给出的那一组相联存储单元即可

替换算法

若Cache未命中,而Cache已装满,则需替换Cache中的块

  • 随机替换算法RAND
    • 未考虑信息的历史及使用情况,故命中率较低,现已不再使用
  • 先进先出算法FIFO
    • 只考虑了信息的历史情况,未考虑其使用情况,有局限性,命中率也不是很高
  • 近期最少使用算法LRU
    • 近期最少使用的块替换出去
    • 对每块设置一个计数器,某块每命中一次,就将其计数器清0而其他块的计数器加1,记录Cache中各块的使用情况
    • 当需要替换时,便将计数值最大的块替换出去
  • 最不经常使用算法LFU
    • 一段时间里被访问次数最少的块替换出去
    • 对每块设置一个计数器,且开始调入时计数为0。每被访问一次,被访问块的计数器加1
    • 当需要替换时,便将计数值最小的块替换出去。同时将所有各块的计数器清0
    • 将计数周期限定在两次替换的时间间隔内,不能完全反映近期的访问情况
  • 最优替换算法OTP
    • 要实现这种算法程序需执行两次
    • 不实用,但可以作为衡量其他算法的标准

主存——Cache内容的一致性

数据Cache的问题;因为程序Cache是只读的

写回法(Write Back)
  • 当CPU写Cache命中时,只将数据写入Cache而不立即写入主存。只有当被CPU写入修改的块被替换出去时才写回到主存中
    • 这种方法减少了访问主存的次数,但是存在不一致性的隐患
  • 如果CPU写Cache未命中,则写修改是将相应主存块调入Cache之后,在Cache中进行。对主存的修改仍留到待该块被替换出去时进行。
    • 实现这种方法时,每个Cache行必须配置一个修改位,以反映此行是否被CPU修改过,根据此标志决定是将该块写回主存还是直接丢弃不要
全写法(写直达法 Write Through)
  • 当CPU写Cache命中时,在将数据写入修改Cache的同时写入修改主存,较好地保证了主存与Cache内容的一致性
    • 当写Cache命中时,Cache与主存同时发生写修改,因而较好地维护了Cache与主存的内容的一致性
    • Cache中每块无需设置一个修改位以及相应的逻辑判断。缺点时Cache对CPU向主存的写操作无高速缓冲功能,降低了Cache的功效
  • 当写Cache未命中时,直接向主存进行写入。这时可以采用两种方式处理
    • WTWA:取主存块到Cache并为其分配一个行位置
    • WTNWA:不取主存块到Cache

性能分析

命中率

在一个程序执行期间,设$N_c$表示Cache完成存取的总次数,$N_m$表示主存完成存取的总次数,H定义为命中率,则有

一般来说,Cache的容量大,命中率会高(刚开始增加的比较快,后来增加的缓慢);但是对于块大小,则呈现抛物线的关系

加速比

$T_c$:Cache的访问周期 $T_M$:主存的访问周期

$T_B$:数据块调入Cache的块传输时间(或称块访问时间)

若Cache以一个字或一个字节(对主存的一次访问可以读写的字长)为一块,则Cache系统的平均访问时间T(average access time)为:

后面两种说的就是未命中的时候,是调回来写入还是写入后再调回;同时一般来说$T_M>>T_C$;所以最后一个可以近似于$T=HT_c+(1-H)T_M$

否则,用$T_x=nT_M$来替换$T_M$,其中$T_x$也称为调入时间或替换开销

块越大,命中率越高,替换开销也越大。但同样的操作平均访问周期T没有改变

在块相同的时候,命中率越高,加速比越大【因为$T_M>>T_C$,所以T会变小】,最大也只能接近$T_M/T_C$

成本

显然主存的容量远大于Cache的容量;同时,主存的单位价格低于Cache的单位价格;存储器的平均价格$C$由下式决定:

两级Cache

为了克服CPU和主存间的性能差距,使两者更好的匹配,可以在原有的Cache和主存之间增加另一级Cache,构成两级Cache系统;通常将第一级Cache做得比较小,而且速度很高;第二级做得比较大,其速度也比较高;当第一级Cache未命中时,再到第二级Cache中去搜索

$总失效率=(失效率)_{第一级}*(失效率)_{第二级}$

例如在10 000次访存中,第一级Cache失效400次,第二级Cache失效4次,则总失效率=4%*1%=0.04%

目前,均将第一级Cache集成在CPU内部(称L1);而将第二级Cache放在CPU外部外接(称L2)

还可采用三级Cache

练习题

全相联方式:

  1. Cache:2位 10位 内存: 10位 10位

  2. 654E2H=0110 0101 01 00 1110 0010B

    所以块号是00 01 1001 01B=195H->2->10

    所以高速缓存地址10 00 1110 0010B=8E2H

  3. D9D9DH=1101 1001 11 01 1001 1101B

    所以块号是00 11 0110 0111B=367H->0->00

    所以高速缓存地址00 01 1001 1101B=19DH

直接相联方式:

  1. MM:区号+块号+块内地址

    区号:$256MB/16KB=2^{28}/2^{14}=2^{14}$个区,所以用14位来表示区号

    对于块的部分,首先来计算Cache的问题,Cache的块为4个32位的字,由于主存和Cache按字节编址,所以我们先算出一块的大小(换算成字节)

    Cache一块的大小$4*(32/8)=16B$

    因此:

    块号:$16KB/16B=2^{10}$个块,所以用10位来表示块号

    块内地址:因为一块是16B,所以我们用4位来表示块内地址

    因此内存地址总共28位【这个部分也可以用内存为$256MB=2^{28}B$来得到】

  2. ABCDEF8H=1010 1011 1100 1101 1110 1111 1000B

    对于直接相联方式,直接取最后的14(10+4)位即可,所以调入Cache的1EF8H中

组相联映射方式:

  1. $16KB=2^{14}B$,所以Cache地址有14位;每组4块,所以块号用2位表示;每块8个字,每个字32位,所以块大小为$8*(32/8)=32B=2^5B$,所以块内地址用5位表示;Cache总共14位,所以组号7位
  2. 主存地址总共有$2MB=2^{21}B$,21位;所以MM的区号用7位表示;组号用7位;组内块号用2块;块内地址用5位来表示

  1. 将4片6264连接到8086系统总线上,要求内存地址范围为70000H~77FFFH

首先,6264每片是$8K8b$,需要注意的是*8086系统总线是16位的(8088系统总线是8位的),而6264是8位的。所以我们需要先进行位扩展,两个6264作为一个字,因此分成两个部分,所以分别是70000~73FFFH、74000~77FFFH;然后对应为0111 00xx xxxx xxxx xxxx0111 01xx xxxx xxxx xxxx

连接结果如下图

输入输出系统

输入输出系统又称为I/O系统;总线系统

总线

总线系统是计算机系的重要组成部分;

总线技术是计算机系统的重要技术,其结构和性能对计算机系统的性能有很大影响

广义概念:总线是连接两个或两个以上数字元件(数字系统)的信息通路

计算机中的概念:总线是计算机系统多个功能部件之间进行数据传送的公共通路

磁盘接口总线(通信【外】总线的标准):

  • RS-232C
    • 串行外总线
    • 传输线比较少
    • 传输距离远
    • 多种可供选择的传送速率
    • 采用非归零负逻辑工作
    • 结构简单、实现容易
  • SCSI
    • 并行外总线
    • 面向服务器、RAID等高端外存储器市场
    • 特点:
      • 适应范围广
      • 传输速率高
      • 提高了CPU效率
      • 支持多任务
      • 智能化
    • 问题:
      • 传输速率难以再提高
      • 不支持热插拔
      • 挂接的设备有限
      • 总线电缆的限制
  • SAS
    • 串行SCSI
    • 特点:
      • 高速率
      • 好的兼容性
      • 点对点架构
      • 全双工设计
      • 更强的扩展性
      • 更长的电缆长度
      • 电缆/接头紧凑设计
      • 支持热插拔/热交换
      • 全球唯一的设备ID
      • 保留SCSI指令集
  • ATA
    • 前身为IDE及EIDE
    • 广泛用于家用个人计算机,用来连接硬磁盘、光盘等设备
    • 并行总线
  • SATA
    • 串行的ATA
    • 特点:
      • 高速度
      • 可连接多台设备
      • 支持热插拔
      • 内置数据校验
  • USB
    • 低速外设:键盘、鼠标;高速外设:U盘、移动硬盘、多媒体外设
    • 特点:
      • 传输速率高
      • 支持即插即用
      • 支持热插拔
      • 良好的扩展性
      • 可靠性高
      • 统一标准
      • 总线供电
      • 传送距离
      • 低成本
    • 4个信号
      • $V_{USB}(+5V)$
      • GND(地)
      • D+(信号正端)
      • D-(信号负端)
    • 主控器:控制USB总线上的数据和控制信息的流动
  • IEEE-1394
    • 串行外总线
    • 特点:
      • 传输速率高
      • 支持热插拔
      • 即插即用
      • 兼容性好
      • 支持同步和异步传输
      • 构成网络形式灵活
      • 传送距离远
      • 接口设备对等
      • 总线供电
      • 价格低

系统【内】总线的标准:

  • VESA
  • SID
  • CPCI
  • PC/XT
    • 20个地址线
    • 8条数据线
  • ISA
    • 24个地址线
    • 16位(数据线)
  • EISA
    • 32位数据线
  • PCI
    • 特点:
      • 高传输性能
      • 总线设备工作与CPU相对独立
      • 即插即用
      • 支持设备多主控
      • 错误检测及报告
      • 两种电压环境
      • 两种兼容卡槽
    • 32位数据总线(短卡)和64位总线(长卡)
    • 并行传输方式(多条信号线)
  • PCI-E
    • 串行传输方式,进行点对点传输,每个通道独享带宽
    • 支持双向传输模式和数据分通道传输模式
    • 与PCI总线保持良好的继承性,从而可以保障软件的继承和可靠性
    • 降低了系统硬件平台设计的复杂性和难度,大大降低了系统的开发设计成本,极大地提高了系统的性价比和健壮性

分类

一般分类:

  • 片内总线
  • 元件级总线(板内总线)
  • 内总线(系统总线)【数据总线传送指令、控制字、操作数「目的操作数、源操作数|操作数本身、操作数地址、操作数地址的计算方法」、中断类型码等、控制总线传送握手信号等、地址总线】I/O总线的数据线上传输的信息可以有:I/O接口中的命令字,I/O接口中的状态字,中断类型号
  • 外总线(通信总线)

单处理器系统中:

  • CPU内部总线
  • 系统总线
  • I/O总线

其中标准总线又分为正式标准(IEEE等)和工业标准(厂家)

地址线的功能是:用于指定主存和I/O设备接口电路的地址

结构

  • 单总线结构
  • 双总线结构
  • 多总线结构

性能描述

  • 总线带宽
    • 总线带宽定义为总线的最大数据传输率,数据传输率定义为每秒传输的字节数
    • 一般以MB/S作为单位
    • $总线的带宽=总线的工作频率*总线的位宽/8$
  • 总线的位宽
    • 指的是总线能同时传送的二进制数据的位数,或数据总线的位数(一个时钟周期传送的字节数)
    • 总线的位宽越宽,每秒钟数据传输率越大,总线的带宽越宽
  • 总线频率
    • 工作频率越高,总线工作速度越快,总线带宽越宽
  • 总线宽度
    • 指的是总线的线数,它决定了总线所占的物理空间和成本(地址线宽度,数据线宽度)
  • 总线负载
    • 指连接在总线上的最大设备数量
  • 是否支持猝发传送等

总线的特性:机械特性、功能特性、电气特性、时序特性

信息传送

传送方式

串行传送

当一个数据的各位利用一条数据线依次进行传输时构成串行传送;将数据沿一条传输线一位接一位地传送

并行传送

当一个数据的各位利用多条数据线同时传输时构成并行传送


在总线上通信需要收发双方的时间配合或控制,这种时间配合或控制称为总线定时总线通信,其实质是一种协议或规则

它有两种基本方案:同步异步(在串行传送和并行传送中都有)

同步传送

同步总线包括一个收发双方公用的时钟(即总线时钟,在控制线中)和一个固定的协议,该协议用于与时钟相关联的通信

  • 同步定时方式不需要应答时序简单实现方便
  • 总线速度以慢速设备而定,总线不宜过长
  • 串行时,发送端和接收端的频率保持严格一致;并行时,数据的传送与总线的时钟严格一致
异步传送

异步总线不用公共时钟定时,总线中没有时钟线,串行使用增加起始位、(校验位、)停止位、(空闲位);并行使用握手协议

  • 异步定时方式允许总线周期长度可变,可以支持慢速与快速设备在同一总线上连接
  • 总线控制复杂,有三种方式:非互锁、半互锁、全互锁
  • 每传送一个字符,都要增大大约20%的用于同步和帧格式检测的附加信息位,降低了传送效率

总线的仲裁

借助于总线连接,计算机在各系统功能部件之间实现地址、数据和控制信息的交换,并在争用资源的基础上进行工作

当多个设备提出占用总线的请求时,以某种方式选择其中一个设备占用总线。一般需要总线仲裁部件

分为集中式仲裁(如PCI总线)【只有一个仲裁器】和分布式仲裁【每个主控设备都有自己的仲裁号和仲裁器,存在一个共享的仲裁总线】

输入输出基本原理

外部设备

输入设备

输出设备

外部存储设备

又称外部存储器、辅助存储器

分为磁存储器和光存储器

磁存储器

磁记录原理:利用硬磁材料剩余磁状态保存二进制信息

记录层可以是SNNS这样的水平放置的;也可以是$\frac{SN}{NS}$这样竖直放置的(这种记录密度非常高)

当磁头和磁性记录介质间有相对运动时,通过电磁转换完成读、写操作

磁记录方式:磁记录方式是一种编码方式,是指按某种方案(规律),把一连串的二进制信息变换成存储介质磁层中一个磁化翻转状态序列,并使读、写控制电路能容易、可靠地实现转换

  • 有归零制(RZ)、不归零制(NRZ)、见1就变不归零制($NRZ_1$)、调相制(PM)【很像曼码,1上升,0下降】、调频制(FM)【每位都会变,但1增加一个中心变换】和改进调频制(MFM)【1只中间变换一次,单个0,电流不变,多个0,每位变换一次】等
  • 磁记录方式对提高记录密度、可靠性有重要影响

性能评价

自同步能力:从单个磁道读出的脉冲序列中提取同步时钟脉冲的难易程度

RZ是1;NRZ、NRZ1没有自同步能力为0;FM、MFM、PM均为0.5

编码效率(记录密度):位密度与最大磁化翻转密度之比

RZ、FM、PM编码效率为0.5;MFM、NRZ、NRZ1编码效率为1

其它:读分辨率、信息相关性、信道带宽、抗干扰能力

硬磁盘存储器

磁盘可分为软盘硬盘两种

种类:

  • 按照磁头的工作方式
    • 固定磁头
    • 移动磁头
  • 按盘片可换与否
    • 固定盘存储器
    • 可换盘存储器

磁盘存储器由驱动器(盘片【每个盘片两个记录面,每个记录面都配有一个独立的磁头】、转轴、读写磁头、机械臂、控制器等)和控制器组成

磁盘结构:扇区和磁道(见上图的指示说明)、柱面(同一个磁道组成的)

磁盘寻址信息:柱面号(磁道号):磁头号:扇区号

数据记录:按柱面逐道记录的。一个柱面记录满,再移动磁头记录下一个柱面

扇区之间有间隔:起到缓冲消除主轴转速不稳的影响的作用

主要技术指标

主要技术指标有:容量、平均存取时间、转速和数据传输率等

存储密度:道密度和位密度

道密度:沿磁盘半径方向,单位长度内磁道的数目

位密度:在最内圈的磁道上,沿磁盘圆周方向,单位长度(mm或英寸)内存储的二进制位的个数

存储容量

非格式化容量位密度*内圈磁道周长*磁道总数

格式化容量扇区容量*每道扇区数*磁道总数

格式化容量比非格式化容量小

平均寻址时间/平均存取时间

寻道时间:与磁头径向移动速度有关;是指磁头移动到目标磁道(或柱面)所需要的时间

旋转等待时间:与磁盘旋转速度有关;是指待读写的扇区旋转到磁头下方所用的时间

转速:指硬盘内驱动电机主轴的旋转速度,单位为RPM(转/分钟)

数据传输率(B/s):扇区内字节数*每道扇区数*磁盘转速

磁盘接口总线:SCSI、ATA(多用于个人计算机)、SAS(多用于服务器)、SATA(前面四个都是构成虚拟存储器的)、USB、IEEE-1394(这两个是移动磁盘常用的)等

廉价的冗余磁盘阵列RAID

优点:

  • 成本低功耗小传输速率高
  • 可以提供容错功能
  • 同样的容量下,RAID比起传统的大直径磁盘驱动器价格要许多

RAID 0:冗余无校验的磁盘阵列;【数据安全性不高,但对速度要求很高的场合】

RAID 1:镜像磁盘阵列[增加了冗余];【对数据安全性很高,而且要求能够快速恢复被损坏的数据的场合】

RAID 2:位交叉并行汉明纠错阵列;【可靠性高,并自动数据恢复,采用并行存取技术】

RAID 3:位交叉奇偶校验盘阵列;【写数据的时候,需要访问所有的磁盘】

RAID 4:奇偶校验扇区交错阵列;【写数据的时候,只需访问被写磁盘和校验盘即可】

RAID 5:循环奇偶校验阵列;【目前采用最多、最流行的方式,RAID3和4数据读取速度很快,但写数据速度下降;而RAID5读写都有很好的性能】

RAID 6:二维奇偶校验阵列;【在两个磁盘出现故障的情况下仍能实现数据重建】

RAID7:在RAID6的基础上加高速缓存,以提高数据传输率

移动存储设备

移动磁盘【抗振性能好,可随身携带;功耗低,可直接由USB总线供电,使用非常方便;价格低廉】

闪存盘(U盘)【RAM;采用半导体存储器构成,其体积,重量轻,耗电少,抗振,便于携带,使用十分方便;4条传输线,2条用于数据传送,另外2条用于提供5V*500mA电源】

固态硬盘(SSD)【又分为FLASH芯片和DRAM作为传输介质的两种】【可靠性高,速度快,耗电低,体积小,抗振好】

光存储设备

当光束照射光道时,凸起和凹陷的交界处的反射光会产生变化,从而读出记录的信息;例如DVD

主要技术指标
  • 尺寸
  • 存储容量
  • 传输速率
  • 平均存取时间
  • 缓冲区大小
  • 接口类型
  • 其它

程序控制输入/输出技术

I/O系统=外部设备+设备控制器(设备适配器、接口)

外设的编址:

I/O设备编址:I/O地址、端口地址(设备号、设备代码)

根据外设地址与内存地址的关系,有两种编址方式:

  • 外设与内存独立编址方式
  • 外设与内存统一编址方式,又称存储器映射编址方式【用于内存的指令都可以用于外设,这给使用者提供了极大的方便;但是由于外设占用内存地址,内存不能再用,就相对减少了内存可用范围;而且,从指令上不易区分是寻址内存的指令还是用于输入/输出的指令】

设备控制器(接口)

接口包含三个部分:数据口、状态口、控制口

即有关于数据(数字量、开关量【一位二进制码】和模拟量【连续的信息】)【双向的】、状态【外设的状态,例如BUSY、READY信号】【外设->CPU】、命令【控制外设工作的信号】【CPU->外设】三个方面的信息

所以接口和外设之间有三类信号,分别是数据信号状态信号控制信号

能被CPU读或写的寄存器称为“端口”;一个接口可能包含几个端口,也可能就包含一个端口

功能:

  • 传递数据
  • 设备选择
  • 设备控制
  • 信号形式转换
  • 速度匹配
  • 数据缓存
  • 错误检测
  • 负载匹配
  • 支持中断
  • 智能控制(对于某些复杂的外设)

类型:

按信息传送的方式分:并行接口、串行接口/同步方式、异步方式

按数据的传送控制方式分:(五种基本的输入/输出方式)

  • 程序直接控制方式(多用于慢速的外设)
    • 无条件传送方式
    • 查询方式
  • 中断方式
  • 直接存储器存取(DMA)方式
  • 通道控制方式与外围处理机方式
程序(直接)控制I/O方式
无条件传送方式

是指可以在需要的时刻让CPU直接与外设进行输入输出操作,也即CPU仅需要通过I/O指令即可由接口获取外设数据或为外设提供数据

当它工作时,随时都准备好接收CPU的输出数据或它的数据随时都是准备好的,CPU是什么时候读它的数据均可以正确地读到。也就是说,外设无条件准备好向CPU提供数据或接收CPU送来的数据。所以,CPU可以无条件地向这样的外设传送数据。在CPU与这样的外设交换数据的过程中,数据交换与指令的执行是同步的,也称为同步传送

如:发光二极管,数码管,开关,继电器和步进电机

接口输出的数据常作为控制信号使用;接口输入的数据常作为状态信号使用

查询方式

是指CPU通过指令询问外设的工作状态,然后根据外设的状态确定对其进行I/O操作的时刻

查询方式是一种同步机制,在对于多个外设的时候,以轮询的方式依次对各个外设进行服务。轮询的顺序确定了外设的优先级,而轮询的顺序又是根据外设的重要性确定

轮询的方式:

缺点:

  • 降低了CPU的效率
  • 外部的突发事件无法做出实时响应(与中断方式的区别)【不能保证数据的实时传输】

优点:

  • 原理易理解,实现容易

适用场合:实时性要求不高的工程应用中

中断方式

中断是一种比较复杂的输入/输出技术,实现中断需要较多的软硬件支持

中断的概念

中断:是指某事件的发生引起CPU暂停当前程序的运行,转入对所发生事件的处理处理结束又回到原程序被打断处接着执行这样一个过程

中断源:引起中断的事件(内部错误、外设请求等)【内部中断源、外部中断源】

中断的优点与缺点

使CPU与外设能够并行工作,解决了高速CPU与慢速的外存了不匹配的矛盾,既能提高CPU的效率能对突发事件做出实时响应,但中断实现起来比较麻烦调试也比较困难

中断的过程
  1. 中断请求:外设->CPU【电平信号或边沿信号】【有效的中断请求信号必须保持到被CPU发现;当CPU响应请求后,应当把有效的请求去掉「保证CPU不会对同一请求造成多次响应,而且也为下一次请求做好了准备】
  2. 中断响应:CPU->外设
    • 中断承认
      • 一条指令执行结束
      • CPU处于开中断状态(IF=1
      • 没有复位RESET、保持HOLD和非屏蔽中断请求NMI等优先级高于INTR的请求发生
      • 开中断指令STI、中断返回指令IRET特殊指令执行完,还需要执行另外的一条指令后才能响应INTR请求
    • 断点保护【CPU硬件在中断响应过程中自动完成;由程序员在中断服务程序中利用指令来完成】
    • 中断源识别【软件查询「逐个查询」、中断向(矢)量法「中断向量就是中断服务程序的入口地址」】
  3. 中断处理:中断服务程序ISR
  4. 中断返回【中断返回指令和程序员的编程来恢复】
    • 断点恢复
    • 返回

中断的频度$F=1/T$,其中T是从请求到返回需要的时间;在此频度下达到中断饱和(在此中断频度下,CPU只能处理中断,不能再做其他事)

实现中断的软硬件技术

中断技术是计算机结构和应用的关键技术之一

  1. 中断请求信号的有效性——信号形式应满足CPU要求

    • 电平类中断请求信号

      中断请求信号应保持至CPU发现

      CPU响应后,应及时撤除中断请求信号

    • 边沿类中断请求信号

      中断请求信号的锁存撤消

  2. 中断响应的条件

    CPU对内部的中断源提出的中断请求必须接受,而对外部中断源提出的中断请求是否响应取决于外中断源类型及响应条件

    • 一条指令执行结束:CPU在每条指令的最后一个时钟周期检测中断请求

    • 不是一条特殊指令,如STI、IRET

      开中断指令STI、中断返回指令IRET等结束后不立即响应中断,还需要执行另外的一条指令后才能响应INTR请求

      前缀指令,如REP MOVSB,中间也不可以响应中断

    • CPU允许中断(开中断IF=1

    • 无更紧迫的事务;没有比它优先级更高的请求存在

      • 如复位、DMA、更高级中断等
  3. 中断源识别

    • 软件查询法
    • 中断向量法——每个中断源对应唯一的向量码【中断向量码也称中断类型码,共有256个不同方式的中断,每个中断源用一个长度为8位的编码标识】
  4. 断点保护及恢复

    断点信息——断点地址、断点状态

    断点保护——保护断点信息

    ​ PSW、CS、IP压栈(CPU硬件自动完成)

    ​ 其他寄存器(AX、BX……)压栈(ISR完成)

    断点恢复——恢复断点信息

    ​ IP、CS、PSW弹栈(CPU硬件自动完成)

    ​ 其他寄存器(AX、BX……)弹栈(ISR完成)

  5. 中断优先级

    按照重要性、紧迫性、速度等要求

    不同优先级的中断源同时提出中断要求(响应最高优先级的中断源)

    中断优先级控制方案有:

    • 软件查询
    • 利用可编程中断控制器PIC
    • 硬件链式优先级排队电路
    • 硬件优先级编码比较电路
  6. 中断嵌套

    对于CPU正在进行中断服务时,又有更高优先级的中断源提出中断要求,如果可以响应的话,有可能产生中断嵌套(多级中断、多重中断)

    对于嵌套层数,可以直接限制也可以由堆栈空间来限制

    也可以不允许高优先级来打断进行的中断,通过断点保护之后,开中断(IF=1)【开中断的意思不是中断开始,而是打开可以中断的标志)

    不允许中断的中断服务程序框图:中断服务程序入口->断点保护->对中断源服务->断点恢复->开中断->中断返回RET

    允许中断的中断服务程序框图:中断服务程序入口->断点保护->开中断->对中断源服务->关中断->断点恢复->开中断->中断返回RET

中断的应用

中断技术使CPU与外设并行工作,解决了快速CPU与中、慢速外设速度不匹配的矛盾,提高了CPU的工作效率

除此之外,中断技术在实现实时处理、分时操作、故障处理、多机连接、人机联系等方面均有广泛应用

x86中断系统

8086(88)中断系统可以容纳最多256个中断源,所有中断源统一编码,每个中断源用一个字节型编码标识,该编码称为中断向量码(号),它是CPU识别中断源的标记

中断源类型:

  • 内部中断:由CPU内部事件及执行软中断指令产生

    • 除法溢出【中断向量码0「CPU内部硬件产生」】

    • 溢出中断(INTO\OF=1)【中断向量码4H「CPU内部硬件产生」】

    • 单步中断(TF=1)【中断向量码1H「CPU内部硬件产生」】「优先级比INTR还要低」

    • 断点中断(INT 3 CCH)【中断向量码3H「CPU内部硬件产生」】

    • 软件中断(INT nnH由用户指定一个字节的中断向量码「包含在指令中」)

      CPU取出INT 40H指令,经指令译码获知这是一条中断指令。并且得到该软件中断向量码是40H。接着将F、CS和IP压入堆栈保护起来,并关中断。而后,将中断向量码40H乘以4得到中断向量表地址。从该地址开始的顺序两个单元的内容送IP下两个单元的内容送CS。这就转向了中断服务程序。当然,在此之前中断程序服务的入口地址早已填入中断向量表中。

  • 外部中断:外部中断源产生对CPU请求而引发的

    • 非屏蔽中断NMI【中断向量码02H】

      • 用于电源错、内存或总线错
      • 上升边有效
      • 不受IF影响
      • 优先级比INTR高
      • 中断向量码「CPU内部硬件产生」由CPU内部产生,为02H
      • 外部非屏蔽中断NMI的响应过程:

      CPU在一条指令执行结束时,检测NMI发生。CPU内部硬件电路自动产生该中断的中断向量码02H

      接着将F、CS和IP压入堆栈保护起来,并关中断。而后,将中断向量码02H乘4得到中断向量表地址

      从该地址开始的顺序两个单元的内容送IP下两个单元的内容送CS,这就转向了中断服务程序。当然,在此之前中断服务程序的入口地址已填入中断向量表0008H到000BH中

    • 可屏蔽中断INTR

      • 用于一般的输入/输出
      • 高电平有效
      • 只有IF=1才可能得到响应
      • 中断向量码「由CPU从数据总线上读取」由外部硬件设定,所以需要一个INTA周期从$D_0˜D_7$读中断向量码
      • 可屏蔽中断INTR的响应过程:
      • 第一个负脉冲用于响应提出中断请求的外设(接口)
      • 第二个负脉冲启动外部中断系统,通知它将提出中断请求的中断源一个字节中断向量码放到数据总线

      外设在CPU的INTR端加上高电平,向CPU提出可屏蔽中断请求。CPU在一条指令执行结束满足IF=1等条件,对该中断请求作出响应

      首先由CPU内部硬件从中断响应端$\overline{INTA}$送出两个负脉冲,并在第二个负脉冲期间数据$D_0˜D_7$上获得提出中断请求外设所提供的中断向量码

      接着CPU将断点信息将F、CS和IP压入堆栈保存起来,并关单步、关中断(即使TF=0、IF=0)。将中断向量码乘4得到中断向量表地址

      从该地址开始的顺序四个单元中分别读出事先已放在中断向量表中的INTR的中断向量,放入IP和CS中,从下一个总线周期开始,CPU就转向了INTR中断服务程序的入口地址CS*16+IP,开始执行INTR中断处理。

在8086(88)系统中,中断控制是由CPU与中断控制器共同完成的(硬件自动完成),这使得中断过程简化

中断响应过程:中断请求,中断响应,中断处理,中断返回

内存中开辟了1kB的存贮区作为中断向量表【4个字节作为一组(这也是为什么上面将中断向量码乘以了4),共256组,所以是256*4=1024字节=1kB

中断向量码:与中断源一一对应

中断向量表地址:中断向量码n*4

中断服务程序入口地址(中断向量):CS:IP,IP是偏移地址,CS是段地址

填写中断向量表有直接编程序填写中断向量表DOS系统填写中断向量表两种方法

中断控制器8259

$ISR_x=1$时,表示$IR_x$正在中断服务

三个状态寄存器:IRR、ISR、IMR

可以级联

  • 工作模式
  • 优先级管理方式:
    • 一般全嵌套方式:固定优先级规定所管理的中断源(IR0~IR7)中IR0的优先级最高,IR1次之,优先级依次降低。并且,这一优先级顺序固定不变优先级高的可嵌入优先级低的服务程序
    • 自动循环优先级:使多个中断源具有相同的优先级(以IR0先最高开始)
    • 特殊循环优先级:(以指定的最高开始)
    • 特殊全嵌套方式:还允许同级中断请求并能得到响应【级联中,主控芯片采用这种方式】
  • 屏蔽模式
  • 中断结束方式
    • 自动结束【只有一片8259且不会出现中断嵌套时】
    • 一般结束方式【全嵌套方式下】
    • 特殊结束方式【非一般全嵌套方式下】
  • 中断触发方式
    • 电平触发:高电平,维持到中断响应,及时撤销
    • 边沿触发:上升沿,高电平维持到中断响应
  • 中断向量号(码)
    • 后面8259自动将中断请求输入引脚的序号填写在$D_0˜D_2$

INT为8259的中断请求输出信号

$\overline{INTA}$为中断响应输入信号

CAS为双向级联控制线

OCW操作命令字:OCW1【设置对8259中断的屏蔽操作】、OCW2【设置优先级、循环方式及中断结束方式】、OCW3【设置查询方式、特殊屏蔽方式、读IRR或ISR的当前状态】

直接存储器存取(DMA)方式

由于无条件传送、查询传送、中断传送这几种方式都是通过CPU执行程序实现的占用了CPU资源,传送速度慢(实际上是软件传送方式,传输速度约为几十到几百KB/秒)

DMA方式不是在程序控制下进行的,而是以纯硬件控制的方式进行的;DMA是传输速度最高的方式

DMAC:DMA控制器

DMAC与CPU的总线控制权交换方式:

  • 停止CPU方式

    • 基本过程

      1. 外设DMAC提出DMA传送请求
      2. DMAC通过CPU上的HOLD向CPU提出DMA请求
      3. CPU在一个总线周期(指令周期包括多个总线周期)结束时对该请求作出响应:使CPU上的三态信号置高阻,即放弃了对总线的控制权。同时送出HLDA高电平加到DMAC上,让DMAC知道其请求已获得响应
      4. DMAC外设响应信号,告诉外设其请求已获得响应
      5. DMAC获得总线控制权开始进行DMA传送:DMAC送出地址信号和控制信号,实现外设与内存内存与内存数据传送
      6. 传送结束时DMAC向CPU发送无效的HOLD信号来撤销对CPU的DMA请求
      7. CPU收到信号后,送出无效的HLDA信号,重新获得总线的控制权,继续执行指令。

  • 其中HOLD 保持请求;HLDA 保持响应

  • 周期挪用方式

    • 在常规程序运行中,CPU要花费很多时间执行内部CPU指令,在这些指令执行期间,CPU不需要总线的控制,也不访问内存
    • 周期挪用方式利用CPU做内部操作指令译码未使用总线的时间,由DMAC迅速“窃取”一个总线周期的总线控制权,做一个数据传输,然后立即总线控制权交还给CPU
    • 又分为固定挪用周期,周期延长
    • 在需要进行DMA传送时才占用系统总线,故能更好地提高总线的利用效率
  • CPU与DMA交替分时工作

    • 把时间分成两个时间片,一片分给CPU,一片分给DMAC,使CPU和DMAC交替地访问主存
    • 由于DMA不像CPU的工作每时每刻都在进行。DMA传送一般只是偶尔为之。这种方式实现简单,但有时会使总线闲置而影响CPU的处理速度
中断和DMA的区别

CPU周期和指令周期是不同的,区别中断断点和DMA断点的区别

区别 中断方式 DMA方式
请求对象 程序控制权 总线使用权
响应时刻 指令周期结束 CPU周期结束
CPU的作用 全程控制,硬件控制逻辑和中断处理程序的结合 仅参与DMA的启动和结束
处理异常的能力 具有处理异常能力 仅进行数据传送
现场的保护 需要保护CPU现场 不会改变现场
优先级 比DMA低 比中断高
外设与主存的连接方式 需经过CPU 数据通路直接连接
DMA控制器8237

在CPU控制系统总线执行程序时,DMAC作为接口接在系统总线上。这时它是作为总线上的一个接口存在的。CPU可以执行一段程序对它初始化,包括将传送的内存起始地址写入内存地址寄存器、将要传送的字节数写入字节计数器

  1. 8237工作有两种周期,即空闲周期和工作周期
    • 单字节传输方式:DMA控制器每次请求总线只传送一个字节数据,传送完后即释放总线控制权
    • 块传输方式(也称组传输方式):DMA控制器每次请求总线连续传送一个数据块,待整个数据块全部传送完成后再释放总线控制权
    • 请求传输方式:与块传输方式类似,不同的是每传输完一个字节,DMA控制器都要检测由I/O接口发来的DMA请求信号是否仍然有效;如果有效,继续传输;否则,暂停传输,将总线控制权给CPU,直至DMA请求信号再次变为有效,数据传输则从刚才暂停的那一点继续进行下去
    • 当一片8237的4个通道不够用时,还可以多片级联,构成更多个DMA通道。DMAC的多个通道可实现优先级控制
  2. 传送类型
    • 接口到存贮器的传送
    • 存贮器到接口
    • 存贮器到存贮器
  3. 优先级
    • 固定优先级
    • 循环优先级
通道控制方式与外围处理机方式

DMA控制器的出现已经减轻了CPU对数据输入输出的控制、使得CPU的效率合显著的提高,而通道的出现则进一步提高了CPU的效率

因为通道是一个特殊功能的处理器(称为IO通道处理机、IO通道控制器);它有自己的指令和程序专门负责数据输入输出的传输控制;而CPU将“传输控制”的功能下放给通道只负责“数据处理”功能。这样,通道与CPU分时使用内存,实现了CPU内部运算与I/O设备的并行工作

主要特点:

  • CPU将数据传送的控制功能交给IO通道处理机去完成,可以实现两者的并行工作
  • IO通道处理机接在系统总线上,接收来自CPU的命令。同时,它又通过自身的总线与外设的设备控制器相连接。
  • 整个系统分成三层管理:CPU管理通道、通道管理设备控制器和设备控制器管理外设

具有两种类型的总线,一种是存储总线,它承担通道与内存、CPU与内存之间的数据传输任务;另一种是通道总线,即I/O总线,它承担外围设备与通道之间的数据传送任务;这两类总线可以分别按照各自的时序同时进行工作

通道总线可以接若干个设备控制器,一个设备控制器可以接一个或多个设备

逻辑结构上讲,I/O系统一般具有四级连接

CPU与内存<-->通道<-->设备控制器<-->外围设备

存储管理部件是内存的控制部件,它的主要任务是根据事先确定的优先次序,决定下一周期由哪个部件使用存储总线访问内存

通道的类型:

  • 选择通道(高速通道)
    • 可以连接多个设备,但在某一段时间内通道只能选择一个设备进行工作
    • 只有当这个设备的通道程序全部执行完毕后才能执行其他设备的通道程序
    • 主要用于连接高速外围设备,如磁盘、磁带,信息以成组方式,以数据块为基本单位进行高速传输
    • 通道利用率不高
  • 数组多路通道
    • 可以连接多个设备
    • 当某设备进行数据传送时,通道只为该设备服务
    • 当设备在执行寻址等控制性动作时,通道暂时断开与这个设备的连接,挂起该设备的通道程序,去为其他设备服务,即执行其他设备的通道程序
    • 像一个多道程序的处理器
    • 保留了选择通道的高速率传送的优点,又能利用等待完成某些辅助操作的时间为其他设备服务,具有更高的通道利用率
  • 字节多路通道
    • 主要用于连接大量的低速设备,如键盘、打印机等
    • 与数组多路通道一样,一段时间内可有多个设备同时工作,交替地执行多个设备的通道程序
    • 利用传送两个字节之间的空闲时间,为其他设备服务
  • 数组多路通道和字节多路通道的不同点:
    • 数组多路通道允许多个设备同时工作,但只允许一台设备进行传输操作其他设备只能进行控制操作;而字节多路通道不仅允许多个设备同时工作,而且允许它们同时进行传输操作
    • 数组多路通道的数据传送是以数据块为基本单位,通道必须在为某设备传送完一个数据块后,才能为其他设备传送数据块。而字节多路通道与设备间的数据传送是以字节为单位的,通道在为一个设备传送一个字节后,即可为另一设备传送一个字节

系统可以兼有1,2,3种上述通道类型

通道结构的发展:

  • 通道结构的I/O处理器
    • 输入输出处理器IOP
    • 可以和CPU并行工作,提供高速的DMA处理能力,实现数据的高速传送
    • 不独立于CPU工作,是主机的一个部件
  • 外围处理机PPU
    • 独立于主机工作的
    • 自己的指令系统,完成算术/逻辑运算,读/写主存储器,与外设交换信息等
    • 一般用于大型高效率的计算机系统

常见接口芯片

可编程并行接口8255

结构与功能

  • 三个八位I/O端口(标识为A、B、C)按组进行编程

    • A组:端口A+端口C的高4位
    • B组:端口B+端口C的低4位
  • 由CS引脚选中,进行端口编程、读或写

  • 内部寄存器

    • A、B、C数据寄存器(读/写)
    • 命令字寄存器
  • PA 八位输出寄存/缓冲器、

    ​ 八位输入锁存器

  • PB八位输出寄存/缓冲器、

    ​ 八位输入缓冲器

  • PC八位输出锁存/缓冲器、八位输入缓冲器

    ​ 可以被分成两组4位的输入输出端口使用

  • RESET复位,复位后,A、B、C口均被定义为输入状态

有个RESET但是8253没有

工作方式

8255有3种工作方式,可用软件编程来指定

C口的按位操作是通过将按位操作控制字写入控制寄存器CR来实现

  • 方式0,基本输入输出
    • 广泛使用,可满足无条件传送和查询方式
    • A、B、CH、CL 4个端口可以被分别设置,均被定义为数据I/O口
    • 或输入、或输出,共16种情况
    • 输出均有锁存能力,输入全无锁存能力
    • 简单的输入输出操作,可使用无条件数据读写方式实现与外设的交互
    • 可以将联络信号接入C口,实现查询方式
    • 8255作为打印机接口,工作于方式0,其中PC6接打印机的$\overline{STB}$(8255传输驱动打印机的信息),PC2接打印机的$\text{BUSY}$(打印机传输给8255信息)
  • 方式1,选通输入输出
    • 分为两组(A组、B组)实施
    • 具有联络(握手)信号/中断请求输出的数据传送
    • 借用C口的引脚作为联络信号
    • 又分为多种
      • A口、B口均输出
        • $\overline{OBF}$为输出缓冲器满信号,低电平有效
        • $\overline{ACK}$为外设响应信号,低电平有效
        • INTR为中断请求信号,高电平有效
        • INTE为中断允许状态
      • A口、B口均为输入
        • $\overline{STB}$为输入选通信号,低电平有效
        • $IBF$为输入缓冲器满信号,低电平有效
        • INTR为中断请求信号,高电平有效
        • INTE为中断允许状态
      • 可以一个输入一个输出,也可以一个在方式0,一个在方式1
  • 方式2,双向选通输入输出
    • A口数据双向传送,只能A组实施
    • 具有联络(握手)信号的数据传送
    • 借用C口的引脚作为联络信号

8255A复位状态:三端口为基本输入方式

初始化包括两部分工作:

  • 将控制字写入控制寄存器CR,指定工作方式和数据传送方向
  • 输出相应控制信号,使外设准备就绪

控制字

8255A具有两类控制字,通过D7位区分

  • 方式选择控制字

    • 定义端口的工作方式

  • C口复位/置位控制寄存器

    • 负责对C口逐位进行复位(就是变0)/置位(就是变1)控制

寻址及连接使用

可编程计数器\定时器8253

特点

  • 具有三个独立的16位减法计数器
  • 每个计数器可按二进制或BCD码计数
  • 每个计数器的计数速率可达2MHZ
  • 每个计数器有六种工作方式,可由程序设置和改变
  • 全部输入输出都与TTL电平兼容

结构与功能

  • 数据总线缓冲器
    • 写控制字
    • 写时常
    • 读计数值
  • 读写逻辑
  • 控制字寄存器(存放控制字)
  • 三个计数器(减法器)
    • 3个独立的16位减法器,可作定时/计数器使用
    • 最大计数值65535
    • 计数器按二进制/BCD方式减法计数,从预常减到零时,OUT端输出1信号

CLK:输入脉冲线

GATE:门控信号输入线;GATE=0 禁止计数;GATE=1 允许工作

OUT:输出引脚;当计数到“0”时,OUT端输出1信号

工作方式

六种工作方式

  • 方式0——计数结束中断
    • OUT的上升沿作为中断请求信号
    • GATE必须为1,计数器在外部时钟作用下,每个时钟周期减1;当GATE=0时,计数停止;当GATE=1,写入控制字和计数值后,需一个CLK脉冲周期才将计数初值传送到计数器减1部件。而OUT是在写入控制字和计数值后就变低电平,直到计数减到0才变高电平
    • 如果写入新的计数值,则停止计数,开始按新的计数值重新计算
  • 方式1——可编程单稳
    • 计数开始是以GATE的上升沿启动的。同时,OUT输出低电平,此电平一直维持到计数器减到0
    • 如果写入新的计数值,不会影响正在进行的计数;只有又出现新的GATE上升沿时,且计数值为剩余的加新的计数值
  • 方式2——频率发生器
    • 开始工作后,计数器的输出OUT将连续输出一个时钟周期宽的负脉冲。两负脉冲之间的时钟周期数就是计数器装入的计数初值
    • GATE为低电平时,强迫OUT输出高电平;GATE高电平时,分频输出上升沿初始化计数
    • 如果写入新的计数值,不会影响正在进行的计数,而在下一次分频计数时,采用新的计数值
  • 方式3——方波发生器
    • 在这种方式下,可以从OUT得到对称的方波输出。当装入的计数值N为偶数时,则前N/2计数过程中,OUT为高;后N/2计数过程中,OUT为低,如此这般一直进行下去。若N为奇数,则(N+1)/2计数过程中,OUT保持高电平; 而(N-1)/2计数期间,OUT为低电平
    • GATE为低电平时,强迫OUT输出高电平;GATE高电平时,OUT输出对称方波上升沿初始化计数
  • 方式4——软件触发选通
    • 写入控制字和计数值后,需一个CLK脉冲周期才将计数初值传送到计数器减1部件。然后计数开始,每个时钟周期减1。当计数器减到0时,又OUT输出一个时钟周期宽度的负脉冲
    • 当GATE为低电平时,禁止计数;GATE为高电平时,计数才开始
  • 方式5——硬件触发选通
    • 设置此方式后,OUT输出为高电平。GATE的上升沿使计数开始。当计数结束时,由输出端OUT送出一宽度为一个时钟周期的负脉冲;GATE高低不影响计数

8253输出2

控制字

计数器的初始化顺序:写入方式控制字->写入计数值低字节->写入计数值高字节

当初始计数值为0000是,对应最大计数值

对于读/写方式是11的时候,如果只写入了一个字节,就去写其他计数器或控制字,则写入的字节将被解释为计数值的高字节

所以,采用先写入bit4bit5为00的控制字到8253的控制寄存器方法,可以保证从8253的读出的计数值总是正确的

串联:将时钟接到CLK0上,使GATE0有效(高电平),并将OUT0输出接到CLK1上做为计数器1的计数时钟,同时使GATE1位高电平。这就将计数器0和计数器1串到一起。可使计数器0工作在方式2或方式3,使其输出连续的脉冲,使计数器1工作在方式3。且使两计数器的总计数值1000*1000,可以使计数器0和计数器1的计数值均为1000,则OUT0的输出就是周期为1ms的对称方波或窄脉冲,OUT1的输出即为周期1秒的对称方波

读出计数值的具体实现方法:

  • 先使计数器停止计数,再读计数值
  • 在计数过程中读计数值
  • 连续读两次计数值,若两者相等或只差一两次计数,则读出值正确;若两次读出值相差很多,则接着读第三次,三次读数中两次接近的必是正确的

寻址及连接

可编程串行接口8250

串行通信使用的传输线少,传送距离远,而并行通信却与之相反

在串行通信中,经常采用两种最基本的通信方式,一种是同步通信,一种是异步通信

  • 同步通信
    • 发送端和接收端的时钟严格保持一致
    • 传送时钟信号
  • 异步通信
    • 接收端的时钟完全独立于发送端
    • 收发端在约定的波特率下,不需要有严格的同步,允许有相对的延迟
    • 起始位+数据位+校验位+停止位+空闲位
    • 低位在前,高位在后

数据传输速率:称为波特率(和计网不一样呢!);每秒传输的二进制位数bps;字符中每个二进制位持续的时间长度都一样,为数据传输速率的倒数

数据传输制式:全双工、半双工、单工

串行接口标准RS-232C:现已成为数据终端设备DTE(例如计算机)与数据通信设备DCE(如调制解调器)的标准接口;物理层

串行接口芯片:

  • UART 通用异步收/发器
  • USART 通用同步/异步收/发器

结构与功能

串行异步通信;全双工

10个可寻址的8位寄存器,分为3类:数据类,控制类,状态类

串行数据的发送:

同理,可以想象串行数据的接收

除数寄存器:保存设定的分频系数

$分频系数=基准时钟频率/(16*比特率)$

控制字

因为控制字考试中会给出,和前面差不多的形式

包括:通信线路控制寄存器,通信状态寄存器,除数寄存器,调制解调控制寄存器,调制解调状态寄存器,中断识别寄存器,中断允许寄存器

寻址及连接

小脑袋转不动了,不要了……

练习题

为了保证代码可能写错的情况,画流程图加代码的形式呈现

流程图,椭圆(开始,结束) 长方形(操作)菱形(判断)平行四边形(输出)箭头(工作流的方向)

(这道题告诉我们,二极管前面要加反相器和低电阻;开关前面要加电阻;然后两个都要接电源)

这个三角形加小圆的是非门,也称反相器,起反相和缓冲的作用;反相器就是说你输入为0的时候输出为1,输入为1的时候输出为0

  1. 根据选中的$\overline{Y_5}$,所以是0011 1111 1111 01xx,因此接口8255所占的接口地址是3FF4H~3FF7H,这里接A0和A1的就是A0和A1,所以控制寄存器的地址就是3FF7H(若是A1,A2,则控制寄存器的地址便是A1,A2为1的时候的地址了)

  2. 初始化程序

    1
    2
    3
    MOV DX, 3FF7H ;写控制寄存器
    MOV AL, 10000001B ;进行方式选择控制字,A口选择方式0,输出;C高4位,输出;B口选择方式0,输出;C口低4位,输入;这样选择的原因是这里是C口低4位输入,A口输出
    OUT DX, AL

    输入输出程序

    1
    2
    3
    4
    5
    6
    L1: MOV DX, 3FF6H ;C口
    IN AL,DX ;C口低4位的输出
    MOV DX, 3FF4H ;A口
    XOR AL,03H ;取C口的PC0和PC1的输入的值
    OUT DX,AL ;将异或结果送到A口,输出,这样如果值为1,则异或后是0,再经过反相器又变成了1
    JMP L1 ;循环L1

其中写控制寄存器的地址是0383H,A口0380H,B口0381H,C口0382H;数据在DATA中已经设置好了,共10个

  1. 初始化程序

    1
    2
    3
    4
    5
    MOV DX, 0383H
    MOV AL, 100000011B ;进行方式选择控制字,A口选择方式0,输出;C高4位,输出;B口选择方式0,输入;C口低4位,输入;这样选择的原因是这里是C口低4位输入,C口高4位输入,A口输出;不要把B单位漏了;这里的B可以随机写
    OUT DX, AL
    MOV Al, 00001101B ;对PC6进行复位;上一题中C口都是输入,所以不需要复位
    OUT DX, AL
  2. 应用程序

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    PRINT: MOV CL, 10
    MOV SI, OFFSET DATA
    GOON: MOV DX, 0382H ;选择C口
    PWAIT: IN AL, DX ;将C口的BUSY的信息送入
    AND AL, 02H ;取出PC1的信息
    JZ PWAIT ;如果打印机忙,则等待
    ;如果不忙,则开始传输数据
    MOV AL, [SI] ;将DATA所指的部分,传入到AL中
    MOV DX, 0380H ;选择A口
    OUT DX, AL ;A口输出,送数据
    MOV DX, 0382H ;选择C口
    MOV AL, 00H ;将AL变成0,即送出PC6的信息是0,低电平有效
    OUT DX, AL
    MOV AL, 40H ;将AL变成0100 0000B,即送出PC6的信息是1,上升沿有效
    OUT DX, AL
    INC SI ;将堆栈指针加1,送出下一个数据
    LOOP GOON ;判断是否数据传送完

8253将计数器2初始化为工作方式3,计数初值为1000,为二进制计数方式,设寄存器地址为400H ~ 403H

  1. 控制字

    10110110B,即B6H

  2. 初始化

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    MOV DX, 403H ;写控制寄存器
    MOV AL, B6H ;传入控制字
    OUT DX, AL ;写命令字
    MOV DX, 402H ;写计数器2
    MOV AX, 1000 ;传入初值,是在AX,而不是AL中哦
    OUT DX, AL ;写计数值低位
    MOV AL, AH ;将高位值送入AL中
    OUT DX, AL ;写计数值高位

用8253产生各种定时波形,要求:

(1)通道0输出频率为2KHz的方波

(2)通道1产生宽度为1ms的负脉冲

(3)通道2以硬件方式触发,输出单脉冲,时常为26

已知:基地址为FF00H,3通道输入时钟脉冲频率均为1MHz

  1. 通道0,工作于方式3(方波),控制端$GATE_0$接+5V,时间常数$N_0=1MHz/2KHz=500$

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    MOV DX, FF03H
    MOV AL, 00110111B
    OUT DX, AL
    ;送入时间常数500,这里是BCD计数,所以就是按每两位送入
    MOV DX, FF00H
    MOV AL, 00H
    OUT DX, AL
    MOV AL, 05H
    OUT DX, AL
    ;上面部分可以转换为
    ;MOV DX, FF03H
    ;MOV AL, 00110110B
    ;OUT DX, AL
    ;MOV DX, FF00H
    ;MOV AX, 500
    ;OUT DX, AL
    ;MOV AL, AH
    ;OUT DX, AL
  2. 通道1,工作于方式1(可编程单稳),由控制端$GATE_1$的正跳变触发,$OUT_1$的宽度为时常,单次触发,时间常数$N_1=1ms/0.001ms=1000$

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    MOV DX, FF03H
    MOV AL, 01110011B
    OUT DX, AL
    MOV DX, FF01H
    MOV AL, 00H
    OUT DX, AL
    MOV AL, 10H
    OUT DX, AL
    ;上面部分可以转换为
    ;MOV DX, FF03H
    ;MOV AL, 01110010B
    ;OUT DX, AL
    ;MOV DX, FF01H
    ;MOV AX, 1000
    ;OUT DX, AL
    ;MOV AL, AH
    ;OUT DX, AL
  3. 通道2,工作于方式5(硬件),由控制端$GATE_2$的正跳变触发,可连续触发,时间常数为26

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    MOV DX, FF03H
    MOV AL, 10011011B
    OUT DX, AL
    MOV DX, FF02H
    MOV AL, 26H
    OUT DX, AL
    ;这里的控制字规定送的是低八位;若是控制字是11,则需要如下代码
    MOV DX, FF03H
    MOV AL, 10111011B
    OUT DX, AL
    MOV DX, FF02H
    MOV AL, 26H
    OUT DX, AL
    MOV AL, 00H ;高位部分的送入
    OUT DX, AL

以2MHz输入8253,实现每5秒定时中断

  1. 8253最大初值65536,CLK=2MHz可实现最大时间间隔

    $ 65536/(2*10^6)=32.769ms$

    所以需要两个计数器串联,一个计数器的输出作为另一个计数器的输入

    计数器1:模式2,OUT1每5ms输出一个脉冲

    ​ 初值$(2*10^6)/(1/0.005)=10000$

    计数器0:模式2,OUT0每5s输出一个脉冲

    ​ 初值$(1/0.005)/(1/5)=1000$

试画出用异步协议传送字符“E”的波形图;要求加偶校验位和一位停止位

  1. 字符“E”的ASCII码为45H,即1000101

  2. 其传送的波形图如图所示(低字节在前

如果一个串行字符由1个起始位,7个数据位,1个奇偶校验位和1个停止位等10个数位构成,每秒钟传送120个字符,则数据传送的波特率为:

  1. 10位/字符×120字符/秒=1200位/秒=1200波特

​ 传送每位信息所占用的时间为:

​ 1秒/1200=0.833毫秒

多机系统

  • 仅依靠提高时钟频率使计算机运行得更快变得越来越困难
  • 光速时设计高性能计算机的一个主要障碍
  • 随着晶体管尺寸的不断缩小,量子力学效应、散热将成为主要问题
  • 计算机并行体系结构(与之相对的便是顺序计算机)设计逐渐成为计算机性能有效提升的主要手段

并行性

含义

  • 并行性是指问题中具有可同时进行运算或操作的特性
    • 开发并行性的目的是为了能予以并行处理,以提高解题效率
  • 并行性包括同时性和并发性
    • 两个或多个事件在同一时刻发生属于同时性
    • 同一时间间隔内发生则属于并发性

途径/形式

  • 时间重叠
    • 是在并行性中引入时间的因素
    • 让多个处理过程在时间上错开,轮流重叠地使用同一套硬件设备的各个部分,使之加快硬件使用的周转来赢得速度
    • 典型的例子:流水
  • 资源重复
    • 是在并行性中引入空间的因素
    • 靠重复设置硬件资源来提高可靠性或性能的
      • 典型的例子:双工系统、相联处理机1和阵列处理机
  • 时间重叠与资源重复
  • 资源共享
    • 用软件方法让多个用户共用同一套资源,通过提高系统资源的利用率来提高系统的性能和效率,还降低了成本
    • 典型的例子:多道程序分时系统、计算机网络和分布处理系统等

计算机系统的分类

计算机系统按指令流数据流的并行度分类成:

  • 单指令流单数据流SISD
    • 冯·诺依曼计算机
    • 单处理器系统
    • 一个时刻只能做一件事情
    • 片内并行
      • 通过指令级并行,芯片多线程,单片多处理器(多核CPU)来实现
  • 单指令流多数据流SIMD
    • 同一条指令被多个使用不同数据流的多处理器执行,即将相同的操作以并行的方式应用于各数据流来实现数据级的并行
    • 第一类:用于数值计算的超级计算机和向量机,可以在一个向量的每个元素上并行执行相同的操作
    • 第二类:处理并行类型的阵列计算机,利用一个控制单元把指令广播给多个独立的ALU【算术逻辑单元(arithmetic and logic unit)】来处理
    • 阵列处理机和向量处理机:在同一时间对不同数据集合完成相同的运算来提高大型科学计算程序的执行速度
      • 阵列处理机
        • 分布式内存系统,由许多在不同数据集合上执行同样指令序列、完成同样功能的完全相同的处理器组成
        • 共享一个控制器,利用一个控制单元把指令广播给多个独立的处理单元
        • 所有处理器以步调一致的方式工作,故处理期间不需要同步
        • 无商用产品
      • 向量处理机
        • 共享内存
        • 执行向量指令,每个
        • 所有加法运算由一个单独的高度流水的加法器实现
        • 向量寄存器:用一条指令将数据从内存中装入到向量寄存器中,流水进入加法器;而阵列处理机则每个向量元素都要一个加法器
        • 一条向量指令执行期间不必检查数据相关,但是两条向量指令之间需要检查一次数据相关
        • 需要足够的指令获取和译码带宽
        • 交叉存取
        • 循环分支产生的控制相关(冒险)是不存在的
        • 向量运算比具有相同数据项的标量运算更快
  • 多指令流单数据流MISD
    • 多条指令同时在同一数据上进行操作
    • 至今还没有这类的商用机器
  • 多指令流多数据流MIMD
    • 即弗林Flynn分类法
    • 同时有多个CPU执行不同操作,即系统中每个处理器获取自己的指令并对自己的数据进行操作处理
    • 实现线程级并行
    • 根据是否有共享内存分为:多处理器系统和多计算机系统
    • 多处理器系统
      • 共享存储器计算机
      • 所有的CPU共享公共内存
      • 所有CPU见到的是同一个内存映像(单一虚拟空间)
      • 任何进程(CPU也能)都能通过执行LOAD或者STORE指令来读/写内存,并实现两进程间通信
      • 只有一个操作系统副本,即只有一个页面映射表和一个进程表
      • 根据共享内存的实现方式分成
        • 一致性存储器访问计算机UMA(如果一个变慢,就把最快的访问速度降低,使速度差距变小)
        • 非一致性存储器访问计算机NUMA(远程内存的访问时间比本地内存要略微长一些)
        • 基于Cache的存储器访问计算机COMA(Cache块估计需要在不同处理器间移动)
    • 多计算机系统(消息传递计算机)
      • 高性能计算机发展的主流
      • 每台计算机都有自己的操作系统副本
      • 具有大量CPU但不共享公共内存的系统
      • 每个CPU都有自己的私有本地内存
      • 分布式内存系统
      • 处理器或进程间利用消息传递机制通信,通常使用sendreceive原语
      • 不能直接访问远程内存,也称为非远程内存访问NORMA计算机
      • 分为两大类
        • 大规模并行处理器MPP
          • 由许多CPU通过高速互联网络紧密耦合在一起而构成
          • 网格计算
            • 优势:数据处理能力超强;充分利用网上的闲置处理能力
            • 目的:通过任何一台计算机都能够提供无限的计算能力
            • 共享计算能力、数据和其他资源
            • 可以视为非常大的、国际间的、松散耦合的、异构的集群
          • 云计算
            • 特点:
              • 超大规模
              • 虚拟化
              • 高可靠性
              • 通用性
              • 高可扩展性
              • 按需服务
              • 极其廉价
        • 普通的PC机或者工作站组成的
          • 通过现成的商用网络连接起来
          • 有NOW(network of workstations),COW(cluster of workstations也称cluster)
    • 多处理器系统实现困难,编程容易
    • 多计算机系统实现容易,但编程困难

一般来说,线程级并行比数据级并行更加灵活,用途也更为广泛

指令级并行对提高速度有帮助,但流水线和超标量体系结构对速度的提高很难超过10倍以上;唯一的方法就是使用多个甚至成千上万的CPU,让他们联结成一个大的系统,一起并行高效地工作

多机互联网络

互连网络

互连网络是一种由开关元件按照一定的拓扑结构和控制方式构成的网络,用于实现计算机系统中部件之间、处理器之间、部件与处理器之间甚至计算机之间的相互连接

互连网络也称为通信子网

多个网络的相互连接称为网络互联

实现信息包在互连网络上从源节点送往目的节点的机制称为路由,路由包括路径选择与信息传输

互连网络通常分为:静态互连网络和动态互连网络

静态互连网络

典型的结构如下,可以混合(嵌入)使用:

  • 线性阵列
    • 并行机中最简单、最基本的互连方式
    • 每个节点只与其左、右近邻相连的叫做二近邻连接
  • 二维网格
    • 每个节点只与其上、下、左、右的近邻相连(边界节点除外),节点度为4
    • 在垂直方向上带环绕,水平方向呈蛇状,就变成Illiac网格,节点度恒为4
    • 垂直和水平方向均带环绕,则变成了环网形,节点度恒为4
  • 树形
    • 除了根、叶节点,每个内节点只与其父节点和两个子节点相连(满二叉树)
    • 节点度为3
    • 如果尽量增大节点度,就变成了星形网络Star
  • 超立方
    • 一个n-立方由$N=2^n$个顶点组成
    • n-立方的节点度为n

全互连网络

  • 度=N-1
  • 直径=1
  • 链路数=N(N-1)/2
  • 对分带宽
  • 优点:结点间通信距离短
  • 缺点:成本高,实现困难

动态互连网络

结构:

  • 总线bus

    • 最简单的互连网络
    • 系统中的所有节点(设备)通过同一条总线相互通信。若总线空闲,一对节点可以利用总线通信;若总线忙,这对节点只有等待
    • 由总线互连的一对节点可以半双工、全双工方式通信
    • 总线结构简单,能实现广播通信
    • 存在总线冲突问题
    • 总线仲裁方法:静态优先级,同步时间片,动态优先级(如LRU法等),先来先服务等
    • 总线带宽会限制系统能力,使大多数节点在大多数时间处于等待
    • 提高总线带宽的方法:多总线结构、层次总线结构、多维总线结构
    • 多处理机总线系统的主要问题包括总线仲裁、中断处理、协议转换、快速同步、高速缓存一致性协议、分事务、总线桥和层次总线扩展等
  • 交叉开关网络crossbar

    • 交叉开关技术来源于电话网络中采用的电路交换技术
    • 电路交换专用于在源节点和目的节点之间建立通信通道
    • 可以依照控制策略将网络的任意输入与输出连接起来
  • 多级互连网络MIN

    • 单级交叉开关级联起来形成多级互连网络

    • 用小规模交叉开关模块“串联”“并联”构成多级交叉开关网络,取代单级大规模交叉开关,设备量可减少一半

    • 交叉开关

      • 2*2交换开关是最常用的二元开关,两个输入和两个输出,从任意输入线到达的消息可以交换到任意的输出线上
      • 在输出端必须避免冲突,允许一对一和一对多映射,不允许多对一映射
      • 交换开关有4种状态:直通/直送through,交叉cross,上播upper broadcast,下播lower broadcast

      • 具有直通和交换两种功能的交换开关称为两功能开关,用一位控制信号控制
      • 具有所有四种功能的交换开关称为四功能开关,用两位控制信号控制
    • STARAN网络

    • 间接二进制n维立方体网络

  • 多级均匀洗牌网络

    • Omega($\Omega$)网络
    • 0,消息从交换开关的上输出线输出
    • 1,消息从交换开关的下输出线输出

互连函数

互连函数:互连网络输入输出端口地址的一一映射

表示方法有:函数表示法、表格表示法(适用于规则和不规则的连接)、循环表示法、图形表示法(连线表示映射关系)

常用的基本互连函数

首先说明一下,N为处理器的个数,n为二进制表示下所需要的位数

$n=log_2N$

  • 恒等置换
    • $r(x_{n-1}x_{n-2}\cdot\cdot\cdot x_i\cdot\cdot\cdot x_0)=x_{n-1}x_{n-2}\cdot\cdot\cdot x_i\cdot\cdot\cdot x_0$
    • 相同编号的输入端与输出端一一对应互连所实现的置换
  • 交换置换
    • $h(x_{n-1}x_{n-2}\cdot\cdot\cdot x_i\cdot\cdot\cdot x_0)=x_{n-1}x_{n-2}\cdot\cdot\cdot x_i\cdot\cdot\cdot \overline{x_0}$
    • 二进制编码的地址号最低位不同的输入端与输出端的连接
  • 方体置换
    • $C_i(x_{n-1}x_{n-2}\cdot\cdot\cdot x_i\cdot\cdot\cdot x_0)=x_{n-1}x_{n-2}\cdot\cdot\cdot \overline{x_i}\cdot\cdot\cdot x_0$
    • 二进制编码的地址号的第i位不同的输入与输出端的连接
  • 均匀洗牌置换
    • $\sigma(x_{n-1}x_{n-2}\cdot\cdot\cdot x_i\cdot\cdot\cdot x_0)=x_{n-2}\cdot\cdot\cdot x_i\cdot\cdot\cdot x_0x_{n-1}$
    • 将输入端的二进制编码循环左移一位即为相对应的输出端编码
    • 逆均匀洗牌置换,则是循环右移一位
      • $\sigma^{-1}(x_{n-1}x_{n-2}\cdot\cdot\cdot x_i\cdot\cdot\cdot x_0)=x_0x_{n-1}x_{n-2}\cdot\cdot\cdot x_i\cdot\cdot\cdot x_1$
  • 加减$2^i$置换
    • $PM2_{+i}(x)=(x+2^i)\ mod\ N$
    • $PM2_{-i}(x)=(X-2^i)\ mod\ N$
    • 将输入端的端号循环加减$2^i$与输出端连接
  • 蝶形置换
    • $\beta(x_{n-1}x_{n-2}\cdot\cdot\cdot x_i\cdot\cdot\cdot x_0)=x_0x_{n-2}\cdot\cdot\cdot x_i\cdot\cdot\cdot x_{n-1}$
    • 将输入端的二进制编码的最高位与最低位互换

当代典型的并行机系统

共享存储多处理器系统

对称多处理器SMP

现在市场上所见的多核处理器是属于对称多处理机SMP结构

定义:在一个系统中,每个CPU都能平等地访问所有的内存模块和输入/输出设备,而且在操作系统看来这些CPU是可以互换的

分类:

UMA对称多处理器

一致性存储器访问模型

  • 物理存储器被所有处理器均匀共享
  • 所有处理器访问任何存储字时间相同
  • 每台处理器可带私有高速缓存
  • 外围设备也可以一定形式共享
NUMA对称多处理器

非一致存储访问模型

  • 被共享的存储器在物理上是分布在所有的处理器中的,其所有本地存储器的集合就组成了全局地址空间
  • 处理器访问存储器的时间是不一样的
    • 访问本地存储器LM或群内共享存储器CSM较快
    • 访问外地的存储器或全局共享存储器GSM较慢
  • 每台处理器照例可带私有高速缓存外设也可以某种形式共享
对称多处理器系统的特点
  • 系统是由两个以上的多个相同的处理机构成
  • 多个处理机通过总线其他互连方式连接在一起
  • 多个处理机共享同一主存储器;并且每一个处理机访问主存储器的时间是相同的,也就是一致的
  • 所有的处理机通过相同的通道或不同的通道共享IO设备
  • 每一处理机都能完成相同的功能
  • 整个对称多处理机系统是在一个集中的操作系统统一管理下工作。操作系统能够为每一处理机安排进程或线程,对各处理机的工作进行统一地调度与控制
对称多处理器SMP的优点
  • 对称性
  • 单地址空间,易编程性动态负载平衡无需显示数据分配
  • 高速缓存及其一致性,数据局部性,硬件维持一致性
  • 低通信延迟,load/store完成
  • 比高处理器具有更高的性能
  • SMP具有高的可靠性高的可用性
  • 具有良好的扩展性能
  • 可以灵活地按照用户的需求构成不同数量处理机的SMP系统
SMP的问题
  • 欠可靠,总线、存储器或OS失效会造成系统奔溃
  • 通信延迟(相对于CPU),竞争加剧
  • 慢速增加的带宽
  • 不可扩放性,限制了处理器的数量

分布存储多计算机系统

大规模并行机MPP

  • 成百上千个处理器组成的大规模计算机系统,规模是变化的
  • NORMA(非远程内存访问)结构计算机,即多计算机系统,定制高速互连网络,高带宽低延迟
  • 可扩放性:Mem,I/O,平衡设计

网格

网格计算或网格是一种与机群计算非常相关的技术

网格连接的是一组相关、并不信任的计算机;网格通常比集群支持更多不同类型的计算机集合

网格是利用互联网把地理上广泛分布的各种资源(包括计算资源、存储资源、带宽资源、软件资源、数据资源、信息资源、知识资源等)连成一个逻辑整体,即一台虚拟超级计算机

这个动态的虚拟组织最终实现在虚拟环境下进行资源管理、共享和协同工作,解决网络上有限的资源与无限的用户需求间的矛盾

“虚拟的超级计算机”的优势:数据处理能力超强和能充分利用网上的闲置处理能力

网格的根本特征是资源共享和虚拟的组织机构,而不是它的规模

三次信息技术浪潮
  • 传统互联网:实现了计算机系统的连通
  • Web实现了网页的连通
  • 网格试图实现互联网上所有资源的全面连通

机群系统

工作站机群COW

简称集群Cluster

分布式存储,MIMD,工作站+商用互连网络,每个节点是一个完整的计算机,有自己的磁盘和操作系统;而MPP中只有微内核

优点
  • 投资风险小
  • 系统结构灵活
  • 性能/价格比高
  • 能充分利用分散的计算资源
  • 可扩放性好
问题
  • 通信性能
  • 并行编程环境

并行系统的性能

加速比性能定律

并行系统的加速比是指对于一个给定的应用,并行算法(或并行程序)的执行速度相对于串行算法(或串行程序)的执行速度加快了多少倍

并行处理有两个障碍:程序可获得的并行度是有限的;相对较高的通信开销

P:处理器 W:问题规模$W_s+W_p=W$

$W_s$:应用程序中的串行分量 f:串行分量比例,$f=W_s/W$

$W_p$:应用程序中可并行化部分,(1-f)为并行分量比例

S:加速比

固定负载的加速公式:

$S=\frac {W_s+W_p}{W_s+W_p/p}\\=\frac{f+(1-f)}{f+\frac{1-f}{p}}\\=\frac{1}{f+\frac{1-f}{p}}$

当p趋向于无穷大时,上式极限为:$S=1/f$

实际程序的执行时间:

并行执行部分+串行执行部分+通信时间部分

  • 减少长时间远程访问的延迟,可以通过系统结构或程序实现(例如,在硬件上使用cache缓存共享数据或者在软件上重新构造数据,可以增加本地访问,减少远程访问的频率;还可以使用多线程预取技术来减少通信延迟的影响)
  • 提高程序的并行度,只有在软件采用更好的并行算法线程级并行将是提高程序并行度的强有力技术手段

练习题

其他

单位换算

$1s=10^{-3}ms=10^{-6}us=10^{-9}ns=10^{-12}ps$

$b=bit$ $B=Byte$ $1B=8b$

$1KB=2^{10}Byte$ $1MB=2^{20}Byte$ $1GB=2^{30}Byte$

$1TB=2^{40}Byte$ $1PB=2^{50}Byte$

芯片

SRAM

​ 2764 EPROM DRAM 98C64A EEPROM

前面系列,后面总容量(单位是Kb

前面的SRAM,DRAM芯片是$\overline{WE}$、$\overline{OE}$,连接的系统总线是$\overline{MEMW}$和$\overline{MEMR}$

后面的IO接口芯片是$\overline{WR}$、$\overline{RD}$,连接的系统总线是$\overline{IOW}$和$\overline{IOR}$

62 64(6164)

是一种SRAM,28条引线,容量$8K*8b$

$A_0\to A_{12}$为13条地址信号线。芯片上的这13条地址线决定了该芯片有$8K$个存储单元

$D_0\to D_{7}$为8条双向数据线。芯片上的这8条地址线决定了该芯片中每个存储单元存储了$8$个二进制位(即说明该芯片的每个单元存放一个字节

$\overline {CS_1},\ CS_2$为两条片选信号的引线(选择芯片chip),当两个片选信号同时有效时,即$\overline {CS_1}=0,\ CS_2=1$时,才能选中该芯片。不同芯片的片选信号多少不一,但是只有芯片上所有片选信号同时有效才行。利用片选信号将芯片放在所需要的地址范围上;若是未选中其中一个的时候,$D_0\to D_7$是三态(高阻)的状态。

$\overline{OE}$为输出允许信号,只有当$\overline{OE}=0$,即其有效时【并且$\overline{WE}=1时】$,才允许该芯片将某单元的数据送到芯片外部的$D_0\to D_7$上

$\overline{WE}$是写允许信号,当$\overline{WE}=0$时,允许将数据写入芯片;当$\overline{WE}=1$时,允许芯片的数据读出【写优先】

62 256

SRAM,容量$32K*8b$

21 64

DRAM,容量$64K*1b$

21 256

DRAM,容量$256K*1b$

指令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
CMP DL, AL ;DL-AL
JNC NEXT ;CF=0,即DL>=AL,跳转到NEXT
;JNS NEXT ;DL>AL,跳转到NEXT
;JZ NEXT ;DL==AL,跳转到NEXT
LOOP BEGIN ;循环BEGIN;直到CX等于0
HLT ;暂停
WAIT ;等待
IN AL, DX
OUT DX, AL
AND AL, 01H ;判断如D0是否为1,而不管其他的数据线的值;注意不能直接用CMP AL, 01H;JZ NEXT这样来表示
MOV SI, OFFSET TIME ;取TIME的偏移地址或者 LEA SI, TIME
MOV DX, SEG TIME ;取TIME的段地址
MOV DS, DX
MOV [SI], AL ;将AL的放到DS:SI中,要加中括号哦!!!
STI ;开中断

注意点

  • 内径、外径都是指的是直径
  • 74LS138中,A,B,C无论摆放顺序是什么,A始终是低位
  • 注意求的是盘面的格式化容量还是硬盘的,同时有几个盘片是没关系的,有关系的是有几个记录面,注意单位等等
  • 静态流水线or动态流水线
  • 8086数据线是16位的(需要奇偶分体),8088数据线是8位的,所以注意地址一个单元是16位,还是8位,而不是1位(地址线都是20位的)【或者看题目的CPU数据线的位数】
  • 机器周期(CPU周期):完成一个指令中的基本操作,比如取指令,DMA在一个CPU周期完之后响应;
  • 指令周期:执行一条指令所需的时间,中断在一条指令周期完成后响应;
  • 时钟周期(震荡周期):时钟脉冲的倒数;
  • 总线周期:CPU通过总线对外微处理器外部(存储器\I/O接口)进行一次访问的时间,一般包含4个时钟周期
  • 画串口数据的波形图的时候,要先低电平的起始位,然后数据位,注意是低位在前,高位在后,然后看有无校验位,最后高电平的停止位,然后看有无空闲位
  • 吞吐量的单位是FLOPS
  • 没有告诉n的时候,直接用所有的时间/(最长的时间+开销)就是加速比
  • LRU命中清零,LFU命中增加

转载请注明出处,谢谢。

愿 我是你的小太阳

买糖果去喽