歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
Linux教程網 >> Linux綜合 >> Linux資訊 >> 更多Linux >> 關於存儲器的讀和寫

關於存儲器的讀和寫

日期:2017/2/27 9:21:54   编辑:更多Linux
  在計算機內部,數據的讀和寫是逐級實現的。 1、讀的情況:一個數據要從外部到達cpu,則要通過外存---》內存---》二級緩存---》一級緩存---》cpu寄存器---》參與計算。 2、寫的情況:一般情況下,cpu產生的數據並沒有(也不一定會)馬上要寫到外存上。那麼這些數據往往是先保留在緩存或內存裡,直到cpu通知寫,寫動作才會發生。 3、多個數據要讀時,則要排隊;同樣,多個數據要寫時,也要排隊。 4、當同時有讀和寫的動作請求時,cpu必須安排好他們的順序。 例子: 1、cpu要讀一個數據:當前指令寄存器中找不到該數據,則cpu會從一級緩存當中查找,沒有則查二級緩存,然後依次是內存、外存。 2、cpu讀入一個數據後,內存、二級緩存、一級緩存都有該數據。隨著數據讀入的增加,緩存會滿。這時就需要一個放棄的策略。先進後出法或先進先出法,還有一種策略:使用率最高的數據保留。 3、這樣,緩存或內存中就有好多數據。當cpu要查找數據時,也要有一種策略:相聯(全相聯、半相聯、部分相聯)。就是把緩存劃分成若干個相對獨立的區域,查找數據時按照某個策略查找,這樣效率會高些。 4、當cpu有數據要“寫”到緩存時,這種數據要優先考慮保留,直到cpu“寫”通知到達。 5、當讀和寫要求同時發生時,會發生2種情況:先讀後寫,先寫後讀。這兩種情況都要認真考慮。比如: (1)要寫的數據地址剛好是要讀的數據地址。先讀後寫使得讀的是舊數據,當你需要的是最新的數據時,就出錯了;先寫後讀使得原來的數據被覆蓋了,當你需要原來的數據時,這時讀出來的數據也是錯。 (2)要寫的數據地址雖然不是馬上要讀的數據,但它的中間結果還保留在緩存中。這樣也會產生錯誤。 這也稱為數據相關性。設計程序時應盡量避免(或減少)發生數據相關。雖然程序編譯時會優化數據相關性。




Copyright © Linux教程網 All Rights Reserved