当前位置:首页 >> 工学 >>

计算机组织与系统结构第四章习题答案



第 4 章 习 题 答 案
3. 已知某机主存空间大小为 64KB,按字节编址。要求: 已知某机主存空间大小为 ,按字节编址。要求: 芯片构成该主存储器,需要多少个芯片 芯片? (1)若用 1K×4 位的 SRAM 芯片构成该主存储器,需要多少个芯片? ) 选址? (2)主存地址共多少位?几位用于选片?几位用于片内选址? )主存地址共多少位?几位用于选片?几位用于片内选址 逻辑框图。 (3)画出该存储器的逻辑框图。 )画出该存储器的逻辑框图 参考答案: 参考答案: (1)64KB / 1K×4 位 = 64×2 = 128 片。 ) 位选片, 位片内选址。 (2)因为是按字节编址,所以主存地址共 16 位,6 位选片,10 位片内选址。 )因为是按字节编址,所以主存地址共 为高电平有效 有效。 (3)显然,位方向上扩展了 2 倍,字方向扩展了 64 倍。下图中片选信号 CS 为高电平有效。 )显然,

4. 用 64K×1 位的 DRAM 芯片构成 256K×8 位的存储器。要求: 位的存储器。要求: (1) 计算所需芯片数,并画出该存储器的逻辑框图。 ) 计算所需芯片数, 画出该存储器的逻辑框图。 异步刷新方式 刷新信号的间隔是多少时间 (2) 若采用异步刷新方式,每单元刷新间隔不超过 2ms,则产生刷新信号的间隔是多少时间?若采 ) 若采用异步刷新方式, , 产生刷新信号的间隔是多少时间? 用集中刷新方式, 存储器刷新一遍最少用多少读写周期? 用集中刷新方式,则存储器刷新一遍最少用多少读写周期? 参考答案: 参考答案: 存储器逻辑框图见下页( 为高电平有效 。 有效) (1)256KB / 64K×1 位 = 4×8 = 32 片。存储器逻辑框图见下页(图中片选信号 CS 为高电平有效) ) 刷新时, 内每行必须被刷新一次 新一次, (2)因为每个单元的刷新间隔为 2ms,所以,采用异步刷新时,在 2ms 内每行必须被刷新一次,且 ) ,所以,采用异步刷新时 仅被刷新一次。 因此, 仅被刷新一次。因为 DRAM 芯片存储阵列为 64K=256×256,所以一共有 256 行。因此,存储器 ,所以一共有 产生一次刷新信号。采用集中刷新方式时 一次刷新信号 集中刷新方式 控制器必须每隔 2ms/256=7.8?s 产生一次刷新信号。采用集中刷新方式时,整个存储器刷新一 个存储(读写)周期,在这个过程中,存储器不能进行读写操作。 遍需要 256 个存储(读写)周期,在这个过程中,存储器不能进行读写操作。

……

5. 用 8K×8 位的 EPROM 芯片组成 32K×16 位的只读存储器,试问: 位的只读存储器,试问: 最少应有多少位 最少应有多少位 (1)数据寄存器最少应有多少位? )数据寄存器最少应有多少位? (2) 地址寄存器最少应有多少位? ) 地址寄存器最少应有多少位? 芯片? (3) 共需多少个 EPROM 芯片? ) (4) 画出该只读存储器的逻辑框图。 ) 画出该只读存储器的逻辑框图。 参考答案: 参考答案: (1)数据寄存器最少有 16 位。 )数据寄存器最少有 位的字编址 ; 字编址) 按字节编址) (2)地址寄存器最少有:15 位(若按 16 位的字编址) 16 位(若按字节编址) )地址寄存器最少有 。 (3)共需要 32K×16 位 / 8K×8 位= 4×2 = 8 片。 ) 如下( 为高电平有效 。 有效) (4)该只读存储器的逻辑框图如下(假定按字编址,图中片选信号 CS 为高电平有效) )该只读存储器的逻辑框图如下 假定按字编址,

6. 某计算机中已配有 0000H~7FFFH 的 ROM 区域, 某计算机中已 区域, ~ 现在再用 8K×4 位的 RAM 芯片形成 32K×8 位的存 储区域, 、MREQ#(访存) 储区域,CPU 地址总线为 A0-A15,数据总线为 D0-D7,控制信号为 R/W#(读/写) , , ( 写 、 (访存) 。 要求说明地址译码方案, 芯片、 之间的连接图。 要求说明地址译码方案,并画出 ROM 芯片、RAM 芯片与 CPU 之间的连接图。假定上述其他条件不 变,只是 CPU 地址线改为 24 根,地址范围 000000H~007FFFH 为 ROM 区,剩下的所有地址空间都 ~ 芯片配置 则需要多少个 配置, 芯片? 用 8K×4 位的 RAM 芯片配置,则需要多少个这样的 RAM 芯片? 参考答案: 参考答案: CPU 地址线共 16 位, 其中, 8000H~FFFFH 为 RAM 区, 故存储器地址空间为 0000H~FFFFH, ~ , 其中, ~

…… …

15 个单元 其空间大小为 共 2 =32K 个单元,其空间大小为 32KB,故需 8K×4 位的芯片数为 32KB/8K×4 位= 4×2 = 8 片。 , 因为 ROM 区在 0000H~7FFFH,RAM 区在 8000H~FFFFH,所以可通过最高位地址 A15 来区 ~ , ~ , 芯片; 芯片,此时, 进行译码, 分,当 A15 为 0 时选中 ROM 芯片;为 1 时选中 RAM 芯片,此时,根据 A14 和 A13 进行译码,得到 4 个译码信号, 组字扩展芯片的片选信号 (图略, 片选信号。 个译码信号,分别用于 4 组字扩展芯片的片选信号。 图略,可参照图 4.15) ) 若 CPU 地址线为 24 位,ROM 区为 000000H~007FFFH,则 ROM 区大小为 32KB,总大小为 ~ , , 14 16MB=2 KB=512×32KB, 大小为 , 所以 RAM 区大小为 511×32KB, , 共需使用 RAM 芯片数为 511×32KB/8K×4 个芯片。 位=511×4×2 个芯片。

7. 假定一个存储器系统支持4体交叉存取, 假定一个存储器系统支持 体交叉存取 某程序执行过程中访问地址序列为 9, 17, 2, 51, 37, 13, 4, 8, 41, 某程序执行过程中访问地址序列为 访问地址序列为3, 一个存储器系统支持 体交叉存取, 67, 10,则哪些地址访问会发生体冲突? ,则哪些地址访问会发生体冲突? 参考答案: 参考答案: 体交叉访问的存储系统,每个存储模块的地址分布为: 对于 4 体交叉访问的存储系统,每个存储模块的地址分布为: Bank0: 0、4、8、12、16 … … 、 、 、 、 Bank1: 1、5、9、13、17 …37 …41… 、 、 、 、 Bank2: 2、6、10、14、18 … … 、 、 、 、 Bank3: 3、7、11、15、19…51…67 、 、 、 、 就会发生访存冲突。所以, 如果给定的访存地址在相邻的 4 次访问中出现在同一个 Bank 内,就会发生访存冲突。所以,17 和 9、 、 37 和 17、13 和 37、8 和 4 发生冲突。 发生冲突。 、 、 8. 现代计算机中,SRAM 一般用于实现快速小容量的 cache,而 DRAM 用于实现慢速大容量的主存。以 现代计算机中, 用于实现慢速大容量的主存。 , 来实现主存( 巨型机) 请问: ,请问 前超级计算机通常不提供 cache,而是用 SRAM 来实现主存(如,Cray 巨型机) 请问:如果不考虑 , , 成本,你还这样设计高性能计算机吗?为什么? 成本,你还这样设计高性能计算机吗?为什么? 参考答案: 参考答案: 这样做的理由主要有以下两个方面: 不这样做的理由主要有以下两个方面: 主存越大越好 主存大,缺页率降低,因而减少了访问磁盘所需的时间。 越好, ① 主存越大越好,主存大,缺页率降低,因而减少了访问磁盘所需的时间。显然用 DRAM 芯片 芯片构成的主存容量大的多。 比用 SRAM 芯片构成的主存容量大的多。 的命中率很高,因而, ② 程序访问的局部性特点使得 cache 的命中率很高,因而,即使主存没有用快速的 SRAM 芯片 芯片,也不会影响到访问速度。 而是用 DRAM 芯片,也不会影响到访问速度。 9. 分别给出具有下列要求的程序或程序段的示例: 分别给出具有下列要求的程序或程序段的示例: 访问, (1)对于数据的访问,几乎没有时间局部性和空间局部性。 )对于数据的访问 几乎没有时间局部性和空间局部性。 (2)对于数据的访问,有很好的时间局部性,但几乎没有空间局部性。 )对于数据的访问,有很好的时间局部性,但几乎没有空间局部性。 (3)对于数据的访问,有很好的空间局部性,但几乎没有时间局部性。 )对于数据的访问,有很好的空间局部性,但几乎没有时间局部性。 都好。 (4)对于数据的访问,空间局部性和时间局部性都好。 )对于数据的访问,空间局部性和时间局部性都好 参考答案( : 参考答案(略) 可以给出许多类似的示例。例如,对于按行优先存放在内存的多维数组, 可以给出许多类似的示例。例如,对于按行优先存放在内存的多维数组,如果按列优先访问数 组元素,则空间局部性就差,如果在一个循环体中某个数组元素只被访问一次,则时间局部性就差。 组元素,则空间局部性就差,如果在一个循环体中某个数组元素只被访问一次,则时间局部性就差。 10. 假定某机主存空间大小 假定某机主存空间大小1GB, 按字节编址。 cache的数据区 即不包括标记、 有效位等存储区) 空间大小 , 按字节编址。 的数据区 即不包括标记、 ( 有效位等存储区) 64KB, 有 , 块大小为128字节 采用直接映射和 字节, 块大小为 字节,采用直接映射和全写(write-through)方式。请问: )方式。请问: (1)主存地址如何划分?要求说明每个字段的含义、位数和在主存地址中的位置。 )主存地址如何划分?要求说明每个字段的含义、位数和在主存地址中的位置。 的总容量为多少位? (2)cache的总容量为多少位? ) 的总容量为多少位 参考答案: 参考答案: (1)主存空间大小为 1GB,按字节编址,说明主存地址为 30 位。cache 共有 64KB/128B=512 行,因 )主存空间大小为 ,按字节编址,说明主存地址为

字节,说明块内地址 块内地址为 因此, 位主存地址中, 此,行索引(行号)为 9 位;块大小 128 字节,说明块内地址为 7 位。因此,30 位主存地址中, 行索引(行号) 标志( 行索引; 位为块内地址 块内地址。 高 14 位为标志(Tag);中间 9 位为行索引;低 7 位为块内地址。 ) 中无需替换算法所需控制位 (2)因为采用直接映射,所以 )因为采用直接映射,所以cache中无需替换算法所需控制位,全写方式下也无需修改(dirty)位, 中无需替换算法所需控制位,全写方式下也无需修改( ) 而标志位和有效位总是必须有的,所以, 总容量为512×(128×8+14+1)=519.5K位。 而标志位和有效位总是必须有的,所以,cache总容量为 总容量为 位 11. 假定某计算机的cache共16行,开始为空,块大小为 个字,采用直接映射方式。CPU执行某程序时, 假定某计算机的 个字, 执行某程序时 某计算机的 共 行 开始为空,块大小为1个字 采用直接映射方式。 执行某程序 依次访问以下地址序列 , , , , , , , , , , , , , , 和 。要求: 访问以下地址序列: 依次访问以下地址序列:2,3,11,16,21,13,64,48,19,11,3,22,4,27,6和11。要求: 访问上述地址序列的命中率 (1)说明每次访问是命中还是缺失,试计算访问上述地址序列的命中率。 )说明每次访问是命中还是缺失,试计算访问上述地址序列的命中率。 数据区容量不变, 个字,则上述地址序列的命中情况又如何? (2)若 cache 数据区容量不变,而块大小改为 4 个字,则上述地址序列的命中情况又如何? ) 参考答案 采用直接映射方式, 直接映射方式 主存被划分成 (1) cache 采用直接映射方式,其数据区容量为 16 行×1 字/行=16 字;主存被划分成 1 字/块,所以, ) 行 块 所以, 字号。因此,映射公式为: 主存块号 = 字号。因此,映射公式为:cache 行号 = 主存块号 mod 16 = 字号 mod 16。 。 为空, 行号)和命中情况。 开始 cache 为空,所以第一次都是 miss,以下是映射关系(字号 ,以下是映射关系(字号-cache 行号)和命中情况。 2-2: miss,3-3: miss,11-11: miss,16-0: miss, 21-5: miss,13-13: miss,64-0: miss、replace, , , , , , 、 , 48-0: miss、replace,19-3: miss、replace,11-11: hit, 3-3: miss、replace,22-6: miss, 、 , 、 , 、 , , 4-4: miss,27-11: miss、replace,6-6: miss、replace,11-11: miss、replace。 , 、 , 、 , 、 。 只有一次命中! 只有一次命中! 采用直接映射方式,数据区容量不变 直接映射方式 容量不变, 个字,所以, (2)cache 采用直接映射方式,数据区容量不变,为 16 个字,每块大小为 4 个字,所以,cache 共有 ) 4 行;主存被划分为 4 个字/块,所以,主存块号 = [字号 。因此,映射公式为:cache 行号 = 主存被划分为 字号/4]。因此,映射公式为: 块 所以, 字号 字号/4] 主存块号 mod 4 = [字号 mod 4。 字号 。 以下是映射关系(字号-主存块号 主存块号-cache 行号)和命中情况。 行号)和命中情况。 以下是映射关系(字号 主存块号 2-0-0: miss,3-0-0: hit,11-2-2: miss,16-4-0: miss、replace,21-5-1、13-3-3: miss, , , , 、 , 、 , 64-16-0、48-12-0、19-4-0: miss, replace,11-2-2: hit,3-0-0: miss、replace, 、 、 , , 、 , 22-5-1: hit,4-1-1: miss、replace,27-6-2: miss、replace,6-1-1: hit,11-2-2: miss、replace。 , 、 , 、 , , 、 。 命中 4 次。 由此可见,块变大后,能有效利用访问的空间局部性 从而使命中率提高! 利用访问的空间局部性, 由此可见,块变大后,能有效利用访问的空间局部性,从而使命中率提高! 12. 假定数组元素在主存按从左到右的下标顺序存放。试改变下列函数中循环的顺序,使得其数组元素的 假定数组元素在主存按从左到右的下标顺序存放。 改变下列函数中循环的顺序, 顺序存放 问与排列顺序一致,并说明为什么修改后的程序比原来的程序执行时间短 访问与排列顺序一致,并说明为什么修改后的程序比原来的程序执行时间短。 int sum_array ( int a[N][N][N]) { int i, j, k, sum=0; for (i=0; i < N; i++) for (j=0; j < N; j++) for (k=0; k < N; k++) sum+=a[k][i][j]; return sum; } 参考答案: 参考答案: int sum_array ( int a[N][N][N]) { int i, j, k, sum=0; for (k=0; k < N; k++) for (i=0; i < N; i++) for (j=0; j < N; j++) sum+=a[k][i][j];

return sum; } 修改后程序的数组元素的访问与排列顺序一致,使得空间局部性比原程序好,故执行时间更短。 修改后程序的数组元素的访问与排列顺序一致,使得空间局部性比原程序好,故执行时间更短。 13. 分析比较以下三个函数的空间局部性,并指出哪个最好,哪个最差? 分析比较以下三个函数的空间局部性,并指出哪个最好,哪个最差? # define N 1000 typedef struct { int vel[3]; int acc[3]; } point; point p[N]; void clear1(point *p, int n) { int i, j; for (i = 0; i < n; i++) { for (j = 0; j<3; j++) p[i].vel[j] = 0; for (j = 0; i<3; j++) p[i].acc[j] = 0; } } # define N 1000 typedef struct { int vel[3]; int acc[3]; } point; point p[N]; void clear2(point *p, int n) { int i, j; for (i=0; i<n; i++) { for (j=0; j<3; j++) { p[i].vel[j] = 0; p[i].acc[j] = 0; } } } # define N 1000 typedef struct { int vel[3]; int acc[3]; } point; point p[N]; void clear3(point *p, int n) { int i, j; for (j=0; j<3; j++) { for (i=0; i<n; i++) p[i].vel[j] = 0; for (i=0; i<n; i++) p[i].acc[j] = 0; } }

参考答案: 参考答案: 对于函数 clear1,其数组访问顺序与在内存的存放顺序完全一致,因此,空间局部性最好。 ,其数组访问顺序与在内存的存放顺序完全一致,因此,空间局部性最好。 单元最大相差 对于函数 clear2,其数组访问顺序在每个数组元素内跳越式访问,相邻两次访问的单元最大相差 ,其数组访问顺序在每个数组元素内跳越式访问,相邻两次访问的单元最大 3 个 int 型变量(假定 sizeof(int)=4,则相当于 12B) 因此空间局部性比 clear1 差。若主存块大小比 型变量( ,因此空间局部性比 , ) , 12B 小的话,则大大影响命中率。 小的话, 大大影响命中率 影响命中率。 对于函数 对于函数 clear3,其数组访问顺序与在内存的存放顺序不一致,相邻两次访问的单元都相差 6 个 , 数组访问顺序与在内存的存放顺序不一致, int 型变量 假定 sizeof(int)=4, 型变量( 因此, 空间局部性比 还差。 ( , 则相当于 24B) ) 因此, 空间局部性比 clear2 还差。 若主存块大小比 24B 小的话,则大大影响命中率。 小的话,则大大影响命中率。 14. 以下是计算两个向量点积的程序段: 以下是计算两个向量点积的程序段: float dotproduct (float x[8], float y[8]) { float sum = 0.0; int i,; for (i = 0; i < 8; i++) sum += x[i] * y[i]; return sum; } 要求: 要求: 的时间局部性和空间局部性,并推断命中率的高低。 (1)试分析该段代码中数组 x 和 y 的时间局部性和空间局部性,并推断命中率的高低。 ) 该段程序运行的计算机的 采用直接映射方式, 字节, (2)假定该段程序运行的计算机的数据 cache 采用直接映射方式,其数据区容量为 32 字节,每个主 )假定该段程序运行的计算机的数据

字节。 分配给寄存器, 存块大小为 16 字节。假定编译程序将变量 sum 和 i 分配给寄存器,数组 x 存放在 00000040H 字节的连续存储区中, 后进行存放。 试计算该程序数据访问的命中率, 开始的 32 字节的连续存储区中, 数组 y 紧跟在 x 后进行存放。 试计算该程序数据访问的命中率, 命中情况。 要求说明每次访问的 cache 命中情况。 路组相联映射方式, 字节,其他条件不变, (3)将上述(2)中的数据 cache 改用 2-路组相联映射方式,块大小改为 8 字节,其他条件不变,则 )将上述( ) 路组相联映射方式 该程序数据访问的命中率是多少? 该程序数据访问的命中率是多少? 在上述( ) 中条件不变的情况下, 则数据访问的命中率是多少? 访问的命中率是多少 (4) ) 在上述 2) ( 中条件不变的情况下, 如果将数组 x 定义为 float[12], , 则数据访问的命中率是多少? 参考答案: 参考答案: 都按存放顺序访问,不考虑映射的情况下,空间局部性都较好,但都只被访问一次, (1)数组 x 和 y 都按存放顺序访问,不考虑映射的情况下,空间局部性都较好,但都只被访问一次, ) 没有时间局部性。命中率的高低与块大小、映射方式等都有关,所以, 故没有时间局部性。命中率的高低与块大小、映射方式等都有关,所以,无法推断命中率的高 低。 采用直接映射方式,块大小为 字节,数据区大小为 字节, 直接映射方式 (2)cache 采用直接映射方式,块大小为 16 字节,数据区大小为 32 字节,故 cache 共有 2 行。数组 ) x 的 8 个元素(共 32B)分别存放在主存 40H 开始的 32 个单元中,共有 2 个主存块,其中 x[0] 个元素( 个单元中 个主存块, ) ~ x[3]在第 4 块,x[4] ~ x[7]在第 5 块中;数组 y 的 8 个元素(共 32B)分别在主存第 6 块和第 7 个元素( 在第 在第 块中; )分别在主存第 块中。所以, 块中。所以,x[0] ~ x[3]和 y[0] ~ y[3]都映射到 cache 第 0 行; 和 都映射到 x[4] ~ x[7]和 y[4] ~ y[7]都映射到 cache 第 1 行。 和 都映射到 cache 第0行 第1行 第 0-3 次循环 x[0-3],y[0-3] , 第 4-7 次循环 x[4-7],y[4-7] ,

个数组元素, 总是映射到同一行 每调入一块,装入 4 个数组元素,因为 x[i]和 y[i]总是映射到同一行,相互淘汰对方,故每次都 调入一块, 和 总是映射到同一行,相互淘汰对方, 命中, 不命中,命中率为 0. 路组相联, 每组两行,共两组。 (3)改用 2 路组相联,块大小为 8B,则 cache 共有 4 行,每组两行,共两组。 ) , 个主存块, 分别在 块中; 数组 x 有 4 个主存块,x[0] ~ x[1]、x[2] ~ x[3],x[4] ~ x[5],x[6] ~ x[7]分别在第 8~11 块中; 、 , , 分别 个主存块, 分别在 块中; 数组 y 有 4 个主存块,y[0] ~ y[1]、y[2] ~ y[3],y[4] ~ y[5],y[6] ~ y[7]分别在第 12~15 块中; 、 , , 分别 cache 第0行 第1行 第0组 第1组 x[0-1],x[4-5] x[2-3],x[6-7] y[0-1],y[4-5] y[2-3],y[6-7]

每调入一 每调入一块,装入两个数组元素,第二个数组元素的访问总是命中,故命中率为 50%。 装入两个数组元素,第二个数组元素的访问总是命中, 。 个元素, 块开始,因而, 和 (4)若(2)中条件不变,数组 x 定义了 12 个元素,共有 48B,使得 y 从第 7 块开始,因而,x[i]和 ) )中条件不变, , y[i]就不会映射到同一个 cache 行中,即:x[0] ~ x[3]在第 4 块,x[4] ~ x[7]在第 5 块,x[8] ~ x[11] 行中, 就不会映射到同一个 在第 在第 块中, 在第 6 块中,y[0] ~ y[3]在第 7 块,y[4] ~ x[7]在第 8 块。 在第 在第 cache 第0行 第1行 第 0-3 次循环 x[0-3] y[0-3] 第 4-7 次循环 y[4-7] x[4-7]

每调入一 个数组元素,第一个元素不命中, 命中, 每调入一块,装入 4 个数组元素,第一个元素不命中,后面 3 个总命中,故命中率为 75%。 。 15. 以下是对矩阵进行转置的程序段: 以下是对矩阵进行转置的程序段: 的程序段 typedef int array[4][4]; void transpose(array dst, array src) { int i, j; for (i = 0; i < 4; i++) for (j = 0; j < 4; j++) dst[j][i] = src[i][j]; }

的数据区大小为 假设该段程序运行的计算机中 sizeof(int)=4,且只有一级 cache,其中 L1 data cache 的数据区大小为 , , 32B,采用直接映射、写回方式,块大小为 16B,初始为空。数组 dst 从地址 0000C000H 开始存放, 方式, 开始存放, ,采用直接映射、 ,初始为空。 开始存放。填写下表,说明数组元素 数组 src 从地址 0000C040H 开始存放。填写下表,说明数组元素 src[row][col]和 dst[row][col]映射到 和 映射到 cache 的哪一行,其访问是命中(hit)还是失效(miss) 若 L1 data cache 的数据区容量改为 128B 的哪一行, 访问是命中( )还是失效( 。若 ) 。 重新填写表中内容。 时,重新填写表中内容。 src 数组 32B row=0 row=1 row=2 row=3 128B row=0 row=1 row=2 row=3 col=0 0/miss 1/miss 0/miss 1/miss col=0 4/miss 5/ miss 6/ miss 7/ miss col=1 0/miss 1/hit 0/miss 1/hit col=1 4/hit 5/hit 6/hit 7/hit src 数组 col=2 4/hit 5/hit 6/hit 7/hit col=3 4/ hit 5/hit 6/hit 7/hit col=0 0/miss 1/miss 2/miss 3/miss col=2 0/hit 1/miss 0/hit 1/miss col=3 0/miss 1/hit 0/miss 1/hit col=0 0/miss 1/miss 0/miss 1/miss dst 数组 col=1 0/miss 1/miss 0/miss 1/miss col=1 0/hit 1/hit 2/hit 3/hit col=2 0/miss 1/miss 0/miss 1/miss col=2 0/hit 1/hit 2/hit 3/hit col=3 0/miss 1/miss 0/miss 1/miss col=3 0/hit 1/hit 2/hit 3/hit

dst 数组

参考答案: 参考答案: 从程序来看,数组访问过程如下 访问过程如下: 从程序来看,数组访问过程如下: src[0] [0]、dst[0] [0]、src[0] [1]、dst[1] [0]、src[0] [2]、dst[2] [0]、src[0] [3]、dst[3] [0] 、 、 、 、 、 、 、 src[1] [0]、dst[0] [1]、src[1] [1]、dst[1] [1]、src[1] [2]、dst[2] [1]、src[1] [3]、dst[3] [1] 、 、 、 、 、 、 、 src[2] [0]、dst[0] [2]、src[2] [1]、dst[1] [2]、src[2] [2]、dst[2] [2]、src[2] [3]、dst[3] [2] 、 、 、 、 、 、 、 src[3] [0]、dst[0] [3]、src[3] [1]、dst[1] [3]、src[3] [2]、dst[2] [3]、src[3] [3]、dst[3] [3] 、 、 、 、 、 、 、 个字节, 个数组元素占一个主存块, 因为块大小为 16B,每个数组元素有 4 个字节,所以 4 个数组元素占一个主存块,因此每次总是 , 的一行。 调入 4 个数组元素到 cache 的一行。 L1 数组元素 dst[2][i] 、 src[0][i]、 src[2][i] 当数据区容量为 32B 时, data cache 中共有 2 行。 数组元素 dst[0][i]、 、 、 (i=0~3)都映射到 cache 第 0 行,数组元素 dst[1][i]、dst[3][i] 、src[1][i]、src[3][i] (i=0~3)都映射到 ~ 都映射到 、 、 ~ 都映射到 cache 第 1 行。因此,从上述访问过程来看,src[0][0]所在的一个主存块(即存放 src[0][i] (i=0~3)四 因此,从上述访问过程来看, 所在的一个主存块( 所在的一个主存块 ~ 四 个数组元素) 替换掉了。 个数组元素)刚调入 cache 后,dst[0][0]所在主存块又把 src[0][0]替换掉了。…… 所在主存块又把 替换掉了 当数据区容量为 128B 时,L1 data cache 中共有 8 行。数组元素 dst[0][i]、dst[1][i] 、dst[2][i]、 、 、 dst[3][i]、src[0][i]、src[1][i]、src[2][i]、src[3][i] (i=0~3) 分别映射到 cache 第 0、1、2、3、4、5、 、 、 、 、 ~ 分别映射到 、 、 、 、 、 、 6、7 行。因此,不会发生数组元素的替换。每次总是第一个数组元素不命中,后面三个数组元素都命 因此,不会发生数组元素的替换 每次总是第一个数组元素不命中 替换。 一个数组元素不命中, 、 中。

16. 通过对方格中每个点设置相应的 通过对方格中每个点设置相应的CMYK值就可以将方格图上相应的颜色。以下三个程序段都可实现对 值就可以将方格图上相应的颜色。以下三个程序段都可实现对 值就可以将方格图上相应的颜色 三个程序段都可 一个8×8的方格中图上黄色的功能。 的方格中 的功能。 一个 的方格 图上黄色的功能

struct pt_color { int c; int m; int y; int k; } struct pt_color square[8][8]; int i, j; for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { square[i][j].c = 0; square[i][j].m = 0; square[i][j].y = 1; square[i][j].k = 0; } }

struct pt_color { int c; int m; int y; int k; } struct pt_color quare[8][8]; int i, j; for (i = 0; i < 8; i++) { for (j = 0; j < 8; j++) { square [j] [i].c = 0; square [j] [i].m = 0; square [j] [i].y = 1; square [j] [i].k = 0; } }

struct pt_color { int c; int m; int y; int k; } struct pt_color square[8][8]; int i, j; for (i = 0; i < 8; i++) for (j = 0; j < 8; j++) square[i][j].y = 1; for (i = 0; i < 8; i++) for (j = 0; j < 8; j++) { square[i][j].c = 0; square[i][j].m = 0; square[i][j].k = 0; }

程序段A 程序段B 程序段C 程序段 程序段 程序段 假设cache的数据区大小为 的数据区大小为512B,采用直接映射,块大小为 假设 的数据区大小为 ,采用直接映射,块大小为32B,存储器按字节编址,sizeof(int)=4。 ,存储器按字节编址, 。 编译时变量i和 分配在寄存器中 数组 分配在寄存器中, 数组square按行优先方式存放在 按行优先方式存放在 开始的连续区域中, 编译时变量 和j分配在寄存器中, 按行优先方式存放在000008C0H开始的连续区域中, 开始的连续区域中 主存 地址为32位 要求: 地址为 位。要求: 中数组访问的时间局部性和空间局部性进行分析比较。 (1)对三个程序段 、B、C中数组访问的时间局部性和空间局部性进行分析比较。 ) 三个程序段A、 、 中数组访问的时间局部性和空间局部性进行分析比较 中行的对应关系图。 (2)画出主存中的数组元素和 )画出主存中的数组元素和cache中行的对应关系图。 中行的对应关系图 三个程序段A、 、 中 写操作次数、写不命中次数和写缺失率。 和写缺失率 (3)计算三个程序段 、B、C中的写操作次数、写不命中次数和写缺失率。 )计算三个程序段 参考答案: 参考答案: (1) 对于时间局部性来说: ) 对于时间局部性来说: 都是每个数组元素只被访问一次,所以都没有时间局部性; 程序段 A、B 和 C 中,都是每个数组元素只被访问一次,所以都没有时间局部性; 、 对于空间局部性来说: 对于空间局部性来说: 访问顺序和存放顺序一致,所以,空间局部性好; 程序段 A 访问顺序和存放顺序一致,所以,空间局部性好; 访问顺序和存放顺序不一致,所以,空间局部性不好; 程序段 B 访问顺序和存放顺序不一致,所以,空间局部性不好; 虽然访问顺序和存放顺序一致,但同一个主存块有两次访问,所以空间局部性不好; 程序段 C 虽然访问顺序和存放顺序一致,但同一个主存块有两次访问,所以空间局部性不好; (2)cache 的行数为 512B/32B=16;数组首地址为 0000 0C80H,因为 0000 0C80H 正好是主存第 ) ; , 1100100B 100) 块的起始地址。 块开始存放, ( ) 块的起始地址。 所以数组从主存第 100 块开始存放, 一个数组元素占 4×4B=16B, , 个数组元素占用一个主存块 组元素占用一个主存块。 个主存块, 所以每 2 个数组元素占用一个主存块。8×8 的数组共占用 32 个主存块,正好是 cache 数据区大 小的 2 倍。 行的映射关系图如下: 主存中的数组元素与 cache 行的映射关系图如下:

Cache 行号 0# 1# 2# 3# 4# 5# Square[3][4]/ [3][5] 15# Square[3][6]/ [3][7] Square[4][0]/ [4][1] Square[0][0]/ [0][1] Square[0][2]/ [0][3] Square[0][4]/ [0][5] Square[0][6]/ [0][7] Square[1][0]/ [1][1]

主存块号 100# 101# 102# 103#

114# 115# 116#

Square[7][0]/ [7][1] Square[7][2]/ [7][3] Square[7][4]/ [7][5] Square[7][6]/ [7][7]

128# 129# 130# 131#

(3)对于程序段 A: ) : 每两个数组元素( 次写操作) 行中,总是第一次访问时未命中, 每两个数组元素(共涉及 8 次写操作)装入到一个 cache 行中,总是第一次访问时未命中,后 次都命中,所以,总的写操作次数为 面 7 次都命中,所以,总的写操作次数为 64 × 4 = 256 次,写不命中次数为 256×1/8 = 32 次,因 而写缺失率为 12.5%。 。 对于程序段 B: : 每两个数组元素( 次写操作) 行中,但总是只有一个数组元素( 每两个数组元素(共涉及 8 次写操作)装入到一个 cache 行中,但总是只有一个数组元素(涉 次写操作)在被淘汰之前被访问,并且总是第一次不命中, 次命中。 及 4 次写操作)在被淘汰之前被访问,并且总是第一次不命中,后面 3 次命中。即写不命中次 因而写 数为 256×1/4 = 64 次,因而写缺失率为 25%。 。 对于程序段 C: : 次访问,每次装入两个数组元素,第一次不命中,第二次命中;第二个循环, 第一个循环共 64 次访问,每次装入两个数组元素,第一次不命中,第二次命中;第二个循环, 每两个数组元素( 次写操作) 行中, 共访问 64×3 次,每两个数组元素(共涉及 6 次写操作)装入到一个 cache 行中,并且总是第一 次不命中, 次命中。所以总的写不命中次数为 次不命中,后面 5 次命中。所以总的写不命中次数为 32+(3×64)×1/6 = 64 次,因而总缺失率为 25%。 。 17. 假设某计算机的主存地址空间大小为 假设某计算机的主存地址空间大小为64MB,采用字节编址方式。其cache数据区容量为 数据区容量为4KB,采用 某计算机 地址空间大小为 ,采用字节编址方式。 数据区容量为 ,采用4 路组相联映射方式、 映射方式 替换和 路组相联映射方式、LRU替换和回写(write back)策略,块大小为 替换 )策略,块大小为64B。请问: 。请问: 字段如何划分? (1)主存地址字段如何划分?要求说明每个字段的含义、位数和在主存地址中的位置。 )主存地址字段如何划分 要求说明每个字段的含义、位数和在主存地址中的位置。 的总容量有多少位? (2)该cache的总容量有多少位? ) 的总容量有多少位 初始为空, 依次从0号地址单元顺序访问到 号单元, (3)若cache初始为空,CPU依次从 号地址单元顺序访问到 ) 初始为空 依次从 号地址单元顺序访问到4344号单元,重复按此序列共访问 次。 号单元 重复按此序列共访问16次 命中时间为 个时钟周期, 损失为 个时钟周期 个时钟周期, 访存的平均时间为多少时 若cache命中时间为 个时钟周期,缺失损失为10个时钟周期,则CPU访存的平均时间为多少时 命中时间为1个时钟周期 缺失损失 访存的平均时间 钟周期? 钟周期? 参考答案: 参考答案: 的划分为 字节/行 所以, 组号(组索引) (1)cache 的划分为:4KB = 212B = 24 组×22 行/组×26 字节 行,所以,cache 组号(组索引)占 4 位。 ) 组 主存地址划分为三个字段: 位为标志字段 字段、 位为组号、 位为块内地址。 主存地址划分为三个字段:高 16 位为标志字段、中间 4 位为组号、最低 6 位为块内地址。 26 16 4 6 即主存空间划分为 组群×2 块/组群 组群×2 字节 块 字节/块 即主存空间划分为:64MB = 2 B = 2 组群 组群 位标志、 位有效位、 位修改(dirty)位、2 位 LRU 位,以及数 以及数 (2)cache 共有 64 行,每行中有 16 位标志、1 位有效位、1 位修改 ) 位

据 64B。故总容量为 64×(16+1+1+2+64×8)=34048 位。 。 个单元, (3)因为每块为 64B,CPU 访问的单元范围为 0~4344,共 4345 个单元,4345/64=67.89,所以 CPU ) , ~ , , 访问的是主存前 访问的是主存前 68 块(第 0~67 块) 也即 CPU 的访问过程是对前 68 块连续访问 16 次,总访 ~ , 存次数为 存次数为 16×4345 = 69520。 。

16次 0 0# 1 63 64 1# 65 128 2# 4288 67# 4344 4352 68#

cache 共有 16 组,每组 4 行,采用 LRU 算法的替换情况如下图所示: 算法的替换情况如下图所示:

根据图中所示可知,第一次循环的每一块只有第一次未命中,其余都命中; 次循环中 根据图中所示可知,第一次循环的每一块只有第一次未命中,其余都命中;以后 15 次循环中, 块的第一字未命中,其余都命中。 有 20 块的第一字未命中,其余都命中。所以命中率 p 为(69520–68–15×20)/69520 = 99.47% 平均访存时间为: 平均访存时间为:Hit Time + (1–p) × Miss Penalty =1+10×(1–p) = 1+0.0053×10 = 1.053 个时钟周期 18. 假定某处理器可通过软件对高速缓存设置不同的写策略,那么,在下列两种情况下,应分别设置成什 假定某处理器可通过软件对高速缓存设置不同的写策略,那么,在下列两种情况下, 么写策略?为什么? 么写策略?为什么? (1)处理器主要运行包含大量存储器写操作的数据访问密集型应用。 )处理器主要运行包含大量存储器写操作的数据访问密集型应用。 程序的 (2)处理器运行程序的性质与(1)相同,但安全性要求高,不允许有任何数据不一致的情况发生。 )处理器运行程序 性质与( )相同,但安全性要求高,不允许有任何数据不一致的情况发生。 参考答案: 参考答案: 策略较好,可减少访存次数。 (1)采用 write back 策略较好,可减少访存次数。 ) 策略较好,能保证数据的一致性。 (2)采用 write through 策略较好,能保证数据的一致性。 ) 19. 已知 已知cache1采用直接映射方式,共16行,块大小为 个字,缺失损失为 个时钟周期;cache2也采用直 采用直接映射方式, 损失为8个时钟周期 周期; 采用直接映射方式 行 块大小为1个 也采用直 接映射方式 方式, 行 块大小为4个 损失为11个时钟周期 假定开始时cache为空,采用字编址 周期。 为空, 接映射方式,共4行,块大小为 个字,缺失损失为 个时钟周期。假定开始时 为空 方式。要求找出一个访问地址序列,使得cache2具有更低的缺失率,但总的缺失损失反而比cache1大。 具有更低的缺 反而比 方式。要求找出一个访问地址序列,使得 具有更低的 失率,但总的缺 损失反而 大 参考答案: 参考答案: 必须满足以下条件: 假设 cache1 和 cache2 的缺失次数分别为 x 和 y,根据题意,x 和 y 必须满足以下条件: ,根据题意, 11×y > 8×x 且 x > y,显然,满足该条件的 x 和 y 有许多,例如,x=4,y=3、x=5,y=4 等等。 有许多,例如, 等等。 ,显然,满足该条件的 , 、 , 对于以下的访问地址序列: , , , , 地址序列 对于以下的访问地址序列:0,1,4,8,cache1 缺失 4 次,而 cache2 缺失 3 次; 对于以下的访问地址序列: , , , , , 地址序列 对于以下的访问地址序列:0,2,4,8,12,cache1 缺失 5 次,而 cache2 缺失 4 次;

对于以下的访问地址序列: , , , , , , , 对于以下的访问地址序列:0,3,4,8,12,16,20,cache1 缺失 7 次,而 cache2 缺失 6 次; 地址序列 如此等等,可以找出很多。 如此等等,可以找出很多。 20. 提高关联度通常会降低缺失率,但并不总是这样。请给出一个地址访问序列,使得采用LRU替换算法 提高关联度通常会降低缺 降低 但并不总是这样。请给出一个地址访问序列,使得采用 这样 替换算法 路组相联映射cache比具有同样大小的直接映射 比具有同样大小的直接映射 率更高。 的2-路组相联映射 路组相联映射 比具有同样大小的直接映射cache的缺失率更高。 的 参考答案: 参考答案: 2-路组相联 cache 的组数是直接映射 cache 的行数的一半,所以,可以找到一个地址序列 A、B、C, 数的一半,所以, 路 、 、 , 使得: 映射到某一 某一个 使得:A 映射到某一个 cache 行,B 和 C 同时映射到另一个 cache 行,并且 A、B、C 映射到同一个 、 、 cache 组。这样,如果访存的地址序列为 A、B、C、A、B、C、A、B、C …,则对于直接映射 cache, 这样, 、 、 、 、 、 、 、 、 , , 其命中情况为: 其命中情况为:miss/miss/miss /hit/miss/miss /hit/miss/miss/… 命中率可达 33.3%。 。 替换算法,所以, 对于组相联 cache,因为 A、B、C 映射到同一个组,每组只有 2 行,采用 LRU 替换算法,所以,每 , 、 、 映射到同一个组, 就又被访问到, 个地址处的数据刚调出 cache 就又被访问到,每次都是 miss,命中率为 0。 , 。 例如: 例如:假定直接映射 cache 为 4 行×1 字/行,同样大小的 2-路组相联 cache 为 2 组×2 行/组×1 字/行 行 路 组 行 当访问序列为: 、 、 、 、 、 、 、 、 、 ( 则出现上述情况。 当访问序列为:0、2、4、0、2、4、0、2、4、 …(局部块大小为 3)时,则出现上述情况。 ) 当访问的局部块大于组的大小时,可能会发生“颠簸 现象:刚被替换出去的数据又被访问,导致缺 颠簸”现象 当访问的局部块大于组的大小时,可能会发生 颠簸 现象:刚被替换出去的数据又被访问,导致缺失 率为 100%! ! 21. 假定有三个处理器,分别带有以下不同的cache: 假定有三个处理器,分别带有以下不同的 : cache1:采用直接映射方式,块大小为 个字,指令和数据的缺失率分别为 和6%; 方式, 指令和数据的缺失率分别为4%和 ; :采用直接映射方式 块大小为1个 cache2:采用直接映射方式,块大小为 个字,指令和数据的缺失率分别为 和4%; 方式, 指令和数据的缺失率分别为2%和 ; :采用直接映射方式 块大小为4个 cache3:采用 路组相联映射方式,块大小为 个字,指令和数据的缺失率分别为 和3%。 路组相联映射方式 指令和数据的缺失率分别为2%和 。 :采用2-路组相联映射方式,块大小为4个 在这些处理器上运行相同的程序,该程序的CPI为2.0,其中有一半是访存指令。若缺失损失为(块大 损失为( 在这些处理器上运行相同的程序,该程序的 为 ,其中有一半是访存指令。 的时钟周期都为420ps,带有 的处理器3的时钟周期为 小 +6)个时钟周期, 处理器 和 处理器 的时钟周期都为 ) 个时钟周期,处理器1和处理器2的时钟周期都为 , 带有cache3的处理器 的时钟周期为 的处理器 450ps。请问:哪个处理器因cache缺失而引起的额外开销最大?哪个处理器执行速度最快? 缺失而 的额外开销最大 。请问:哪个处理器因 缺失 引起的额外开销最大?哪个处理器执行速度最快? 参考答案: 参考答案: 所运行的程序共执行 共执行N条指令,每条访存指令仅读写一次内存数据, 在该程序执行过程中各处 假设所运行的程序共执行 条指令,每条访存指令仅读写一次内存数据,则在该程序执行过程中各处 理器因 缺失而 的额外开销和 时间计算如下 理器因cache缺失而引起的额外开销和执行时间计算如下。 缺失 引起的额外开销 执行时间计算如下。 对于处理器 1: : 额外开销为 额外开销为:N×(4% + 6%×50%)×(1+6) = 0.49 N 个时钟周期 执行程序所需时间为 程序所需时间为: 执行程序所需时间为:(N×2.0 +0.49N)×420ps = 1045.8N ps 对于处理器 2: : 额外开销为 额外开销为:N×(2%+4%×50%)×(4+6) = 0.40N 个时钟周期 执行程序所需时间为 程序所需时间为: 执行程序所需时间为:(N×2.0+0.40N)×420ps=1008N ps 对于处理器 3: : 额外开销为 额外开销为:N×(2%+3%×50%)×(4+6) = 0.35N 个时钟周期 执行程序所需时间为 程序所需时间为: 执行程序所需时间为:(N×2.0+0.35N)×450ps=1057.5N ps 由此可见, 缺失引起的额外开销最大, 引起的额外开销最大 执行速度最快。 速度最快 由此可见,处理器 1 的 cache 缺失引起的额外开销最大,处理器 2 的执行速度最快。 22. 假定某处理器带有一个数据区容量为 假定某处理器带有一个数据区容量为256B的cache,其块大小为 语言程序段运行在该处理 带有一个数据区容量为 的 ,其块大小为32B。以下 语言程序段运行在该处理 。以下C语言程序段运行 器上, 都分配在通用寄存器中, 器上,sizeof(int) = 4,编译器将变量 j, c, s都分配在通用寄存器中,因此,只要考虑数组元素的访存 ,编译器将变量i, 都分配在通用寄存器中 因此, 情况。 采用直接映射方式, 失率分别为多少? 采用2-路组相联映 情况。若cache采用直接映射方式,则当 采用直接映射方式 则当s=64和s=63时,缺失率分别为多少?若cache采用 路组相联映 和 时 采用 射方式,则当s=64和s=63时,缺失率又分别为多少? 失率又分别为多少? 射方式,则当 和 时 int i, j, c, s, a[128]; ……

for ( i = 0; i < 10000; i++ ) for ( j = 0; j < 128; j=j+s ) c = a[j]; 参考答案: 参考答案: 已知块大小为 已知块大小为 32B,cache 容量为 256B = 8 行×8 字/行× 4B/字,仅考虑数组访问情况。 , 行 字 仅考虑数组访问情况。 直接映射, 这两个元素被 直接映射,s=64: 访存顺序为 a[0]、a[64] , a[0]、a[64], … … , 共循环 10000 次。这两个元素被映 、 、 每次都会发生冲突,因此缺 射到同一个 cache 行中,每次都会发生冲突,因此缺失率为 100%。 。 直接映射, 直接映射,s=63: 访存顺序为 a[0]、a[63]、a[126], a[0]、a[63]、a[126], … …共循环 10000 次。这 、 、 、 、 共循环 三个元素中后面两个元素因为 因为映射到同一个 因此每次都 发生冲突, 每次都会 三个元素中后面两个元素因为映射到同一个 cache 行中, 因此每次都会发生冲突, a[0]不会发生 而 不会发生 冲突, 冲突,故缺失率为 67%。 。 2-路组相联,s=64: 访存顺序为 a[0]、a[64] , a[0]、a[64], … …, 共循环 10000 次。这两个元素虽 路组相联, 、 、 组中,但可以放在该组 该组不同 所以不会发生冲突, 然映射到同一个 cache 组中,但可以放在该组不同 cache 行中,所以不会发生冲突,缺失率为 0。 。 2-路组相联,s=63: 访存顺序为 a[0]、a[63]、a[126], a[0]、a[63]、a[126], … …共循环 10000 次。 路组相联, 、 、 、 、 共循环 组中, 这三个元素中后面两个元素虽映射到同一个 cache 组中,但可放在不同 cache 行中, 而 a[0]不会发 不会发 生冲突, 生冲突,故缺失率为 0。 。

1) 2)

3) 4)

23. 假定一个虚拟存储系统的虚拟地址为 位,物理地址为36位,页大小为 假定一个虚拟存储系统的虚拟地址为40位 物理地址为 位 页大小为16KB,按字节编址。若页表中 ,按字节编址。 有效位、存储保护位、修改位 使用位,共占4位 磁盘地址不在页表中, 有有效位、存储保护位、修改位、使用位,共占 位,磁盘地址不在页表中,则该存储系统中每个进程 的页表大小为多少?如果按计算出来的实际大小构建页表,则会出现什么问题? 的页表大小为多少?如果按计算出来的实际大小构建页表,则会出现什么问题? 参考答案: 参考答案: 因为每页大小有 因为每页大小有 16KB,所以虚拟页数为 240B/16KB=2(40-14)=226 页。 ,所以虚拟页数为 物理页面和虚拟页面大小相等, 物理页面和虚拟页面大小相等,所以物理页号的位数为 36–14=22 位。 页表项位数为:有效位+保护位 修改位 使用位 物理页号位数=4+22=26 位。 保护位+修改 使用位+物理页号位数 页表项位数为:有效位 保护位 修改位+使用位 物理页号位数 为简化页表访问, 因此,每个进程的页表大小为: 为简化页表访问,每项大小取 32 位。因此,每个进程的页表大小为:226×32b=256MB。 。 如果按实际计算出的页表大小构建页表,则页表过大而导致页表无法一次装入内存。 页表无法一次装入内存 如果按实际计算出的页表大小构建页表,则页表过大而导致页表无法一次装入内存。 24. 假定一个计算机系统中有一个TLB和一个 data cache。该系统按字节编址,虚拟地址 位,物理地 假定一个计算机系统中有一个 和一个L1 一个计算机系统中有一个 和一个 。该系统按字节编址,虚拟地址16位 为四路组相联, 个页表项; 采用直接映射方式, 址12位;页大小为 位 页大小为128B,TLB为四路组相联,共有 个页表项;L1 data cache采用直接映射方式,块 , 为四路组相联 共有16个页表项 采用直接映射方式 大小为4B, 中的部分内容( 大小为 ,共16行。在系统运行到某一时刻时,TLB、页表和 data cache中的部分内容(用十六进 行 在系统运行到某一时刻时, 、页表和L1 中的部分内容 制表示)如下: 制表示)如下:
组号 标记 0 1 2 3 03 03 02 07 页框号 有效位 – 2D – – 0 1 0 0 标记 09 02 08 63 页框号 有效位 0D – – 0D 1 0 0 1 标记 00 04 06 0A 页框号 有效位 – – – 34 0 0 0 1 标记 07 0A 03 72 页框号 有效位 02 – – – 1 0 0 0

(a) TLB(四路组相联) 四组、16 个页表项 (四路组相联) 四组、 :四组 : 虚页号 00 01 02 03 04 页框号 08 03 14 02 – 有效位 1 1 1 1 0 行索引 0 1 2 3 4 标记 19 15 1B 36 32 有效位 1 0 1 0 1 字节 3 12 – 03 – 23 字节 2 56 – 45 – 34 字节 1 C9 – 12 – C2 字节 0 AC – CD – 2A

05 06 07 08 09 0A 0B 0C 0D 0E 0F

16 – 07 13 17 09 – 19 – 11 0D

1 0 1 1 1 1 0 1 0 1 1

5 6 7 8 9 A B C D E F

0D – 16 24 2D 2D – 12 16 33 14

1 0 1 1 0 1 0 1 1 1 0

46 – 12 23 – 43 – 76 A3 2D –

67 – 54 62 – 62 – 83 F4 4A –

23 – 65 12 – 23 – 21 23 45 –

3D – DC 3A – C3 – 35 11 55 –

(b) 部分页表: 开始 16 项) 部分页表: 页表 (开始 (

(c) L1 data cache:直接映射,共 16 行,块大小为 4B :直接映射,

请回答下列问题: 请回答下列问题: 虚拟地址中哪几位表示虚拟页号? 几位表示页内偏移量 哪几位表示虚拟页号 偏移量? 标记? (1) ) 虚拟地址中哪几位表示虚拟页号?哪几位表示页内偏移量?虚拟页号中哪几位表示 TLB 标记? 索引? 哪几位表示 TLB 索引? 中哪几位表示物理页号? (2)物理地址中哪几位表示物理页号?哪几位表示页内偏移量? )物理地址中哪几位表示物理页号 哪几位表示页内偏移量? (3)主存(物理)地址如何划分成标记字段、行索引字段和块内地址字段? )主存(物理)地址如何划分成标记字段、行索引字段和块内地址字段? 中取出的值为多少? 中内容的过程。 (4)CPU 从地址 067AH 中取出的值为多少?说明 CPU 读取地址 067AH 中内容的过程。 ) 参考答案: 参考答案: 位为页内偏移量, 位为虚页号; 标记, (1)16 位虚拟地址中低 7 位为页内偏移量,高 9 位为虚页号;虚页号中高 7 位为 TLB 标记,低 2 ) 索引。 位为 TLB 组索引。 位为页内偏移量, 位为物理页号。 (2)12 位物理地址中低 7 位为页内偏移量,高 5 位为物理页号。 ) 位为块内地址 地址, 行索引, 位为标记 标记。 (3)12 位物理(主存)地址中,低 2 位为块内地址,中间 4 位为 cache 行索引,高 6 位为标记。 ) 位物理(主存)地址中, (4)地址 067AH=0000 0110 0111 1010B,所以,虚页号为 0000011 00B,映射到 TLB 的第 00 组,将 ) ,所以, , 0000011B=03H 与 TLB 第 0 组的四个标记比较,虽然和其中一个相等,但对应的有效位为 0, 组的四个标记比较,虽然和其中一个相等, 标记比较 , 其余都不等, 缺失,需要访问主存中的慢表 访问主存中的慢表。 其余都不等,所以 TLB 缺失,需要访问主存中的慢表。直接查看 0000011 00B =00CH 处的页表 拼接成物理地址: 11001 111 项, 有效位为 1, , 取出物理页号 19H=11001B, , 和页内偏移 111 1010B 拼接成物理地址: 1010B。根据中间 4 位 1110 直接找到 cache 第 14 行(即:第 E 行),有效位为 1,且标记为 。 即 , , 33H=110011B,正好等于物理地址高 6 位,故命中。根据物理地址最低两位 10,取出字节 2 中 故命中。根据物理地址最低两位 ,取出字节 , 的内容 4AH=01001010B。 。 25. 缓冲区溢出是指分配的某个内存区域(缓冲区)的大小比存放内容所需空间小。例如,在栈(stack)中 缓冲区溢出是指分配的某个内存区域(缓冲区)的大小比存放内容所需空间小。例如,在栈 指分配的某个内存区域 中 分配了一块空间用于存放某个过程 的一个字符串,结果字符串长度超过了分配空间的大小。 用于存放某个过程中 分配了一块空间用于存放某个过程中的一个字符串,结果字符串长度超过了分配空间的大小。黑客往 往会利用缓冲区溢出来植入入侵代码 入侵代码。 说明可以采用什么措施来防止缓冲区溢出漏洞。 措施来防止缓冲区溢出漏洞 往会利用缓冲区溢出来植入入侵代码。请说明可以采用什么措施来防止缓冲区溢出漏洞。


相关文章:
计算机第四章习题答案
计算机第四章习题答案_教育学_高等教育_教育专区。习题一、单项选择题 1.由 ...计算机网络第四章习题答... 12页 免费 计算机组织与系统结构第... 13页 1...
计算机系统结构_第四章练习 答案
计算机系统结构_第四章练习 答案_工学_高等教育_...在由多个通道组成的 I/O 系统中,I/O 系统的最...计算机系统结构习题答案 5页 免费 计算机系统结构...
计算机组成原理第四章答案
计算机组成原理第四章答案_教育学_高等教育_教育专区。第 4 章习题参考答案 第...无操作数三类指 令形式,指令系统共有 70 条指令,请设计满足要求的指令格式。 ...
计算机组织与系统结构第五章习题答案
第5 章习题答案 3. 假定某计算机中有一条转移指令,采用相对寻址方式,共占两个字节,第一字节是操作码, 第二字节是相对位移量(用补码表示),CPU 每次从内存只能...
计算机系统结构 第四章自考练习题答案
计算机系统结构 第四章自考练习题答案_计算机软件及应用_IT/计算机_专业资料。计算机...它是如何组织的?(P110) 5. 什么是虚拟存储器?它有什么特点和作用?(P88) ...
计算机组织与体系结构课后习题答案
计算机组成原理课后答案计算机组成原理课后答案隐藏>> 体系结构课后习题答案 126 页下面的 4.1 4.2 4.3 4.4 4.7 第二章 1,设 A,B,C 的内存地址分别是 A[i]...
计算机组织与系统结构第六章习题答案
习题1. 给出以下概念的解释说明。指令周期( Instruction Cycle) 同步系统( ...参考答案: ( 1) 该计算机的编址单位是字节。因为 PC 的增量是 2, 且每条...
计算机系统结构(第2版)郑伟明汤志忠课后习题答案以及例...
郑伟明 汤志忠 编著 清华大学出版社 习题解答 1 1 目录 1.1 第一章(P33) ...75% =2.00 1.1 解释下列术语 层次结构,计算机系统结构,计算机组成,计算机实现...
计算机组成课后答案
计算机组成课后答案_理学_高等教育_教育专区。第一章 计算机系统概论 1. 什么是...第四章 3. 存储器的层次结构主要体现在什么地方?为什么要分这些层次?计算机如何...
计算机组成原理课后答案第四章_庞海波
计算机组成原理课后答案第四章_庞海波_理学_高等教育_教育专区。计算机组成原理 第...Cache—主存层次在存储系统中主要对 CPU 访存起加速作用,即从整体运行的效果...
更多相关标签: