1、某计算机指令字长32位,有3种指令:无操作数指令、单操作数指令和双操作数指令。采用扩展操作码的方式来设计指令。假设操作数地址为12位,已知有双操作数指令K 条、单操作数指令L条,问:无操作数指令有多少条?
解答:指令格式如下:
操作码为 8 位,最多有 2 8 条双操作数指令,现双操作数指令有 K 条,所以还有 (2 8 - K )种编码留给单操作数和无操作数指令用。把操作码扩展到A1, 12 ~31 位还有 (2 8 - K ) * 2 12 种编码。
在(2 8 - K ) * 2 12种编码中,单操作数指令占了 L 条,所以留给无操作数指令的只有 (2 8- K ) * 2 12 - L 种编码。
A2为 12 位,有 2 12种编码,所以无操作数指令有:[(2 8 - K ) * 2 12 - L ] * 2 12条。
2、某指令系统指令字长16位,每个操作数的地址码长6位,指令分为无操作数、单操作数和双操作数三类。若双操作数指令有K 条,无操作数指令有 L 条,问单操作数指令最多可能有多少条?
解答:指令格式如下:
OP(12~15) | A1(6~11) | A2 (0~5) |
操作码为 4 位,最多有 2 4 条双操作数指令,现双操作数指令有K 条,所以还有 (2 4 - K )种编码留给单操作数和无操作数指令用。6 ~ 15 位还有 (2 4 - K ) * 2 6 种编码。
在(2 4 - K ) * 2 6种编码中,无操作数指令占了 L / 2 6 条,所以留给单操作数指令的只有 (2 4 - K ) * 2 6 - L / 2 6 条。单操作数指令最多可能有(2 4 - K ) * 2 6 - L / 2 6 条。
3、已知某8位机的主存采用半导体存贮器,地址码为18位,若使用4K×4位RAM芯片组成该机所允许的最大主存空间,并选用模块条的形式,问:
(1)若每个模条为32K×8位,共需几个模块条?
(2)每个模块内共有多少片RAM芯片?
(3)主存共需多少RAM芯片?CPU如何选择各模块条?
解答:(1)由于主存地址码给定18位,所以最大存储空间为218 = 256K,主存的最大容量为256KB。现每个模块条的存储容量为32KB,所以主存共需256KB / 32KB = 8 块板。
(2) 每个模块条的存储容量为32KB,现使用4K×4位的RAM芯片拼成4K×8位(共8组),用地址码的低12(A0-A11)直接接到芯片地址输入端,然后用地址的高3位(A14-A12)通过3 :8译码器输出分别接到8组芯片的选片端。共有8×2 = 16个RAM。
(3) 据前面所得,共需8个模条,每个模条上有16片芯片,故主存共需8×16 =128片RAM芯片。
CPU通过最高3位地址译码输出选择模板,次高3位地址译码输出选择芯片。地址格式分配如下:
模板号(3位) | 芯片号(3位) | 片内地址(12位) |
4、设有利用若干片256K×8位SRAM芯片构成2048K×32位的存储器,问:
(1) 需要多少片RAM芯片?
(2) 该存储器需要多少字节地址位?
(3) 如何构成2048K×32位的存储器?画出该存储器与CPU连接的结构图,设CPU的接口信号有地址信号、数据信号、控制信号MREQ#和R/W#。
解答:(1) 该存储器需要(2048K×32)/(256K×8) = 32片SRAM芯片;
(2) 2048K×32=8MB,需要23条地址线,因为223=8MB
(3)23条地址其中高3位用于芯片组选择,低18位作为每个存储器芯片的地址输入。该存储器与CPU连接的结构图如下:
5、某计算机的主存地址空间中,从地址0000H到3FFFH为ROM存储区域,从4000H到5FFFH为保留地址区域,暂时不用,从6000H到FFFFH为RAM地址区域。RAM的控制信号为CS#和WE#,CPU的地址线为A15~A0,数据线为8位的线路D7~D0,控制信号有读写控制R/W#和访存请求MREQ#。
(1) 画出地址译码方案
(2) 如果ROM和RAM存储器芯片都采用8K×1的芯片,试画出存储器与CPU的连接图。
解: ROM 存储区域为 0000H到3FFFH,所以ROM的容量为4× 4K=16K;
RAM存储区域为6000H到FFFFH ,所以ROM的容量为10×4K=40K;
ROM和RAM存储器芯片都采用8K×1位的芯片。所以ROM 用2组8K×8位的存储的芯片组成;RAM 用5组8K×8位的芯片组成;采用位扩展方式用8K×1的芯片构成8K×8位的芯片。
8KB的存储区域可以用8片存储器芯片构成一组实现。8K×1位的存储器芯片的地址线需要13条,即A12-A0。
(1)地址译码方案
译码输出逻辑表达式:
(2) 8KB的存储区域可以用8片存储器芯片构成一组实现。8K×1的
存储器芯片的地址线需要13条,即A12-A0。
6、设CPU共有16根地址线,8根数据线,并用(低电平有效)作访存控制信号,作读写命令信号(高电平为读,低电平为写)。系统程序区:0000H-0FFFH,用户程序区:1000H-3FFFH,现有下列存储芯片:ROM(2K×8位,4K×4位,8K×8位),RAM(1K×4位,2K×8位,4K×8位),及74138译码器和其他门电路(门电路自定)。试从上述规格中选用合适芯片,画出CPU和存储芯片的连接图。要求:
(1)指出选用的存储芯片类型及数量。
(2)详细画出片选逻辑。
解答:系统程序区(ROM共4KB):0000H-0FFFH,用户程序区(RAM共12KB):1000H-3FFFH
(1)选片:ROM:选择4K×4位芯片2片,位并联
RAM:选择4K×8位芯片3片,字串联(RAM1地址范围为:1000H-1FFFH,RAM2地址范围为2000H-2FFFH, RAM3地址范围为:3000H-3FFFH)
(2)各芯片二进制地址分配如下:
A15 | A14 | A13 | A12 | A11 | A10 | A9 | A8 | A7 | A6 | A5 | A4 | A3 | A2 | A1 | A0 | |
ROM1,2 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
RAM1 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
RAM2 | 0 | 0 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | |
RAM3 | 0 | 0 | 1 | 1 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 | 0 |
0 | 0 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
CPU和存储器连接逻辑图及片选逻辑如下图所示:
7、某微程序控制器,采用水平直接控制微指令格式,断定方式。已知全机共有微命令22个,可判定的外部条件有4个,控制存储器为128 × 32 (位).请设计微指令的格式。
解答:水平直接控制微指令格式,共有微命令22个,所以微指令的控制字段为22位。
采用断定方式,则微指令地址由设计者确定,或由设计者指定的判别字段控制产生。当微程序出现分支时,后继地址的形成依赖于状态条件。顺序运行时则由微指令中的下址字段直接指示。
外部条件有4个,所以判别测试字段长度为 2。
控存容量为128 X 32 (位),微指令都是等长的,为32位。若按位寻址,则下地址长度会大大增长。若按照定长的32位微指令格式,则只需要7位地址字段即可。
所以将下地址长度扩展为8位,下地址形式位0XXX XXXX。
微指令格式为:
操作控制字段 (22位) | 外部条件字段 (2位) | 下地址字段 (8位) |
8、假设某机器有80条指令,平均每条指令有4条微指令组成,其中有一条取指微指令是所有指令公用的,已知微指令长度为32位,请估算控制存储器容量。
解答:微指令的数目为80×3+1=241条;
微指令字长为32/8=4字节;
所以,控制存储器的容量为 241×4=964字节,该容量为控制存储器的最小容量。
9、某32位机共用微操作信息52个,构成 5个相斥类微命令组,各组分别包含4个、5个、8个、15个和20个微命令。已知可判定外部条件有CY和ZF两个,微指令字长为29位。
(1)给出采用断定方式的水平型微指令格式。
(2)控制存储器的容量应为多少位?
解答:(1)根据5个互斥类的微命令组,各组分别包括4、5、8、15、20个微命令。各控制字段中须包含一种不发出命令的情况,条件测试字段包含一种不转移的情况,则五个控制字段分别需要给出5、6、9、16、21种状态,对应于3、3、4、4、5位(共19位),条件测试字段取2位.根据微指令字长为29位,下地址字段取29-19-2=8位,则微指令格式如下:
4个微命令 | 5个微命令 | 8个微命令 | 15个 微命令 | 20个 微命令 | 条件测 试字段 | 下一地址 字段 |
3位 3位 4位 4位 5位 2位 8位
(2)根据后继地址字段为8位,微指令字长为29位,控制存储器容量为:28*29=256*29
10、某程序对页面要去的序列为:3,4,2,4,4,3,6,4,3,6,3,4,5,4,6,设主存页面容量为3个页面,求LRU替换算法的命中率(假设开始时主存为空)。
解答:页面请求如下图:
页面请求 | 3 | 4 | 2 | 4 | 4 | 3 | 6 | 4 | 3 | 6 | 3 | 4 | 5 | 4 | 6 | |
L R U | ③ | 3 | 3 | 3 | 3 | 3 | 2 | 4 | 3 | 6 | 4 | 4 | 6 | 3 | 3 | 5 |
② | / | 4 | 4 | 2 | 2 | 4 | 3 | 6 | 4 | 3 | 6 | 3 | 4 | 5 | 4 | |
① | / | / | 2 | 4 | 4 | 3 | 6 | 4 | 3 | 6 | 3 | 4 | 5 | 4 | 6 | |
命中 | × | × | × | √ | √ | √ | × | √ | √ | √ | √ | √ | × | √ | × |
命中率为:9/15=60%
11、假设某机器的 Cache 为空,Cache有4个块,采用全相联映射,CPU访问主存顺序如下表所示,求分别采用FIFO和LRU算法的命中率并给出Cache块的变化过程。
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
主存地址页 | 2 | 3 | 1 | 2 | 5 | 2 | 0 | 1 | 2 | 7 | 1 | 2 | 5 | 2 | 5 |
解:(1)采用FIFO算法Cache块内容的变化过程如下:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
主存地址 | 2 | 3 | 1 | 2 | 5 | 2 | 0 | 1 | 2 | 7 | 1 | 2 | 5 | 2 | 5 |
1 | 2 | 2 | 2 | 2* | 2 | 2* | 3 | 3 | 1 | 5 | 0 | 0 | 2 | 2* | 2 |
2 | 3 | 3 | 3 | 3 | 3 | 1 | 1* | 5 | 0 | 2 | 2* | 7 | 7 | 7 | |
3 | 1 | 1 | 1 | 1 | 5 | 5 | 0 | 2 | 7 | 7 | 1 | 1 | 1 | ||
4 | 5 | 5 | 0 | 0 | 2 | 7 | 1 | 1 | 5 | 5 | 5* | ||||
是否命中 | × | × | × | √ | × | √ | × | √ | × | × | × | √ | × | √ | √ |
命中率为H=6/15=40%
(2)采用LRU算法Cache块内容的变化过程如下:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 |
主存地址 | 2 | 3 | 1 | 2 | 5 | 2 | 0 | 1 | 2 | 7 | 1 | 2 | 5 | 2 | 5 |
1 | 20 | 21 | 22 | 20* | 21 | 20* | 21 | 22 | 20* | 21 | 22 | 20* | 21 | 20* | 21 |
2 | 30 | 31 | 32 | 33 | 34 | 00 | 01 | 02 | 03 | 04 | 05 | 50 | 51 | 50* | |
3 | 10 | 11 | 12 | 13 | 14 | 10* | 11 | 12 | 10* | 11 | 12 | 13 | 14 | ||
4 | 50 | 51 | 52 | 53 | 54 | 70 | 71 | 72 | 73 | 74 | 75 | ||||
是否命中 | × | × | × | √ | × | √ | × | √ | √ | × | √ | √ | × | √ | √ |
表中每个块编号的上角标是年龄计算器的值
命中率为H=8/15= 58.3%
或如下:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | |
页面请求 | 2 | 3 | 1 | 2 | 5 | 2 | 0 | 1 | 2 | 7 | 1 | 2 | 5 | 2 | 5 | |
L R U | ④ | 2 | 2 | 2 | 3 | 3 | 3 | 1 | 5 | 5 | 0 | 0 | 0 | 7 | 7 | 7 |
③ | / | 3 | 3 | 1 | 1 | 1 | 5 | 2 | 0 | 1 | 2 | 7 | 1 | 1 | 1 | |
② | / | / | 1 | 2 | 2 | 5 | 2 | 0 | 1 | 2 | 7 | 1 | 2 | 5 | 2 | |
① | / | / | / | / | 5 | 2 | 0 | 1 | 2 | 7 | 1 | 2 | 5 | 2 | 5 | |
命中 | × | × | × | √ | × | √ | × | √ | √ | × | √ | √ | × | √ | √ |
命中率为:H=8/15= 58.3%
12、主存容量1MB,划分为2048块,每字块512 B。Cache容量为8KB。若访主存地址为123B5H,
(1)采用直接映像,问Cache地址?主存的第几块映射到Cache的第1块?
(2)若Cache 采用4路组相联,问Cache 地址?
解: 主存容量1MB,划分为2048块,每字块512 B, Cache容量为8KB,20位主存地址为123B5H化为二进制:0001 001 0 001 1 1011 0101,Cache 地址为13位。
(1)采用直接映像,Cache地址为:0 0011 1011 0101 。
主存块:0001 0010 001 映射到 Cache的0001块,块内偏移地址为1 1011 0101。主存字块标记为: 0001 001。
主存的第1+16*K (K=0,1,2,…,127)块映射到Cache的第1块
(2) 采用4路组相联映像,16个Cache块分为4组(组号在Cache块号高位),每组4个块,123B5H化为二进制:0001 001 0 0 01 1 1011 0101 ,块内偏移地址为1 1011 0101。
假设组号在Cache块号高位,则主存块:0001 0010 001 映射到Cache的第00组,块内偏移地址为1 1011 0101。主存字块标记为: 0001 001 01,Cache 地址可能为:①0000 11011 0101②0001 11011 0101③0010 11011 0101④0011 11011 0101这四个地址之一。
或假设组号在Cache块号低位,则主存块:0001 0010 001 映射到Cache的第01组,块内偏移地址为1 1011 0101。主存字块标记为: 0001 001 00,Cache 地址可能为:①0001 11011 0101②0101 11011 0101③1001 11011 0101④1101 11011 0101这四个地址之一。
(注意:组相联映像方式中,以唐朔飞教材为代表的是采用组号在Cache块号低位方案,以蒋本珊教材为代表的是采用组号在Cache块号高位方案,这两种方案都是可以的)
13、某计算机的Cache 采用4路组相联映像,Cache容量为8KB, 主存容量为16MB,每个字块有8个字,每个字有32位.问:
(1)主存地址多少位(按字节编址),各字段如何划分?
(2) 设Cache初始为空,CPU依次从主存第0,1,2,…,99号单元读出100个字( 主存一次读1个字),并重复此次序读10次,问命中率是多少?
(3)若Cache的速度是主存速度的5倍,有Cache访存速度是无Cache多少倍?
解答:主存容量为16MB,所以主存地址为24 位。各字段划分为:
主存字块标记13bits | Cache组号 6bits | 块内地址 3bits | 字节 2bits |
或
主存高位地址 11bits | Cache组号 6bits | 组内字块号 2bits | 块内地址 3bits | 字节 2bits |
(2)每个字块中有8个字,Cache初始为空,故CPU读0号单元时未命中,必须访问MM,同时将该字所在的块调入Cache第0组中的任一块内,接着CPU读1~7号单元均命中。同理,CPU读第8,16,24,…,96号单元时均未命中。
CPU在连续读100个字中共有13次未命中,而后9次循环读100个字全部命中。
命中率为: (100*10-13)/1000=0.987
(3)设MM存取周期为5t,Cache存取周期为t,没有Cache的访问时间为5t*1000=5000t,有Cache的访问时间为:
5t*13 + t(1000-13) = 65tt + 987t = 1052t,则有Cache,速度比为:
5000t/1052t=4.75
14、某机器字长32位,具有16KB的直接映射Cache,该Cache块大小为4个字,问主存地址为: ABCDE8F8H的单元在 Cache中的什么位置?
解答: 16KB Cache地址格式为:
Cache字块地址(10位) | 字块内地址(4位) |
主存地址ABCDE8F8H=1010 1011 1100 1101 1110 1000 1111 1000,块内地址为1000,主存块号为1010 1011 1100 1101 1110 1000 1111。
直接映射下的主存地址格式如下:
主存标记 18位 | Cache块号 10位 | 块内地址 4位 |
主存地址为: ABCDE8F8H的单元在 Cache中的地址为10 1000 1111 1000
15、某机主存容量1MB,字长1B,块大小16B,Cache容量64KB,若Cache采用直接映射方式,请给出2个不同标记的内存地址,它们映射到同一个Cache行。
解答:每块16B,块内的字节地址需要4位;Cache容量64KB,共包含4K行, Cache块号12位;主存容量1MB,主存地址20位。
直接映射下的主存地址格式如下:
主存标记 | Cache行号 | 块内地址 |
4位 | 12位 | 4位 |
两个满足题目要求的主存地址:
0000 1001 0000 1110 0000
0001 1001 0000 1110 0000
16. 一个组相连映射的CACHE由64块组成,每组内包含4块。主存包含4096块,每块由128字组成,访存地址为字地址。试问主存和高速存储器的地址各为几位?画出主存地址格式。
解答:Cache组数:64/4=16 ,Cache容量为:64*128=213字,Cache地址13位
主存共分4096/16=256区,每区16块
主存容量为:4096*128=219字,主存地址19位,地址格式如下:
主存字块标记(8位) | Cache组号(4位) | 字块内地址(7位) |
或:
主存高位地址(6位) | Cache组号(4位) | 组内字块号(2位) | 字块内地址(7位) |
17. 设主存容量为1MB,采用直接映射方式的Cache容量为16KB,块长为4字,每字32位。试问主存地址为ABCDEH的存储单元在Cache中的什么位置?
解答:主存和Cache按字节编址,Cache容量16KB=214B,Cache地址为14位,分为16KB/(4*32/8B)=210块,每块4*32/8=16B=24B,Cache地址格式为:
Cache字块地址(10位) | 字块内地址(4位) |
主存容量1MB=220B,地址共格式为20位,分为1MB/(4*32/8B)=216块,每块24B,采用直接映射方式,主存字块标记为20 - 14=6位,主存地址格式为:
主存字块标记(6位) | Cache字块地址(10位) | 字块内地址(4位) |
主存地址为ABCDEH=1010 1011 1100 1101 1110B,主存字块标记为101010,Cache字块地址为11 1100 1101,字块内地址为1110,故该主存单元应映射到Cache的11 1100 1101块的第1110字节。或者在Cache的第11 1100 1101 1110=3CDEH字节位置。
18. 设主存容量为256K字,Cache容量为2K字,块长为4字。
(1)设计Cache地址格式,Cache中可装入多少块数据?
(2)在直接映射方式下,设计主存地址格式。
(3)在四路组相联映射方式下,设计主存地址格式。
(4)在全相联映射方式下,设计主存地址格式。
解答:(1)Cache容量为2K字,块长为4,Cache共有2K/4=211/22=29=512块,
Cache字地址为9位,字块内地址为2位
因此,Cache地址格式设计如下:
Cache字块地址(9位) | 字块内地址(2位) |
(2)主存容量为256K字=218字,主存地址共18位,共分256K/4=216块,
主存字块标记为18-9-2=7位。
直接映射方式下主存地址格式如下:
主存字块标记(7位) | Cache字块地址(9位) | 字块内地址(2位) |
(3)根据四路组相联的条件,一组内共有4块,得Cache共分为512/4=128=27组,
主存字块标记为18-7-2=9位,主存地址格式设计如下:
主存字块标记(9位) | 组地址(7位) | 字块内地址(2位) |
(4)在全相联映射方式下,主存字块标记为18-2=16位,其地址格式如下:
主存字块标记(16位) | 字块内地址(2位) |
19、若机器有5级中断,中断响应优先级为1-2-3-4-5,而中断处理优先级为1-4-5-2-3。要求:
① 设计各级中断处理程序的中断屏蔽位(令1为屏蔽,0为开放);
② 若在运行主程序时,同时出现第4、2级中断请求,而在处理第2级中断过程中,又同时出现1、5、3级中断请求,试画出此程序运行过程示意图。
解: (1)各级中断处理程序的中断屏蔽位(令1为屏蔽,0为开放)如下图:
中断程 序级别 | 屏蔽字 | ||||
1级 | 2级 | 3级 | 4级 | 5级 | |
第1级 | 1 | 1 | 1 | 1 | 1 |
第2级 | 0 | 1 | 1 | 0 | 0 |
第3级 | 0 | 0 | 1 | 0 | 0 |
第4级 | 0 | 1 | 1 | 1 | 1 |
第5级 | 0 | 1 | 1 | 0 | 1 |
(2)程序运行过程示意图如下:
20、设某机器有5级中断:L0,L1,L2,L3,L4,其中断响应优先次序为:L0->L1->L2->L3->L4,现在要求将中断处理次序改为L1->L3->L0->L4->L2,试问:
(1)将表中各级中断处理程序的各中断屏蔽值如何设置 ?
(每级对应一位,该位为0表示允许中断,为1表示中断屏蔽)
中断处理程序 | 中断处理级屏蔽位 | ||||
L0级 | L1级 | L2级 | L3级 | L4级 | |
L0中断处理程序 | |||||
L1中断处理程序 | |||||
L2中断处理程序 | |||||
L3中断处理程序 | |||||
L4中断处理程序 |
(2)若这5级中断同时发出中断请求,按更改后的次序画出进入各级中断处理程序的过程示意图。
解: (1)每级对应一位,该位为0表示允许中断,为1表示中断屏蔽。各中断屏蔽值设置如下:
中断处理程序 | 中断处理级屏蔽位 | ||||
L0级 | L1级 | L2级 | L3级 | L4级 | |
L0中断处理程序 | 1 | 0 | 1 | 0 | 1 |
L1中断处理程序 | 1 | 1 | 1 | 1 | 1 |
L2中断处理程序 | 0 | 0 | 1 | 0 | 0 |
L3中断处理程序 | 1 | 0 | 1 | 1 | 1 |
L4中断处理程序 | 0 | 0 | 1 | 0 | 1 |
(2) ①L1中断时,不允许任何中断,服务完毕后,退回到L0的中断服务程序,这时,允许L3的中断嵌套响应;
②L3服务完毕后,返回L0中断服务程序;
③L0服务完毕后,按照顺序应处理L2,L2开放了更高级中断L4,因此响应了L4,L4响应完成后再继续执行L2级中断服务程序。
④按优先次序先调用L0,L0屏蔽了本级和低级中断请求,而L1的中断请求未屏蔽,则L1发生中断嵌套响应;
中断处理次序为:L1->L3->L0->L4->L2,中断处理过程示意图如下:
21.设某机配有A、B、C三台设备,其优先顺序按A®B®C降序排列,为改变中断处理次序,它们的中断屏蔽字设置如下:
设备 | 屏蔽字 |
A | 111 |
B | 010 |
C | 011 |
请按下图所示时间轴给出的设备请求中断的时刻,画出CPU执行程序的轨迹。设A、B、C中断服务程序的执行时间均为20m s。
解: A、B、C设备的响应优先级为A最高、B次之、C最低,处理优先级为A最高、C次之、B最低。CPU执行程序的轨迹图如下:
22.设某机配有四个中断源A、B、C、D,其硬件排队优先次序为:A>B>C>D,现要求将中断处理次序改为:D>A>C>B.
①写出每个中断源对应的屏蔽字。
②按下图时间轴给出的四个中断源的请求时刻,画出CPU执行程序的轨迹。设每个中断源的中断服务程序时间均为20μS .
解:(1)在中断处理次序改为D>A>C>B后,每个中断源的屏蔽字如下表所示.
中断源 | 中断处理级屏蔽位 | |||
A | B | C | D | |
A | 1 | 1 | 1 | 0 |
B | 0 | 1 | 0 | 0 |
C | 0 | 1 | 1 | 0 |
D | 1 | 1 | 1 | 1 |
(2)根据新的处理次序,CPU执行程序轨迹如下图所示:
23、某机主存容量为4M×16位,且存储字长等于指令字长,若该机的指令系统具备85种操作。操作码位数固定,且具有直接、间接、立即、相对、基址、
变址等6种寻址方式。
(1)画出一地址指令格式并指出各字段的作用;
(2)该指令直接寻址的最大范围;
(3)一次间址的寻址范围;
(4)相对寻址的位移量。
解答:(1)一地址指令格式为:
OP (7位) | M (3位) | A (6位) |
OP : 操作码字段,共7位,可反映85种操作;
M: 寻址方式特征字段,共3位,可反映6种寻址方式;
A: 形式地址字段,共16-7-3 = 6位
(2)直接寻址的最大范围为26 =64
(3)由于存储字长为16位,故一次间址的寻址范围为216 = 65536
(4)相对寻址的位移量为 -32~+31
24.已知:A=2010×(0.11011011), B=2100×(-0.10101100), 求A+B=?
(假设两数阶码尾数都以补码表示,阶码采用双符号位,尾数用单符号)。
解答:
假设两数都以补码表示,阶码采用双符号位,尾数用单符号,则它们的浮点表示形式分别为:
A和B在机器中的浮点补码表示形式为(双符号位):
阶符 阶码 数符 尾数
A: 00 010 00 11011011
B: 00 100 11 01010100
(1)对阶:
[DE] = [EA]补 + [- EB]补 = 00,010 + 11,100= 11,110
[DE] = - 2 ,表示B比A大,保留大阶 E= 00100,所以A尾数要右移2位,得到:[MA]补 = 00 00 110 110 11
(2) 尾数相加
[MA]补 + [MB]补 = 0000110110 11 + 1101010100 = 11 10001010 11
(3) 规格化处理
[MA]补 + [MB]补 = 11 10001010 11 ,符合左规条件,左规,移 1位,结果=11 00010101 10 ,阶码为 -1 ,E= 00 011
(4)舍入
丢掉位最高位为1 ,其他位为0,舍去10,得:
[MA +MB]补 =11 00010101 ,即 M= - 0.11101011
(5)判溢出
阶码符号为00,故不溢出,故有:A + B= - 0.11101011X 2 011
25.已知x=+0.1011, y=-0.1001,
(1)求:[x]补,[-x]补,[y]补,[-y]补。
(2)求x+y并判溢出(采用双符号位,并写出算式)。
(3)求x-y并判溢出(采用双符号位,并写出算式)。
解答:(1) [x]补=0.1011, [-x]补=1.0101, [y]补=1.0111, [-y]补=0.1001
(2) 00.1011
+ 11. 0111
00.0010 即x+y=0.0010,没有溢出
(3) [x-y]补=[x] 补+[-y] 补,即求[x]补+[-y]补
00.1011
+ 00.1001
01.0100 即x-y= 01. 0100,溢出(正溢出)
26.按机器补码浮点运算步骤,计算[x±y]补.
(1)x=2-011× 0.101 100,y=2-010×(-0.011 100);
(2)x=2-011×(-0.100 010),y=2-010×(-0.011 111);
(3)x=2101×(-0.100 101),y=2100×(-0.001 111)。
解答:先将x、y转换成机器数形式:
(1)x=2-011× 0.101 100,y=2-010×(-0.011 100)
[x]补=1,101;0.101 100, [y]补=1,110;1.100 100
[Ex]补=1,101, [y]补=1,110, [Mx]补=0.101 100, [My]补=1.100 100
1)对阶:
[DE]补=[Ex]补+[-Ey]补 = 11,101+ 00,010=11,111 < 0,
应Ex向Ey对齐,则:[Ex]补+1=11,101+00,001=11,110 = [Ey]补
[x]补=1,110;0.010 110
2)尾数运算:
[Mx]补+[My]补= 0.010 110 + 11.100 100=11.111010
[Mx]补+[-My]补=0.010 110 + 00.011100= 00.110 010
3)结果规格化:
[x+y]补=11,110;11.111 010 = 11,011;11.010 000 (尾数左规3次,阶码减3)
[x-y]补=11,110;00.110 010, 已是规格化数。
4)舍入:无
5)溢出:无
则:x+y=2-101×(-0.110 000)
x-y =2-010×0.110 010
(2)x=2-011×(-0.100010),y=2-010×(-0.011111)
[x]补=1,101;1.011 110, [y]补=1,110;1.100 001
1)对阶:过程同(1)的1),则
[x]补=1,110;1.101 111
2)尾数运算:
[Mx]补+[My]补= 11.101111 + 11. 100001 = 11.010000
[Mx]补+[-My]补= 11.101111 + 00.011111 = 00.001110
3)结果规格化:
[x+y]补=11,110;11.010 000,已是规格化数
[x-y]补=11,110;00.001 110 =11,100;00.111000 (尾数左规2次,阶码减2)
4)舍入:无
5)溢出:无
则:x+y=2-010×(-0.110 000)
x-y =2-100×0.111 000
(3)x=2101×(-0.100 101),y=2100×(-0.001 111)
[x]补=0,101;1.011 011, [y]补=0,100;1.110 001
1)对阶:
[DE]补=00,101+11,100=00,001 >0,应Ey向Ex对齐,则:
[Ey]补+1=00,100+00,001=00,101=[Ex]补
[y]补=0,101;1.111 000(1)
2)尾数运算:
[Mx]补+[My]补= 11.011011+ 11.111000(1)= 11.010011(1)
[Mx]补+[-My]补= 11.011011+ 00.000111(1)= 11.100010(1)
3)结果规格化:
[x+y]补=00,101;11.010 011(1),已是规格化数
[x-y]补=00,101;11.100 010(1)=00,100;11.000 101 (尾数左规1次,阶码减1)
4)舍入:
[x+y]补=00,101;11.010 011(舍)
[x-y]补 不变
5)溢出:无
则:x+y=2101×(-0.101 101)
x-y =2100×(-0.111 011)
27.已知x=0.11011 , y=-0.10101,用变形补码计算x+y,同时指出结果是否溢出。
解答: [x]补=00.11011 ,[y]补=11.01011
[x]补 00.11011
+ [y]补 11.01011
00.00110
∴[x+y]补= 00.00110 ,未溢出 ,x+y = +0.00110
28.已知x=11/16, y=9/16,用变形补码计算x+y,同时指出结果是否溢出。
解答:x=11/16=0.1011,[x]补=00.1011
y=9/16=0.1001,[y]补=00.1001
[x]补 00.1011
+ [y]补 00.1001
01.0100
正溢出
29.某计算机的存储系统由Cache,主存和磁盘构成。Cache的访问时间为15ns;如果被访问的单元在主存中但不在Cache中,需要用60ns的时间将其装入Cache,然后再进行访问;如果被访问的单元不在主存中,则需要10ms的时间将其从磁盘中读入主存,然后再装入Cache中并开始访问。若Cache的命中率为90%,主存的命中率为60%,求该系统中访问一个字的平均时间?
解答:被访问的字在Cache中的概率为0.9
不在Cache中但在主存中的概率为:(1-0.9)×0.6=0.06
不在Cache也不在主存中的概率为:(1-0.9)×(1-0.6)=0.04
所以, 一个字的访问时间为:
15×0.9+(15+60)×0.06+(15+60+10×106) ×0.04
=13.5+4.5+400003
=400021(ns)
30.在一个分页虚存系统中,用户虚地址空间为32页,页长1KB,主存物理为16KB。已知用户程序有10页长,若虚页0、1、2、3已经被调入到主存8、7、4、10页中请问虚地址0AC5和1AC5(十六进制)对应的物理地址是多少?
解答:页长1KB,所以页内地址为10位。
主存物理页面数:16页,共14位地址码(其中页面号4位,页内地址10位)
用户虚地址空间:32页,页面号为031;共15位地址码(其中页面号5位,页内地址10位)。
0AC5H=00010,1011000101B,页面号为2,已被调入到主存页4,所以,物理地址中的页面号为4,页内地址与虚地址的页内地址相同,所以是:0100,1011000101=12C5H。
1AC5H=00110,1011000101B,页面号为6,未被调入到主存页中,所以无物理地址,会发生缺页中断。
31.某机字长32位,共有机器指令100条,指令单字长,等长操作码,CPU内部有通用寄存器32个,可作变址寄存器用,存储器按字节编址,指令拟用直接寻址、间接寻址、变址寻址和相对寻址等4种寻址方式。
① 分别画出4种不同寻址方式的单地址指令的指令格式。
② 采用直接寻址和间接寻址方式时,可直接寻址的存储器的空间各是多少?
③ 写出4种寻址方式下,有效地址EA的表达式。
解答:①指令格式如下图所示。
直接寻址指令:
OP | 地址值 |
间接寻址指令:
OP | 地址值所在内存单元 |
变址寻址指令:
OP | 地址偏移值 |
相对寻址指令:
OP | 地址偏移值 |
②直接寻址时,由于指令操作码占用了其中7位,则剩余的(32–7=25)位表示指令的寻址范围。当按字节编址时,寻址范围为225 =32MB;使用间接寻址时,由于机器的字长为32位,所以可寻址范围为232 = 4GB。
③有效地址EA如下所示。
直接寻址:EA=指令中的地址码
间接寻址:EA=指令中地址码指示的内存单元中存放的有效地址
变址寻址:EA=变址寄存器中包含的地址值+指令中地址码所表示的偏移
相对寻址:EA=程序计数器中包含的地址值+指令中地址码所表示的偏移
32.在虚拟存储器中,若主存容量为4MB,页面容量为4 KB,程序地址空间为1GB.
(1)写出主存地址格式。(2)写出虚拟地址格式。(3)页表长度为多少?
解答:(1)主存地址格式为:
主存页号 10位 | 块内地址 12位 |
(2)虚拟地址格式为:
虚页号 18位 | 块内地址 12位 |
(3)页表长度为218=256K:
33. 将 – 58 表示成定点数和浮点数,
(1)写出其二进制定点数表示(11位补码表示,其中含数符1 位)
(2)写出其二进制浮点数表示(尾数补码表示取11 位,其中数符取1 位;阶码移码表示取5 位,其中含1位阶符)
解答:设x= –58,x 二进制形式:–111010,
x定点表示为 –0000 111010, x浮点表示为 x= –(0.1110100000) ×2110,则:
(1)其定点数补码表示为[x]补 =1 11110001 10
(2)其浮点数表示为= 1, 0110 ;1 0001 100000
34. 试证明[–y]补=–[y]补。
解答:因为[0]补=0,得
[y]补+[–y]补=[y+(-y)]补=[y-y]补=[0]补=0
即: [–y]补=–[y]补
35.某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为16MB,主存(物理)地址空间大小为1MB,页面大小为4KB;Cache采用直接映射方式,共8行;主存与 Cache之间交换的块大小为 32B。系统运行到某一时刻时,页表的部分内容和Cache的部分内容分别如a图、b图所示,图中页框号及标记字段的内容为十六进形式。
请回答下列问题。
(1)虚拟地址共有几位,哪几位表示页号?物理地址共有几位,哪几位表示页框号(物理页号)?
(2)使用物理地址访问Cache时,物理地址应划分成哪几个字段?要求说明每个字段的位数及在物理地址中的位置。
(3)虚拟地址001C60H所在的页面是否在主存中?若在主存中,则该虚拟地址对应的物理地址是什么?访问该地址时是否 Cache 命中?要求说明理由。
解答:(1)页面大小为4KB=212 B,故页内地址12位。虚拟地址空间大小为16MB=224B,虚拟地址为:
虚页号 12位 | 页内地址 12位 |
主存地址空间大小为1MB=220B,物理地址为:
页框号 8位 | 页内地址 12位 |
(2) Cache采用直接映射方式,共23行=8行;主存与 Cache之间交换的块大小为 25 B =32B,故Cache行(块)内地址5位。故Cache大小为32×8=256B=28B。
Cache地址为:
Cache行号3位 | 行内地址5位 |
主存(物理)地址空间大小为1MB=220B,直接映射下的主存物理地址为:
主存标记 12位 | Cache行号 3位 | 行内地址 5位 |
(3)虚拟地址001C60H的低12位C60H为页内地址,高12位001H为虚页号。
查页表可知,虚页001H对应的有效位为1,故该页已调入主存,主存页号为04H,故主存地址为04C60H。
主存地址04C60H=000001001100 011 00000b的低5位00000b为行内地址,中间3位011b为Cache行号,查Cache标记可知,第3行的有效位为1,但标记为105H,故该地址Cache不命中。
36.设主存容量为1MB,Cache容量为16KB,块大小为512B,采用直接地址映象方式。
(1)写出Cache地址形式。
(2)写出主存地址格式。
(3)设块标记为6位,块表容量为多大?
(4)主存地址为CDE8FH的单元在Cache中的什么位置?
解答:(1)Cache容量为16KB=214,块大小为512B,块内地址为9位,Cache地址为:
Cache块地址(5位) | 块内地址(9位) |
(2)主存容量为1MB=220,块大小为512B,块内地址为9位,主存地址为:
主存标记(6位) | 块地址(5位) | 块内(9位) |
(3)Cache每一块在块表中有一项,块表单元有25,块表容量为:25×6位
(4)主存地址CDE8FH=1100 1101 1110 1000 1111 单元在Cache中的地址为:01 111 0 1000 1111 。
37.某计算机的主存地址空间大小为256MB,按字节编址。指令Cache和数据Cache分离,均有8个Cache 行,每行大小为64B,数据 Cache 采用直接映射方式。现有两个功能相同的程序A和程序B,其C伪代码如下:
//程序A
int a[256][256];
……
int sum_array1() {
int i, j, sum = 0;
for(i = 0; i < 256; i++)
for(j = 0; j < 256; j++)
sum += a[i][j];
return sum;
}
//程序B
int a[256][256];
……
int sum_array2() {
int i, j, sum = 0;
for(j = 0; j < 256; j++)
for(i = 0; i < 256; i++)
sum += a[i][j];
return sum;
}
假设int 类型数据用32位补码表示,程序编译时i,j,sum均分配在寄存器中,数组a 按行优先方式存放,其首地址为320(十进制)。请回答下列问题,要求说明理由或计算工程。
- 若不考虑用于Cache一致性维护和替换算法的控制位,则数据Cache的总容量是多少字节?
- 数组元素a[0][31]和a[1][1]各自所在主存块对应的Cache行号是多少?(Cache 行号从0 开始)
- 程序A和程序B的数据访问命中率是多少?哪个程序执行时间短?
解答:
(1)每个Cache行对应一个标记项,如下图:
有效位 | 脏位 | 替换控制位 | 标记位 |
不考虑用于Cache一致性维护和替换算法的控制位。地址为28位(228=256M)。数据Cache的总容量=8×64=512B=29 B,块内地址为6位 (26=64)Cache 块号3位(23=8)。
标记位数=28- 3 – 6=19,有效位为1位,这样,标记和有效位占(19 + 1)×8/8=20B, Cache的总容量=为512 + 20 =532B
(2)主存地址格式:
标记位19位 | 块(行)号3位 | 块内地址6位 |
Cache地址格式:
块(行)号3位 | 块内地址6位 |
数组按行优先方式存放,其首地址为320,数字元素为4B.
a[0][31]在主存起始地址为:320 + 31*4=444(1 1011 1100)B, 即(110 111100)B, 则块号为6(110)。或444/64=6,Cache 行号=6 mod 8=6
a[1][1]在主存起始地址为:320 +( 256+ 1)*4= 1348(10 101 000100) B, 则块号为5(101)。或块号=1348/64=21,Cache 行号=21 mod 8=5.
(3)程序A:
总访存次数=数组元素个数=256*256=216,每次对加载到 Cache某行中的第一个数据的访问都是不命中的cahce,所以未命中次数=占有内存块数=216*4/64=212;命中率=(216 - 212)/216=(1-1/16)=93.75%;
或对于A程序: 1行Cache 占64B,每个int 数据元素占4 B,一行有16个数。第一个数因Cache缺失而不命中(强制性缺失),然后调入Cache,使得后面的15个int 数据元素全部命中,所以命中率为15/16=93.75%
程序B:
数组每行为256个数据,占用256*4=1024B,共需要1024/64=16个 Cache 行(页),Cache 共 8 行。程序访问次序为:a[0][0]、a[1][0]、a[2][0]、a[3][0] ……,
Cache 的8行被依次加载数据为:a[0][0]~ a[0][15]、a[1][0]~ a[1][15] ……a[7][0]~ a[7][15]、当访问a[8][0]时,a[0][0]~ a[0][15]被替换,以此类推,每次访存都是不命中,命中率为0.
程序A执行时间更短。
38.有如下C语言程序段:
for(int k = 0; k < 1000; k++)
{
a[k] = a[k] + 32;
}
若数组a以及变量k均为int型,int型数据占4B,数据Cache采用直接映射方式,数据区大小是1KB,块大小是16B,该程序段执行前Cache为空,则该程序段执行过程中,访问数组a的Cache的缺失率?
解答:a[k]的访问步骤是:先访问Cache,若Cache缺失则从主存中取出一个块调入Cache,这个块中的后几个数据都是命中的。
本题中一个数据占4B,一个块大小是16B,一个块中有4个数据,读a[k]后加32 再写回a[k],这样一次循环要八次访问Cache,其中只有第一次是缺失的,后面七次都是命中的,所以缺失率是1/8=12.5%。
39.假设某计算机按字编址,Cache 有 4 个行,Cache 和主存之间交换的块为 1 个字。若 Cache 的内容初始为空,采用 2 路组相联映射方式和 LRU 替换算法。当访问的主存地址依次为 0,4,8,2,0,6,8,6,4,8 时,计算命中 Cache 的次数?要求有示意图。
解答:Cache 有4个行,2路组相联,即Cache 被分成2组,每组2行。主存地址为0〜1、4〜5、8〜9 可映射到第0组Cache 中,主存地址为2〜3、6〜7可映射到第1组Cache 中。
0,2,4,6,8的2进制表示分别为:0(0 0),2(1 0),4(1 0 0),6(1 10),8(10 00),访问的0,2,4,6,8字若在Cache有副本,则副本是在 Cache的第0、1、0、1、0组中任意页,映射和替换如下图所示:
序号 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | |
主存地址 | 0 | 4 | 8 | 2 | 0 | 6 | 8 | 6 | 4 | 8 | |
组号 | 0 | 0 | 0 | 8 | 8 | 8 | 8 | 8* | 8 | 8 | 8* |
4 | 4 | 4 | 0 | 0 | 0 | 0 | 4 | 4 | |||
1 | 2 | 2 | 2 | 2 | 2 | 2 | 2 | ||||
6 | 6 | 6* | 6 | 6 | |||||||
是否命中 | × | × | × | × | × | × | √ | √ | × | √ |
命中率=3/10=30%
(本题假定Cache 行号高位为组号,蒋本珊所编教材按此方式)
40.有一 Cache系统,字长为16位,主存容量为16字×256块,Cache容量为16字×8块,采用全相联映射。
(1)主存和Cache容量各位多少字节?主存和 Cache的字地址各为多少?
(2)若原先已经依次装入了5块信息,问字地址338H所在的主存块将装入Cache 块的块号和在Cache中的字地址是多少?
(3)若块表中地址为1的行中标记着36H的主存块号标志,Cache 块号为5H,则在CPU送来主存的字地址为368H时是否命中?若命中,此时Cache的字地址为多少?
解答:(1)主存容量=16×256×2B=8192B=213,Cache容量=16×8×2B=256B=28,所以主存字地址=213/21=12位, 主存字地址=28/21=7位,如下:
主存地址:
主存块号 8位 | 块内地址 4位 |
Cache地址:
Cache块号 3位 | 块内地址 4位 |
(2)每块大小为16个字, 字地址338H所在的主存块号为33H,由于是全相联映象,原先已装入的5块依次在0~4号块,因此主存的33H块装入Cache的第5块。对应的Cache字地址为101 1000B,其中101为块号,1000为块内地址。
(3) 由于块表中地址为1的行中标记着36H的主存块号标志,则当CPU送来主存地址为368H时,其主存块号为36H,所以命中,Cache的块号为5(101) ,此时的Cache字地址为58H。
41.假定数组元素按行优先方式存储,M、N都是2048,按字节编址,每个数组元素占4个字节。对于下面的两个函数:
//程序A
int sumaaryrows(int a[M][N])
{
int i, j, sum = 0;
for (i = 0; i < M, i++)
for (j = 0; i < N, j++)
sum += a[i][j];
return sum;
}
//程序B
int sumaaryrows(int a[M][N])
{
int i, j, sum = 0;
for (j = 0; j < N, j++)
for (i = 0; i < M, i++)
sum += a[i][j];
return sum;
}
(1)对于数组a的访问,哪个空间局部性更好?哪个时间局部性更好?
(2)对于指令访问来说, for 循环体的空间局部性和时间局部性如何?
解答:
(1)对于数组a, 程序 A和程序B的空间局部性相处较大。
程序A对数组a的访问顺序为:
a[0][0], a[0][1] , …,a[0][2047] ;
a[1][0], a[1][1] , …,a[1][2047] ;
…
由此可见,数据访问顺序与存放顺序是一致的,空间局部性好。
程序B对数组a的访问顺序为:
a[0][0], a[1][0] , …,a[2047][0] ;
a[0][0], a[1][1] , …,a[2047][1] ;
…
由此可见,数据访问顺序与存放顺序不一致,每次访问都要跳过2048个元素,即8190字节,若主存与 Cache交换单位小于8KB,则每访问1个数组元素都需要装入1个主存块到Cache 中,没有空间局部性。
两个程序的时间局部性都较差,因为每个数组元素都只被访问1次。
(2)对于for 循环体,程序 A和程序B的访问局部性都是一样的。因为循环体内指令按序连续存放的,所以空间局部性好。
内循环体被连续重复执行了2048×2048次,所以时间局部性也好。