每個程序員都應該了解的內存知識(開篇)


注:本文多數內容來自對What Every Programmer Should Know About Memory一文的理解和翻譯。但這不是一篇嚴格的譯文,只摘取我讀了有心得的部分,並盡量加上自己的理解和自己收集的資料。

開篇

早期計算機系統的架構要比現在的簡單多了,CPU、內存、外存、網卡等幾個重要部件一組合就成了鼎鼎大名的計算機。每個部件自身結構相對簡單,各部件的工作能力也旗鼓相當,它們按照馮諾依曼體系結構協調工作在一起,十分協調融洽。說是早期,其實計算機技術的發展日新月異,也就是幾十年前吧。

計算機系統的幾大部件都凝聚了工程師的心血,並有很多優秀的工程師一直工作在優化這些部件上。很快,各個部件的工作能力就出現了差距,其中尤以內存和外存為甚,受限於價格的因素,內存外存的工作能力被CPU遠遠的落在了后面。這樣一來,計算及系統就存在短板效應,CPU空有飛速的計算速度,卻不能帶動整個計算機系統的工作能力。

外存瓶頸的解決,多是通過軟件技術來做緩存。

  1. 操作系統實現了針對外存的緩存,保存經常讀寫的數據在內存中;
  2. 存儲系統也被內置到外存設備中,比如磁盤控制器中,這樣即便沒有操作系統緩存存在的情況下,也能提升整體性能。

遺憾的是,內存存取瓶頸的解決,要比外存瓶頸的解決難得多,並且幾乎所有的解決方案,都需要改動硬件。這些為改善內存瓶頸而對硬件的改動,主要包含以下幾種:

  1. 內存的硬件結構設計(體現在速度和並發上);
  2. 內存控制器的設計;
  3. CPU緩存;
  4. 設備直接內存訪問(DMA)。

后續內容預告


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM