Cache and TLB Flushing Under Linux
的最後一部份,一样文件!
最後一类 API 是用於 I/O 子系统在核心内特意设置的别名位址范围。
这种别名是通过使用 vmap/vmalloc API 设置的。
由於核心 I/O 是通过实体分页进行的,
I/O 子系统假定使用者映射和核心偏移映射是唯一的别名。
这对 vmap 别名来说是不正确的,
所以核心中任何对 vmap 区域进行 I/O 的尝试,都必须手动管理快取一致性。
它必须在做 I/O 之前更新 vmap 范围,并在 I/O 返回後使该区段无效。
``void flush_kernel_vmap_range(void *vaddr, int size)``
更新 vmap 区域中指定虚拟位址范围的核心快取。
这是为了确保核心在 vmap 范围内修改的任何资料对实体分页是可见的。
这个设计是为了使这个区域可以安全地执行 I/O。
注意,这个 API 并 *没有* 更新该区域的偏移映射别名。
``void invalidate_kernel_vmap_range(void *vaddr, int size)``
使 vmap 区域内一个给定的虚拟地址范围的快取无效,
这可以防止处理器在实体分页的 I/O 处理时,
通过猜测性地读取资料而使快取变脏。
这只在读取 vmap 区域的资料是必要的。
speculatively reading data
(猜测性的读取):例如 prefetch这份文件主要是在描述,在 kernel 中,TLB 和 cache flushing 的相关 API 以及使用这些 API 的时机,文件分为四个部分:
翻译完成了!虽然绝大部分都还算是雾里看花,朦朦胧胧的,不过明天开始会就这几天所积累的疑问,试图给出一些可能的解答!
感谢各位,我们明天见!
<<: Day 21 - 嵌入 AlexeyAB/darknet 的 Python
>>: DAY6:Kaggle-San Francisco Crime Classification(上)
今天就废话不多说把注册页写完吧! 注册页 一样先来构思画面,由上而下AppBar,标题,描述文字,e...
虽然与网页互动的过程会花费更多的时间,但它却是吸引人很重要的一项因素,因此在设计部落格版面的时候,有...
为什麽必须知道怎麽使用阵列方法呢?举例来说,我们拿到一笔资料长这个样子: let data = [5...
关於地板 地板的部分,也关系到了墙壁以及布线难易度,往往很多公司在装潢完成之後,才发现东缺西缺,到之...
出牌 出牌跟之前的游戏准备按钮一样 帮一个元件加上 phx-clixk 再绑上对应的动作, 唯一的差...