在本系列文章的前兩講中,分別介紹了計算機組成原理這一系列文章的關注點——程序是如何跑起來的,以及系統總線的相關內容,具體能夠看個人這兩篇文章。在個人我的博客和CSDN上都已經發布了。在前面的這兩章中,咱們一直講,CPU是經過存儲器這麼一個部件,來獲取指令和各類數據的。 可是,從沒有更加深刻的去講解這部分的內容。若是你有過裝機的經驗或者學過計算機的導論等等這些基礎課程,確定會知道,計算機有硬盤、內存條、SSD等等,這些相似的就是咱們這一講的主角——存儲器。 你可能會說,我靠我學了這東西好像也沒有什麼用啊,好像知道了底層的東西對我並無太大的幫助啊,個人目標僅僅是編寫程序啊! 這多是你們對基礎內容的誤解,之因此這個系列的文章叫作《程序猿內容心法》,就是由於這些內容對於程序猿來講是十分重要的。**你須要瞭解存儲器的層次結構,由於這將會對你編寫的程序的性能產生巨大的影響。**緣由很簡單,上面說了,CPU是經過存儲器來訪問你編寫的程序的。你確定知道,CPU通常對於訪問內存條的優先級確定是要高於硬盤的,由於內存條更快,因此內存條容量的大小對計算機的性能有着很大的影響。若是你的程序可以直接在內存區,確定執行速度是更快的,性能天然就更好。 順便提一下,存儲這部份內容較多,我分紅幾個部分來完成寫做。第一步幫助讀者創建起存儲器結構層次的概念,接下來順着這個層次結構分別介紹主存、高速緩衝存儲器、輔助存儲的順序介紹。css
存儲器的分類是一門比較有意思的事情。存儲器這個部件通過了幾十年的發展,已經變得很是複雜了,從最開始的集成電路,到後面的磁帶、光盤、磁盤等等,因此,存儲器的分類也是比較複雜的。通常存儲器能夠按照容量、介質、存取方式、做用等來進行分類,可是比較重要的仍是後面兩種。緩存
存取時間與物理地址無關(隨機訪問)微信
存取時間與物理地址有關(串行訪問)dom
主存 所謂主存,就是以前講的,內存條之類的,CPU主要利用的存儲器。yii
FlashMemory 閃速存儲器,可以在不加電的狀況下能長期保持存儲的信息。由於主存中的信息在斷電之後就沒法恢復了,因此閃速存儲器頗有意義。ssh
輔存 輔存就是輔助存儲器,做爲擴展存儲資源,就是磁盤之類的大容量的存儲器,能夠輔助計算機讀寫數據。svn
高速緩衝存儲器(Cache) 高速緩衝存儲器是存在於主存與CPU之間的一級存儲器, 由靜態存儲芯片(SRAM)組成,容量比較小但速度比主存高得多, 接近於CPU的速度。關於SRAM後面也會介紹,此時你只須要知道高速緩衝存儲器可以進一步提升計算機的性能。實際上,CPU的速度要比全部存儲器的速度快上萬甚至十幾萬倍,這就形成了CPU須要等待存儲器送來的數據。爲了實現CPU和存儲器之間的速度匹配,是重中之重,因此纔出現了高速緩衝存儲器。性能
存儲器的分類並不過重要,只須要知道每種存儲器的做用便可。重中之重是存儲器的層次結構,只有理解好層次結構,才能設計出更棒的程序。 ui
存儲器的層次結構如上圖所示,是一個金字塔形狀的東西。從上到下依次是寄存器、緩存、主存、磁盤、磁帶等。寄存器通常存在於CPU內部,寄存器在第一篇文章中已經介紹過,剩下的就是這一節介紹的。設計
這裏還有一個十分重要的概念:存儲體系(Memory System)。**兩種或者兩種以上介質,使用軟件、硬件、軟硬件結合的方式,造成一個總體,從而使得這個存儲結構,在程序猿的角度看,是一種大容量、高速度的存儲器,而程序猿只須要編寫程序,而不須要知道究竟把程序存到哪一種存儲器中。**歷史上確實有過這樣的一個很是慘的階段,程序猿須要知道本身編寫的程序什麼時候、何地、什麼狀況下放入哪一個存儲器中,這簡直太使人抓狂了。還好咱們如今已經脫離了這個階段。
上面的金字塔只是讓你們創建起一個宏觀的認識,這並非所謂的存儲層次結構,真正的存儲層次結構分紅了兩種,一種是緩存-主存結構,另一種是主存-輔存結構。示意圖以下:
緩存-主存層次主要是用來解決CPU的速度和主存速度不匹配的問題,剛剛講過,即使是內存條這樣的高速設備,速度和CPU依然不在一個數量級上,因此須要這樣一個層次來解決這個問題。而緩存,就是上面說的Cache。 主存-輔存結構主要是解決容量問題,從金字塔的結構中,其實咱們就可以明白,爲何到今天,內存條的價格爲什麼會如此之高,一條DDR4 8G內存,就可以達到七八百RMB的樣子,而一塊1T的硬盤,也不過四百左右。對於用戶來說,若是都用內存條做爲存儲器,那簡直是人傻錢多。因此就須要使用主存-輔存層次來擴展容量。
這些日子有讀者向我反應,我寫的東西太長了,又都是很是硬的內容,可能讀多了就蒙了,因此我嘗試用簡短的話完成寫做,同時縮短文章篇幅。 在本講中,我重點介紹了存儲器的重要性、存儲器的兩種分類方式以及存儲器的層次結構。內容相對簡單,你們重點掌握存儲器的層次結構,這很是重要。
感謝您的閱讀,歡迎指正博客中存在的問題,也能夠跟我聯繫,一塊兒進步,一塊兒交流!
微信公衆號:進擊的程序狗 郵箱:roobtyan@outlook.com 我的博客:http://roobtyan.cn