题目描述硬盘Cache是用于缓解内存和外存之间速度差的一种机制,Cache硬件通常位于硬盘上,由一个专门的处理器来管理。处理器要读取的数据,如果保存在Cache中,则称为Cache命中,否则就称为Cache未命中,现在提供给你如下信息:有一个硬盘,Cache大小为16MBytes,以4KBytes为一簇,硬盘上的数据也以4KBytes为一个簇,硬盘和Cache中的数据每次读写都以1个簇为单位,写Cache的函数是write(intaddr,unsignedchar*buf);表示将buf内的数据写到地址为addr的Cache内,所以addr一定是4096的倍数;处理器读硬盘数据的指令表示为函数为voidread(unsignedintcid,unsignedchar*buf);其功能为读簇号为cid的簇,读取的数据存放在buf中;在这个函数中,需要考虑Cache命中;Cache中的数据有一定的淘汰机制,目前最多使用的是最久未访问淘汰机制,即Cache中的一个簇,如果未被使用的时间最长,在一次Cache未命中时,将其淘汰出Cache,而用未命中的数据来代替;所以read函数中,需要考虑Cache未命中。现在,本题需要你实现这个read函数,你需要回答如下问题:给出数据结构,能够用于管理Cache;结合(1),请你实现read函数,注意:如果未命中,真正从硬盘中读取数据,请直接使用函数readhd,声明如下:voidreadhd(unsignedintcid,unsignedchar*buf);该函数不需要你实现。提示:你可以先写出你的程序思路,然后根据这个思路来写你的程序:例如:如果读cache命中,那么…,否则…;如果cache满,那么…,否则…readhd和write的使用方式示例代码如下;voidread(unsignedintcid,unsignedchar*buf){…readhd(cid,buf);//读硬盘数据…write(addr,buf);//写入cache指定地址…}题目来源及自己的思路浙江理工2018考研,大家讲下思路就行了,实在想不出什么好的办法,只能用C语言。
弑天下
森栏
相关分类