2018年东北电力大学信息工程学院852数据结构考研强化五套模拟题
● 摘要
一、综合题
1. 假定在一个8位字长的计算机中运行下列C 程序段:
若编译器编译时将8个8位寄存器R1〜R8分别分配给变量x 、y 、m 、n 、z1、Z2、k1和k2。请回答下列问题。(提示:带符号整数用补码表示)
(1)执行上述程序段后, 寄存器R1、R5和R6的内容分别是什么?(用十六进制表示)
(2)执行上述程序段后, 变量m 和k1的值分别是多少?(用十进制表示)
(3)上述程序段涉及带符号整数加/减、无符号整数加/减运算, 这四种运算能否利用同一个加法器及辅助电路实现? 简述理由。
(4)计算机内部如何判断带符号整数加/减运算的结果是否发生溢出? 上述程序段中, 哪些带符号整数运算语句的执行结果会发生溢出?
【答案】(1)无符号整数运算,
(R1)=x=134=10000110B=86H、(R5)=x-y=246=10010000B=90H、(R6)=x+y=01111100B=7CH。
(2)m的机器数与x 的机器数相同为86H=10000110B, 解释为带符号整数(用补码表示) 时, 其值为-1111010B=-112;
同理kl=(m-n)=(x-y)=90H=10010000B, 解释为带符号整数(用补码表示) 时, 其值为-1111010B=-112;
(3)四种运算可以利用同一个加法器及辅助电路实现, n
位加法器实现的是模
法运算。对于无符号整数a 和b , a+b可以直接用加法器实现, 而
符号整数用补码表示, 补码加减运算公式为:
,
所以四种运算都可在n 位加法器中实现。
(4)判断溢出的方法有3种:一位符号位、进位位和双符号位。上述程序段中只有
负数。
无符号整数加实现; 对于带语句会发生溢出, 因为2个带符号整数均为负数, 它们相加之后, 结果小于8位二进制所能表示的最小
2. 某文件系统为一级目录结构, 文件的数据一次性写入磁盘, 已写入的文件不可修改, 但可多次创建新文件。请回答如下问题。
(1)在连续、链式、索引三种文件的数据块组织方式中, 哪种更合适? 要求说明理由。为定位文件数据块。需要在FCB 中设计哪些相关描述字段?
(2)为快速找到文件, 对于FCB , 是集中存储好, 还是与对应的文件数据块连续存储好? 要求说明理由。
【答案】根据题目所给条件, 文件系统为一级目录结构, 文件的数据一次性写入磁盘, 已写入的文件不可修改, 但是可以多次创建新文件, 我们得知该文件系统是不能修改原文件的, 只能将修改后的文件按新文件来存储, 这与一次刻录光盘的存储方式相似。对于这样的系统, 因为不需要随时添加或删除文件的内容, 所以一次写入的文件的大小是固定不变的, 也是可预知的, 而连续存放文件的方式就有其优点。这种方式只需要知道文件的起始地址和文件的大小, 便可以通过计算的方法找到文件的任何位置。文件若需要修改, 则原文件作废, 修改以后的文件以新文件的形式重新写入, 不会产生存储碎片, 高效, 高利用率。所以, 如下作答。
(1)连续的数据块组织方式更合适, 因为文件的数据一次性写入磁盘, 已写入的文件不可修改, 但是可以多次创建新文件, 我们得知该文件系统是不能修改原文件的, 只能将修改后的文件按新文件来存储。不需要随时添加或删除文件的内容, 所以一次写入的文件的大小是固定不变的, 也是可预知的。这样, 只需要知道文件的起始地址和文件的大小, 便可以通过计算的方法访问文件的任意位置。
为定位文件数据块。需要在FCB 中设计相关描述字段有:
<起始块号, 块数>或者<起始块号, 结束块号>。
(2)将所有的FCB 集中存放, 文件数据集中存放。这样在随机查找文件名时, 只需访问FCB 对应的块, 可减少磁头移动和磁盘
3. 对一个有访问次数。 t 个非零元素的矩阵,用的数组来表示,其中第0行的三个元素分别为m ,n ,t ,从第一行开始到最后一行,每行表示一个非零元素;第一列为矩阵元素的行号,第二列为其列号,第三列为其值。对这样的表示法,如果需要经常进行该操作-确定任意一个元素A[i][j]在B 中的位置并修改其值,应如何设计算法可以使时间得到改善?
【答案】题中矩阵非零元素用三元组表存储,查找某非零元素时,按常规要从第一个元素开始查找,属于顺序查找,时间复杂度为0(n)。若使查找时间得到改善,可以建立索引,将各行行号及各行第一个非零元素在数组B 中的位置(下标) 放入一向量C 中。若查找非零元素,可先在数
组C 中用折半查找到该非零元素的行号,并取出该行第一个非零元素在B 中的位置,再到B 中顺序(或折半) 查找该元素,这时时间复杂度为0(logn)。
4. 某计算机存储器按字节编址, 虚拟(逻辑) 地址空间大小为16MB , 主存(物理) 地址空间大小为1MB , 页面大小为4KB ; Cache 采用直接映射方式, 共8行; 主存与Cache 之间交换的块大小为32B 。系统运行到某一时刻时, 页表的部分内容和Cache 的部分内容分别如图a 、图b 所示, 图中页框号及标记字段的内容为十六进制形式。
图a 页表的部分内容
图b Cache的部分内容
请回答下列问题。
(1)虚拟地址共有几位, 哪几位表示虚页号? 物理地址共有几位, 哪几位表示页框号(物理页号) ?
(2)使用物理地址访问Cache 时, 物理地址应划分哪几个字段? 要求说明每个字段的位数及在物理地址中的位置。
(3)虚拟地址001C60H 所在的页面是否在主存中? 若在主存中, 则该虚拟地址对应的物理地址是什么? 访问该地址时是否Cache 命中? 要求说明理由。
(4)假定为该机配置一个4路组相联的TLB , 该TLB 共可存放8个页表项, 若其当前内容(十六进制) 如图c 所示, 则此时虚拟地址024BACH 所在的页面是否在主存中? 要求说明理由。
图c TLB的部分内容
【答案】(1)由于页面大小为4KB , 页内地址需要12位, 所以虚拟地址24位, 其中虚页号占12位; 物理地址20位, 其中页框号(实页号) 占8位。
(2)主存物理地址20位, 从左至右应划分3个字段:标记字段、块号字段、块内地址字段。其中