duguosheng/6.S081-All-in-one

关于“flush”翻译的讨论

Closed this issue · 3 comments

在xv6book的3.3节,“RISC-V有一个指令sfence.vma,用于刷新当前CPU的TLB”。
此处“刷新”在原文中为“flush”,是否译为清空或者类似的词更合理。
在改变进程的同时会切换页表,所以TLB中原有进程的数据应该被清空而非刷新。

参考 https://mit-public-courses-cn-translatio.gitbook.io/mit6-s081/lec04-page-tables-frans/4.4-ye-biao-huan-cun-translation-lookaside-buffer 中的译文“你们需要知道TLB存在的唯一原因是,如果你切换了page table,操作系统需要告诉处理器当前正在切换page table,处理器会清空TLB。”

如果我的理解有误,烦请指正。

我认为译为清空可能不太好,如果TLB中只是因为某个条目无效而进行flush,其他条目并不会改变,翻译为清空TLB就好像整个TLB都被更改。
你参考的那句话页表更改了,整个TLB都会无效,所以译为清空应该也可以。
flush本意是冲洗,文件系统中的flush函数用于清空缓冲区并将缓冲区的内容写入文件,从缓冲区角度看可能翻译为清空更合适;从文件内容被更新的角度看,翻译成刷新可能更合适。我习惯用后者,所以在这里我就译为了刷新hhh,并没有其他考虑。TLB中确实不像文件中有那么明显的刷新,但执行sfence.vma后,TLB中内容肯定会改变,所以就当它刷新了吧0.0。
我查了一下,sfence.vma或者说TLB的flush操作被称为TLB击落,这个形容还挺形象,某个条目无效就把它击落。
如果说的不对,欢迎继续讨论hh

我想你说的对,非常感谢你详细的说明。也许有些术语无论怎么翻译多多少少都会有点歧义吧lol,也容易出现个人理解的不同,重要的是明白做了什么而非怎么表达。如果之后遇到xv6相关问题,或许我还会来issue,hhhhhh。

我想你说的对,非常感谢你详细的说明。也许有些术语无论怎么翻译多多少少都会有点歧义吧lol,也容易出现个人理解的不同,重要的是明白做了什么而非怎么表达。如果之后遇到xv6相关问题,或许我还会来issue,hhhhhh。