Cache 的一致性特性
即使內存區域滿足了cache的使用條件,要正確的使用cache,仍然可能會碰到cache一致性的問題,由於cache會使得某一確定的時刻,cpu看到的儲存內容和內存中的實際內容不一致,如果僅僅只是CPU來操作這片區域,這不會產生任何問題,擔當有其他外設也參與讀寫的時候,就會產生以下兩種情況的cache一致性問題。
1、儲存位置被其它外設修改
以網卡為例,網卡會將接收到的數據包寫入到指定的內存中(A處地址),而如果此內存帶cache,且cache中剛剛存A處地址內存的緩存,此時,CPU訪問這段內存的時候cache並不知道這段內存已經被網卡更新,CPU獲得的數據還是cache中緩存的內容,也就是說獲取的不是最新數據包的內容。
2、外設需要看到CPU對某塊區域儲存的修改
以網卡發送為例,CPU將要發送的數據包寫入指定的內存,然后通知網卡將此內存中的數據發送出去,如果此內存帶cache,CPU寫入到此內存的數據可能還停留在cache中,內存的數據還未更新,網卡就發送了錯誤的數據。
確保Cache一致性的操作
對應於產生cache一致性問題的兩種情況,確保cache一致性的操作主要有:
1、cache 無效:cache無效是將cache中指定的區域的緩存標記為無效,當CPU再次訪問這個區域時,將強制cache從這個區域重新緩存數據。
2、cache 刷新:cache刷新時指立即將cache中指定區域的內容寫入到內存。