硬盘 Cache 是用于缓解内存和外存之间速度差的一种机制,Cache 硬件通常位于硬盘上,由一个专门的处理器来管理。处理器要读取的数据,如果保存在 Cache 中,则称为 Cache 命中,否则就称为 Cache 未命中,现在提供给你如下信息:
有一个硬盘,Cache 大小为 16M Bytes,以 4K Bytes 为一簇,硬盘上的数据也以 4K Bytes 为一个簇,硬盘和Cache 中的数据每次读写都以 1 个簇为单位,写 Cache 的函数是write(int addr, unsigned char *buf);
表示将 buf 内的数据写到地址为 addr 的 Cache 内,所以 addr 一定是 4096 的倍数;
处理器读硬盘数据的指令表示为函数为
void read(unsigned int cid, unsigned char * buf);
其功能为读簇号为cid 的簇,读取的数据存放在 buf 中;在这个函数中,需要考虑 Cache 命中;
Cache 中的数据有一定的淘汰机制,目前最多使用的是最久未访问淘汰机制,即 Cache 中的一个簇,如果未被使用的时间最长,在一次 Cache 未命中时,将其淘汰出 Cache,而用未命中的数据来代替;所以 read 函数中,需要考虑 Cache 未命中。
现在,本题需要你实现这个 read 函数,你需要回答如下问题:
(1)给出数据结构,能够用于管理 Cache;(5 分)
(2)结合(1),请你实现 read 函数,注意:如果未命中,真正从硬盘中读取数据,请直接使用函数 readhd,声明如下:
void readhd(unsigned int cid, unsigned char * buf);
该函数不需要你实现。(25 分) 提示:
你可以先写出你的程序思路,然后根据这个思路来写你的程序:
例如:如果读cache 命中,那么…,否则…;如果 cache 满,那么…,否则…
readhd 和 write 的使用方式示例代码如下;
void read(unsigned int cid, unsigned char * buf)
{
…
readhd(cid,buf); // 读硬盘数据
…
write(addr,buf); // 写入 cache 指定地址
…
}
查看答案和解析【26考研辅导课程推荐】:26考研集训课程,VIP领学计划,26考研VIP全科定制套餐(公共课VIP+专业课1对1) , 这些课程中都会配有内部讲义以及辅导书和资料,同时会有教研教辅双师模式对大家进行教学以及督学,并配有24小时答疑和模拟测试等,可直接咨询在线客服老师领取大额优惠券。
启航教育热门私房课
MORE小班面授 名额有限 抢先体验
编辑推荐
最新内容
姓名
手机号