2017-08-11 39 views

回答

0

普通內存 - 無論是用戶空間還是內核 - 幾乎總是被標記爲可緩存的。否則,使用該內存將會導致巨大的性能下降。

一般而言,您希望內存被標記爲不可緩存的唯一時間是內存實際上是外部設備(即內存芯片之外的設備)的一部分:例如,使用的PCI設備BAR區域實現設備控制寄存器。

緩存對性能有好處,因爲讀取和寫入緩存通常比讀寫底層RAM的速度快。高速緩存可以「捆綁」讀取和寫入,以便RAM芯片上的這些操作大大減少。缺點是通過使用它,您通常會放棄對RAM讀寫的精確控制。

主RAM通常在高速緩存控制器確定的「隨機」時間讀取和寫入,並且它通常被讀取和寫入稱爲「高速緩存行」的大塊 - 32,64或128塊一次一個字節。當你向高速緩存的內存寫入一個值時,該值可能不會寫入實際的RAM芯片,直到稍後的某個時間不確定(如果有的話:它可能會在從緩存中傳出之前被覆蓋)。這當然會把你隱藏起來成爲記憶的使用者 - 你通常甚至不需要意識到它。

但是,如果正在寫入的內存是一個控制寄存器 - 例如設置某個設備的某種模式或特徵 - 那麼您希望該寄存器的值恰好在寫入時設置,而不是不確定稍後的時間,並且您不希望寫入該寄存器影響地址空間中可能位於其附近的任何其他寄存器。同樣,如果你讀取狀態寄存器的值,它可能是「易失性」的:即它的值可能隨着同一個寄存器的兩次連續讀取而改變,所以你不希望這個值被緩存。讀取寄存器可能有副作用,所以你只需要顯式讀取來訪問它。