Cache 的write back和write through

來源:互聯網
上載者:User

標籤:des   style   color   os   使用   strong   ar   資料   art   

Cache 的write back和write through 收藏 
為了保證cache和memory的資料一致性,通常有三種方法:

1〉write through:CPU向cache寫入資料時,同時向memory也寫一份,使cache和memory的資料保持一致。優點是簡單,缺點是每次都要訪問memory,速度比較慢。

2〉post write:CPU更新cache資料時,把更新的資料寫入到一個更新緩衝器,在合適的時候才對memory進行更新。這樣可以提高cache訪問速度,但是,在資料連續被更新兩次以上的時候,緩衝區將不夠使用,被迫同時更新memory。

3〉write back:CPU更新cache時,只是把更新的cache區標記一下,並不同步更新memory。只是在cache區要被新進入的資料取代時,才更新memory。這樣做的原因是考慮到很多時候cache存入的是中間結果,沒有必要同步更新memory。優點是CPU執行的效率提高,缺點是實現起來技術比較複雜。

 

 

回寫與透寫
 
 
   對於cache的演算法。大方面有兩種,Write-Through(通寫)和Write-Back(回寫).    Write-Through,也就是說OS發送的處理data的請求,一直要等到全部memory裡面的data正確寫到穩定儲存media(如硬碟)中,然後返回給OS報告處理完畢,然後OS才會去update其狀態;這種情況下,通常不會有dirty cache.      而Write-Back,就是在OS發送處理data的請求後,該演算法會將它用buffer存起來,並在沒有正確寫到穩定儲存media(如硬碟)中前,就告訴OS處理完畢,然後OS就會去update;但是要是此時掉電或其他故障,buffer的資料沒有被寫入穩定儲存media(如硬碟),那麼os update的資訊就和media中的資訊不一致.為了避免這樣,所以才用NVRAM,它在調電後資料仍然不丟失,但是在被重新上電後,其資料會是dirty的,也就是樓主所提到的dirty cache(如何將dirty cache更新到media,這是Write-Back應該做的事)。    這和買賣東西相似,Write-Through就相當於你親自去買東西,你買到什麼就可以親手拿到;而Write-Back就和中介差不多,你給了中介錢,然後它告訴你說你的東西買到了,然後就相信拿到這個東西了,但是要是出現特殊情況中介跑了(掉鏈子了),你再去檢查,東西原來沒有真正到手。

 

1.Cache的兩個類型
    --Write Through
    當寫資料進Cache時,也同時更新了相應的Memory裡的內容
    --Write back
    只是寫到Cache裡,Memory的內容要等到cache儲存的要被別的資料替換或者系統做cache flush時,才會被更新。

2.Cache的兩個函數
    --Flush
    把Cache內容寫回Memory,當Cache為Write through,不需要Flush
    --Invalidate
    把Cache內容直接丟掉不要。

3.Cache的使用場合
    當有DMA在使用memory的時候,一般要用到cache的處理。因為DMA在訪問memory時是不經過cache的。比較典型的比如在Ethernet,wireless,USB等driver裡,DMA會操作descriptors和packet buffers,Driver要做這些處理
    --如果driver使用descripter和packet buffer的地址都是cache的地址,那麼
    a).Driver在讀descripter裡一些狀態比如Owned by CPU/DMA,有沒有收到包時,要對descripter當前結構裡的內容做cache invalidate,收到packet後,也要對packet buffer做cache invalidate
    b).Driver在寫descripter裡一些狀態比如Owned by DMA,要發送包時,要對descripter當前結構裡的內容做cache flush,發送packet時,也要對packet buffer做cache flush
    --有些driver會對descripter使用uncache 地址,那麼上面兩種情況裡invalidate/flush就不用做了。一般很少會對packet buffer也用uncache地址的,因為對packet內容的處理將會很頻繁,使用uncache會很慢。而descripter一般由於結構比較小,如果也使用cache地址的話,做invalidate/flush的時間消耗可能會比uncache的還要多。

Cache 的write back和write through

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.