首页 > 解决方案 > Xv6 缓冲区缓存锁定

问题描述

我正在研究 xv6缓冲区缓存实验室

任务是减少缓冲区高速缓存锁的争用。建议的想法是有一个哈希表,每个桶都有单独的锁。提示之一是时间戳缓冲区:

删除所有缓冲区的列表(bcache.head 等),取而代之的是使用上次使用时间的时间戳缓冲区(即,使用 kernel/trap.c 中的滴答声)。通过此更改,brelse 不需要获取 bcache 锁,bget 可以根据时间戳选择最近最少使用的块。

我很难理解为什么我们需要在新设计中使用 LRU。在最初的实现中,它有助于避免扫描所有缓冲区以寻找空闲缓冲区。在建议的实现中,似乎 bget可以选择任何空闲缓冲区:它无论如何都会清除所选缓冲区并将其标记为无效,因此我找不到发布时间戳的用途。

标签: xv6

解决方案


推荐阅读