天天看點

晦澀的翻譯LRU (Least Recently Used) - 最近最少使用?

    在學習緩存的原理時候,會碰到這樣一種情況,即當緩存不命中且緩存已滿的情況,需要選擇将緩存中的某一資料塊替換為仍在記憶體中的目标資料塊,但是選擇緩存中的哪塊被替換更高效呢?就有這個替換政策LRU (Least Recently Used)。

    這裡插一段,一般網上的搜尋結果包括百度百科給的解釋都是将LRU定義為針對記憶體管理的頁面替換算法,即針對的是虛拟記憶體管理時的缺頁現象。而我在第一段描述的是說LRU處理CPU和記憶體之間的緩存(cache)不命中現象。其實,二者的本質都是利用緩存和局部性的原理,隻不過習慣上的叫法不同。我參考的是《深入了解計算機系統》這本書,書裡介紹的很清楚,而且值得一提的是,該書指出LRU是作為緩存不命中的替換政策,但是對于缺頁的記憶體替換政策,書中指出“作業系統對DRAM緩存使用了更複雜精密的替換算法 [P537]”,顯然缺頁的記憶體替換政策應該不是LRU。是以,本文說的LRU僅是針對SRAM緩存不命中的替換政策。

    好了,言歸正傳,回頭博文的題目,不知道大家對LRU(Least Recently Used)的翻譯有沒有感到過很困惑不解?所有的檢索結果,包括《深入了解計算機系統》書中對其中文翻譯的都是“最近最少使用”。首先一個最大的邏輯困惑,“最少”這個描述對應的應該是頻度吧?但是我們知道,LRU的算法實作并未涉及到頻度(這裡略去LRU的算法描述,預設已知,一般用一個連結清單加一個哈希表實作)。那麼你這個“最近最少”的描述真的讓人困惑啊。。實際上,了解算法後的直覺感覺就是,它的意思好像就是替換最久遠(或最舊)的緩存中的塊。那麼就要問下 least recently 到底該怎麼翻譯了?這裡我沒有去過于推敲英語用法,但以過去的英文教育基礎,我覺得這裡least修飾recently是想表示“最不是最近的”或者說“非最近的”、“最久遠的”,按這種翻譯我覺得才最貼近LRU的原理描述。

    最後,想起來大學時曾經讀過一篇好文,裡面講到這樣一件事。說一個國小生問老師,有理數為什麼叫“有理數”啊?老師回答有理數就是有道理的數。這個回答顯然是不令人滿意的,但是我們大多數人也就得過且過吧,不去較真了。但是,有心人卻繼續挖掘找到了答案。原來,有理數英文是“rational number”,我們的翻譯取了rational的常用義“合理的”,但實際上rational還有一個意思是“可比的”,這個意思很好的解釋了有理數即是可比數(有理數定義:能表示成兩個整數之比的數是有理數)。說到這裡,想必每個人都會有些感慨,日後在遇到困惑時,我們是不是也應該多推敲推敲呢。

繼續閱讀