当前位置:启航官网 > 考研报考 > 试题

硬盘 Cache 是用于缓解内存和外存之间速度差的一种机制,Cache 硬件通常

硬盘 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小时答疑和模拟测试等,可直接咨询在线客服老师领取大额优惠券。

免责声明:本平台部分帖子来源于网络整理,不对事件的真实性负责,具体考研相关内容请以各院校的官网通知为准。 如果本站文章侵犯到您的权利,请联系我们(400-108-7500)进行删帖处理。
下一篇 最后一页

启航教育热门私房课

MORE
  • 26考研VIP领学计划

    全程跟进
    形式:线上+线下
     

    查看详情

    在线咨询

  • 26考研专属VIP班

    联报优惠
    形式:线上
     

    查看详情

    在线咨询

  • 26在职考研课程

    专为在职人定制
    形式:线上
     

    查看详情

    在线咨询

2026考研

小班面授 名额有限 抢先体验

点击预约 

为你推荐

    姓名

    手机号

    获取答案
    扫描上方二维码免费领取学习资料