2017年西安电子科技大学9104高级语言程序设计之数据结构(C语言版)复试实战预测五套卷
● 摘要
一、应用题
1. 某计算机存储器按字节编址,虚拟(逻辑)地址空间大小为16MB , 主存(物理)地址空间大小为1MB , 页面大小为4KB ; Cache 采用直接映射方式,共8行;主存与Cache 之间交换的块大小为32B ,系 统运行到某一时刻时,页表的部分内容和Cache 的部分内容分别如题a 图、题b 所示:图中页框号及标记字段的内容为十六进制形式。
图
a
图b
请回答下列问题。
(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个字段:标记字段、块号字段、块内地址字段。其中标记12 位,块号3位,块内地址5位。
(3)虚拟地址001C60H=0000 0000 0001 1100 0110 0000B,该虚拟地址的虚页号为001H ,查
,表明此页在主存中,页框号为04H , 对应的20位页表可以发现,虚页号1对应的有效位为“1”
物理地址是04C60H = OOOOOlOOllOOOllOOOOOB。
访问该地址时,Cache 不命中,因为Cache 采用直接映射方式,对应的物理地址应该映射到Cache 的第3行 中,其有效位为1,标记值
不命中。
(4) 虚拟地址024BACH = 000000100100101110101100B ,虚页号为024H ,TLB 中存放8个页表项,采用4路组相联,即TLB 分为2组,每组4个页表项。12位虚页号字段中最低位作为组索引,其余11位为标记位。 现在最低位为0, 表明选择第0组,11位的标记为012H ,根据标记可以知道TLB 命中,所在的页面在主存中。 因为如果在TLB 中查到了页表项,即TLB 命中,说明所在页一定命中
2. 假设利用边界标识法,并以首次拟合策略分配,己知在某个时刻可利用空间表的状态如图所示(注:存储块头部域的值和申请分配的存储量均包括头部和尾部的存储空间)请画出:
,(物理地址高12位)故访问该地址时Cache
(1)当系统回收一个起始地址为559,大小为45的空闲块之后的链表状态;
(2)系统继而在接受存储块大小为100的请求后,又回收一个起始地址为515,大小为44的空闲块之后的链表状态。
【答案】(1)系统回收一个起始地址为559,大小为45的空闲块后,因右侧起始地址604为空闲块,应与之合并。合并后,成为起始地址为559,大小为167的空闲块。链表状态如图1所示:
图1
(2)系统在接受存储块大小为100的请求后,将大小为117的空闲块分出100给予用户。在
回收一个起始地址为515,大小为44的空闲块之后,因左侧起始地址为462、大小为53和右侧起始地址为559、大小为167均为空闲块,应与之合并。合并后,起始地址为462、大小为264的空闲块。链表状态如图2所示:
图2
3. 设内存中可利用空间已连成一个单链表,对用户的存储空间需求,一般有哪三种分配策略?
【答案】(1)首次适配法
从链表头指针开始查找,找到第一个大于等于所需空间的结点即分配。首次适配法适合事先不知道请求分配和释放信息的情况,分配时需查询,释放时插在表头。
(2)最佳适配法
链表结点大小增序排列,找到第一个大于等于所需空间的结点即分配。最佳适配法适用于请求分配内存大小范围较宽的系统,释放时容易产生存储量很小难以利用的内存碎片,同时保留那些很大的内存块以备将来可能发生的大内存量的需求,分配与回收均需查询。
(3)最差适配法
链表结点大小逆序排列,总从第一个结点开始分配,将分配后结点所剩空间插入到链表适当位置。最差适配法适合请求分配内存大小范围较窄的系统,分配时不查询,回收时查询,以便插入适当位置。
4. 队列可以用循环单链表来实现,故可以只设置一个头指针或者只设置一个尾指针。请你分析对于循环单链表实现的队列,用哪种方案更合适。
【答案】循环单链表若只设头指针,则出队操作时间复杂度是
是若只设尾指针,则出队和入队操作时间复杂度都是而如对操作时间复杂度
因此,用循环单链表来实现队列,设置一个尾指针更合适。
5. 证明若二叉排序树中的一个结点存在两个孩子,则它的中序后继结点没有左孩子,则它的中序前驱结点没有右孩子。
【答案】根据中序遍历的定义,该结点的中序后继是其右子树上按中序遍历的第一个结点:叶结点或仅有右子树的结点;而其中序前驱是其左子树上按中序遍历的最后个结点:叶结点或仅有左子树的结点。命题得证。
相关内容
相关标签