xv6 - Xv6 缓冲区缓存锁定
问题描述
我正在研究 xv6缓冲区缓存实验室。
任务是减少缓冲区高速缓存锁的争用。建议的想法是有一个哈希表,每个桶都有单独的锁。提示之一是时间戳缓冲区:
删除所有缓冲区的列表(bcache.head 等),取而代之的是使用上次使用时间的时间戳缓冲区(即,使用 kernel/trap.c 中的滴答声)。通过此更改,brelse 不需要获取 bcache 锁,bget 可以根据时间戳选择最近最少使用的块。
我很难理解为什么我们需要在新设计中使用 LRU。在最初的实现中,它有助于避免扫描所有缓冲区以寻找空闲缓冲区。在建议的实现中,似乎
bget
可以选择任何空闲缓冲区:它无论如何都会清除所选缓冲区并将其标记为无效,因此我找不到发布时间戳的用途。
解决方案
推荐阅读
- python - Swagger 自动生成的模式模型(FastAPI、Pydantic)
- testing - PHPUnit 9.5+ 随机断言计数?
- c# - 如何在页面对象模型类上创建层次结构?
- pyspark - 在 PySpark 中插值纬度/经度列以获得轨迹中等距的点
- node.js - 本地主机不会打开(Node.js 服务器)
- java - 单义性 csv 解析器 setTypeOfColumns 不起作用
- laravel - 未捕获的类型错误:无法读取未定义的属性“changedTouches”
- android - Firebase blaze 计划已升级但未反映在控制台中
- c++ - 使用 Cmake 和 Ctest 构建 Qt-test
- apache-spark - LocalNodeFirstLoadBalancingPolicy 也添加了来自数据中心的节点,而不是 local_dc