⑴ 電腦中的內存有什麼組成
一. CPU
無論在中低端路由器還是在高端路由器中,CPU都是路由器的心臟。通常在中低端路由器中,CPU負責交換路由信息、路由表查找以及轉發數據包。在上述路由器中, CPU的能力直接影響路由器的吞吐量(路由表查找時間)和路由計算能力(影響網路路由收斂時間)。在高端路由器中,通常包轉發和查表由ASIC晶元完成,CPU只實現路由協議、計算路由以及分發路由表。由於技術的發展,路由器中許多工作都可以由硬體實現(專用晶元)。CPU性能並不完全反映路由器性能。路由器性能由路由器吞吐量、時延和路由計算能力等指標體現。
二. 主板
也稱主機板,是安裝在主機機箱內的一塊矩形電路板,上面安裝有電腦的主要電路系統。主板的類型和檔次決定著整個微機系統的類型和檔次,主板的性能影響著整個微機系統的性能。主板上安裝有控制晶元組、BIOS晶元和各種輸入輸出介面、鍵盤和面板控制開關介面、指示燈插接件、擴充插槽及直流電源供電接插件等元件。CPU、內存條插接在主板的相應插槽(座)中,驅動器、電源等硬體連接在主板上。主板上的介面擴充插槽用於插接各種介面卡,這些介面卡擴展了電腦的功能。常見介面卡有顯示卡、音效卡等。
三. 內存
隨機訪問內存(RAM)相當於PC機上的移動存儲,用來存儲和保存數據的。在任何時候都可以讀寫, RAM通常用作操作系統或其他正在運行的程序的臨時存儲介質(可稱作系統內存)。不過,當電源關閉時時RAM不能保留數據,如果需要保存數據,就必須把它們寫入到一個長期的存儲器中(例如硬碟)。正因為如此,有時也將RAM稱作"可變存儲器"。RAM內存可以進一步分為靜態RAM(SRAM)和動態內存(DRAM)兩大類。
只讀內存(ROM)相當於PC機上的硬碟,用來存儲和保存數據的。ROM數據不能隨意更新,但是在任何時候都可以讀取。即使是斷電,ROM也能夠保留數據。
DDR內存: DDR(Dual date rate) SDRAM 稱為"雙倍速率SDRAM",在133MHz的前端匯流排頻率下,帶寬可達2.128GB/S。它的工作原理是其能在控制時鍾觸發沿的上、下沿都能進行數據傳輸(而SDRAM只在控制時鍾的下降沿進行數據傳輸),因此在一次控制信號過程中,DDR SDRAM能進行兩次的數據交換,這也就是它為什麼又如此高的帶寬。
四. 硬碟
從計算機系統的結構來看,存儲器分為內存儲器和外存儲器兩大類。內存儲器與CPU直接聯系,負責各種軟體的運行。外存儲器包括軟盤、硬碟、光碟、磁帶機等。硬碟和軟盤很相似,它們的工作原理大致相同,不同的是軟盤與軟盤驅動器是分開的,而硬碟與硬碟驅動器卻是裝在一起。另外,在使用時,二者速度差異很大。
硬碟主要由:碟片,磁頭,碟片轉軸及控制電機,磁頭控制器,數據轉換器,介面,緩存等幾個部分組成。
五. 鍵盤
windows快捷鍵
六. 網卡
網卡(Network interface card)也被稱作網路介面卡,是安裝在計算機上的適配器,它們提供對網路的連接點。每個NIC的設計都是為了一種特定的網路,例如乙太網絡、令牌環網路、FDDI、ARCNENT等等。它們在和開放式系統互聯(OSI)協議棧相應的物理層進行操作,並向特定的電纜提供一個連接點,如同軸電纜、雙絞線電纜、光纜。無線區域網的NIC有一個天線以與一個基地站進行通信。
七. 顯卡
又稱顯示器適配卡,是連接主機與顯示器的介面卡。其作用是將主機的輸出信息轉換成字元、圖形和顏色等信息,傳送到顯示器上顯示。顯示卡插在主板的ISA、PCI、AGP擴展插槽中,ISA顯示卡現已基本淘汰。
八. 音效卡
多媒體電腦中用來處理聲音的介面卡。音效卡可以把來自話筒、收錄音機、激光唱機等設備的語音、音樂等聲音變成數字信號交給電腦處理,並以文件形式存檔,還可以把數字信號還原成為真實的聲音輸出。音效卡尾部的介面從機箱後側伸出,上面有連接麥克風、音箱、游戲桿和 MIDI設備的介面。
九. 軟碟機
軟碟機主要由控制電路板、馬達、磁頭定位器和磁頭。 磁頭其實是很小的,上下各有一個,我們看到的是它的滑軌。
十. 光碟機
讀取光碟信息的設備。是多媒體電腦不可缺少的硬體配置。光碟存儲容量大,價格便宜,保存時間長,適宜保存大量的數據,如聲音、圖像、動畫、視頻信息、電影等多媒體信息。光碟驅動器有三種,CD-ROM、CD-R和CD-RW,CD-ROM是只讀光碟驅動器; CD-R只能寫入一次,以後不能改寫;CD-RW是可重復寫、讀的光碟驅動器。
CD-R即可寫入式CD光碟,可以對其進行寫入操作,但不能擦寫已寫入的內容;CD-RW則既可以寫入,又可以擦寫,但可擦寫的次數是有限的。對CD-RW進行寫入和擦寫操作需要使用CD-RW驅動器,也就是我們常說的CD刻錄機。刻錄機也可以寫入CD-R碟片。
DVD光碟機指讀取DVD光碟的設備。DVD碟片的容量為4.7GB,相當於CD-ROM光碟的七倍,可以存儲133分鍾電影,包含七個杜比數字化環繞音軌。DVD碟片可分為:DVD-ROM、DVD-R(可一次寫入)、DVD-RAM(可多次寫入)和DVD-RW(讀和重寫)。目前的DVD光碟機多採用EIDE介面,能像CD-ROM光碟機一樣連接到IDE1或IDE2口上。
COMBO DRIVERS,即康寶。是指集CD-ROM、DVD-ROM、刻錄機(CD-RW)三者為一體的一種新型光碟驅動器,在功能方面,它既能讀CD-ROM 光碟,又能讀DVD-ROM光碟機,甚至還可以刻錄CD-R和CD-RW光碟。正因為它具那麼多的功能,不少廠商稱之為全能光碟驅動器。
十一. 機箱
機箱一般由外殼、支架、前面板組成。外殼硬度較高,主要起保護機箱內部元件及防輻射的作用。
一隻機箱的好與壞很大程度上是由它的材質所決定的。選購機箱是做到一掂和三按(一掂:掂分量;三按:一按鐵皮是否凹陷,二按鐵皮是否留下按印,三按塑料面板是否堅硬),劣質和優質自然水落石出。機箱的主要用料就是鋼板,一隻品質優良的機箱,應該使用耐按壓鍍鋅鋼板製造。並且鋼板的厚度應該在1mm以上,較好的機箱甚至使用1.3mm以上的鋼板製造。鋼板的品質是衡量一隻機箱優與劣的重要指標,直接決定著機箱質量的好壞。
十二. Modem
MOlator/DEMolator(調制器/解調器)的縮寫,作用是在發送端通過調制將數字信號轉換為模擬信號,而在接收端再將模擬信號解調轉換為數字信號。
十三. 電源
ACPI: 是由Intel、Microsoft等聯合推出的一種電源管理規范,它將電源管理集成到硬體、操作系統和應用程序中,實現了由操作系統對電源的全面管理。具備ACPI功能的電腦在不使用時處於功耗極低的掛起狀態,modem等接收到信號時可自動開機,並可以實現軟體關機,適應了日益增長的網路應用要求。
十四. 滑鼠
純機械式滑鼠,現在世面上很少見到了,在它的底部有一個滾球,當推動滑鼠時,滾球就會不斷觸動旁邊的小滾輪,產生不同強度的脈波,通過這種連鎖效應,電腦才能運算出遊標的正確位置。
光電滑鼠由光斷續器來判斷信號,最顯著特點就是需要使用一塊特殊的反光板作為MOUSE移動時的墊。這塊墊的主要特點是其中那微細的一黑一白相間的點。原因是在光電MOUSE的底部,有一個發光的二極體和兩個相互垂直的光敏管,當發光的二極體照射到白點與黑點時,會產生折射和不折射兩種狀態,而光敏管都這兩種狀態進行處理後便會產生相應的信號。從而使電腦作出反應,一旦離開那塊墊,那光電滑鼠就不能使用了。
它是利用光學的技術製造,其特點就是你找不到它的滾球,因為它利用了底部的光點偵測滑鼠在移動中所產生的位移量。使用它最大的好處就是不用常常清潔滑鼠球,因為沒有滾輪,而且精確度高。
就平常所說的機械式滑鼠,它是一種光電和機械相結合的滑鼠,市場的佔有率達到95%。它的原理是緊貼著滾動橡膠球有兩個互相垂直的傳動軸,軸上有一個光柵輪,光柵輪的兩邊對應著有發光二極體和光敏三極體。當滑鼠移動時,橡膠球帶動兩個傳動軸旋轉,而這時光柵輪也在旋轉,光敏三極體在接收發光二極體發出的光時被光柵輪間斷地阻擋,從而產生脈沖信號,通過滑鼠內部的晶元處理之後被CPU接受。信號的數量和頻率對應著屏幕上的距離和速度。
十五. 顯示器
顯示器是用來顯示影像的裝置。目前台式機市場上顯示器的類型主要有三種,普通的數控彩顯、純平顯示器以及液晶顯示器。
VGA:英文全稱是Video Graphics Array,這種屏幕現在一般在本本裡面已經絕跡了,是很古老的本本使用的屏幕,支持最大像素為640×480,但現在仍有一些小的便攜設備還在
使用這種屏幕。
SVGA:全稱Super Video Graphics Array,屬於VGA屏幕的替代品,最大支持800×600像素,屏幕大小為12.1英寸,現在仍有部分本本還在使用。
XGA:全稱Extended Graphics Array,現在最常見的本本屏幕,80%以上的本本採用這種屏幕,支持最大1024×768像素,屏幕大小有10.4英寸、11.3英寸、12.1英寸、13.3英寸和14.1英寸。其升級版本為SXGA,即Super XGA,支持最大1400×1050像素。
UVGA:全稱Ultra Video Graphics Array,也有被稱作UXGA(Ultra Extended Graphics Arry),這種屏幕應用在15英寸的屏幕的本本上,支持最大1600×1200像素,價格也是比較昂貴。
WXGA:全稱Wide Extended Graphics Array,按16:10比例的加寬本本屏幕,適合於DVD影片的長寬比,所以看DVD時不會有圖象變形或兩邊圖象顯示不出來的問題,這種屏幕支持1280×800和1680×1050兩種像素的15.4英寸的屏幕,現在大多數寬屏幕的本本採用這種屏幕。
LCD: Liquid Crystal Display(液晶顯示)。
等離子顯示器(Plasma Display Panle)是繼傳統CRT顯示器與LCD液晶顯示器之後,業界推出的最新銳的平板直視式顯示技術。等離子顯示器產品因其獨特的方型像素矩陣,氣體放電顯示原理,使其擁有物理性的完全平面顯示效果,在顯示面積的拓展性上大大優於CRT顯示器,同時顯示在色彩,刷新率上也要大大優於LCD液晶顯示技術。
液晶光閥投影機: 採用CRT管和液晶光閥作為成像器件,是CRT投影機與液晶與光閥相結合的產物。為了解決圖像解析度與亮度間的矛盾,它採用外光源,也叫被動式投影方式。一般的光閥主要由三部分組成:光電轉換器、鏡子、光調制器,它是一種可控開關。通過CRT輸出的光信號照射到光電轉換器上,將光信號轉換為持續變化的電信號;外光源產生一束強光,投射到光光閥上,由內部的鏡子反射,能過光調制器,改變其光學特性,緊隨光閥的偏振濾光片,將濾去其它方向的光,而只允許與其光學縫隙方向一致的光通過,這個光與CRT信號相復合,投射到屏幕上。它是目前為止亮度、解析度最高的投影機,亮度可達6000ANSI流明,解析度為 2500×2000,適用於環境光較強,觀眾較多的場合,如超大規模的指揮中心、會議中心及大型娛樂場所,但其價格高,體積大,光閥不易維修。對追求高解析度、高亮度、大畫面的用戶,液晶光閥投影機是他們的首選。
⑵ 內存條的基礎知識
介面類型,是根據內存條金手指上導電觸片的數量來劃分的。金手指上的導電觸片,也習慣正扒弊稱為針腳數(Pin)。因為不同的內存採用的介面類型各不相同,而每種介面類型所採用的針腳數各不相同。下面就讓我帶你去看看關於內存條的基礎知識吧,希望能幫助到大家!
內存知識 詳解:介面類型
1、金手指
金手指(connecting finger)是內存條上與內存插槽之間的連接部件,所舉族有的信號都是通過金手指進行傳送的。金手指由眾多金黃色的導電觸片組成,因其表面鍍金而且導電觸片排列如手指狀,所以稱為「金手指」。金手指實際上是在覆銅板上通過特殊工藝再覆上一層金,因為金的抗氧化性極強,而且傳導性也很強。不過,因為金昂貴的價格,目前較多的內存都採用鍍錫來代替。從上個世紀 90 年代開始,錫材料就開始普及,目前主板、內存和顯卡等設備的「金手指」,幾乎都是採用的錫材料,只有部分高性能伺服器/工作站的配件接觸點,才會繼續採用鍍金的做法,價格自然不菲。
內存的金手指
內存處理單元的所有數據流、電子流,正是通過金手指與內存插槽的接觸與 PC 系統進行交換,是內存的輸出輸入埠。因此,其製作工藝,對於內存連接顯得相當重要。
2、內存插槽
最初的計算機系統,通過單獨的晶元安裝內存,那時內存晶元都採用 DIP(Dual ln-line Package,雙列直插式封裝)封裝,DIP 晶元是通過安裝在插在匯流排插槽里的內存卡與系統連接,此時還沒有正式的內存插槽。DIP 晶元有個最大的問題,此銷就在於安裝起來很麻煩,而且隨著時間的增加,由於系統溫度的反復變化,它會逐漸從插槽里偏移出來。隨著每日頻繁的計算機啟動和關閉,晶元不斷被加熱和冷卻,慢慢地晶元會偏離出插槽。最終導致接觸不好,產生內存錯誤。
內存插槽
早期還有另外一種 方法 ,是把內存晶元直接焊接在主板或擴展卡里,這樣有效避免了 DIP 晶元偏離的問題,但無法再對內存容量進行擴展,而且如果一個晶元發生損壞,整個系統都將不能使用,只能重新焊接一個晶元或更換包含壞晶元的主板。此種方法付出的代價較大,也極為不便。
對於內存存儲器,大多數現代的系統,都已採用單列直插內存模塊(Single Inline Memory Mole,SIMM)或雙列直插內存模塊(Dual Inline Memory Mole,DIMM)來替代單個內存晶元。這些小板卡插入到主板或內存卡上的特殊連接器里。
3、內存模塊
1) SIMM
SIMM(Single Inline Memory Mole,單列直插內存模塊)。內存條通過金手指與主板連接,內存條正反兩面都帶有金手指。金手指可以在兩面提供不同的信號,也可以提供相同的信號。SIMM 就是一種兩側金手指都提供相同信號的內存結構,它多用於早期的 FPM 和 EDD DRAM,最初一次只能傳輸 8bif 數據,後來逐漸發展出 16bit、32bit 的 SIMM 模組。其中,8bit 和 16bit SIMM 使用 30pin 介面,32bit 的則使用72pin 介面。在內存發展進入 SDRAM 時代後,SIMM 逐漸被 DIMM 技術取代。
2) DIMM
DIMM(Dual Inline Memory Mole,雙列直插內存模塊)。與 SIMM 相當類似,不同的只是 DIMM 的金手指兩端,不像 SIMM 那樣是互通的,它們各自獨立傳輸信號。因此,可以滿足更多數據信號的傳送需要。同樣採用 DIMM,SDRAM 的介面與 DDR 內存的介面也略有不同,SDRAMDIMM 為 168Pin DIMM 結構,金手指每面為 84Pin,金手指上有兩個卡口,用來避免插入插槽時,錯誤將內存反向插入而導致燒毀;
DDR DIMM則採用 184Pin DIMM 結構,金手指每面有 92Pin,金手指上只有一個卡口。卡口數量的不同,是二者最為明顯的區別。DDR2 DIMM 為240pinDIMM 結構,金手指每面有 120Pin,與 DDR DIMM 一樣金手指一樣,也只有一個卡口,但是卡口的位置與 DDR DIMM 稍微有一些不同。因此,DDR 內存是插不進 DDR2 DIMM 的,同理 DDR2 內存也是插不進 DDR DIMM 的。因此,在一些同時具有 DDR DIMM 和 DDR2 DIMM 的主板上,不會出現將內存插錯插槽的問題。
不同針腳 DIMM 介面對比。為了滿足 筆記本 電腦對內存尺寸的要求,SO-DIMM(Small Outline DIMM Mole)也開發了出來,它的尺寸比標準的 DIMM 要小很多,而且引腳數也不相同。同樣 SO-DIMM 也根據 SDRAM 和 DDR 內存規格不同而不同。SDRAM 的 SO-DIMM 只有 144pin引腳,而DDR 的 SO-DIMM 擁有 200pin 引腳。此外,筆記本內存還有 MicroDIMM 和 Mini Registered DIMM 兩種介面。MicroDIMM 介面的DDR 為 172pin,DDR2 為 214pin;Mini Registered DIMM 介面為 244pin,主要用於 DDR2 內存。
3) RIMM
RIMM(Rambus Inline Memory Mole)是 Rambus 公司生產的 RDRAM 內存所採用的介面類型。RIMM 內存與 DIMM 的外型尺寸差不多,金手指同樣也是雙面的。RIMM 有也 184 Pin 的針腳,在金手指的中間部分有兩個靠的很近的卡口。RIMM 非 ECC 版有 16 位數據寬度,ECC 版則都是 18 位寬。由於 RDRAM 內存較高的價格,此類內存在 DIY 市場很少見到,RIMM 介面也就難得一見了。
基礎知識(入門篇)
關於01
我們初學編程時,只知道編寫代碼,運行程序,卻不知道程序是在什麼的基礎上運行的。只知道聲明變數,給變數賦值,數據存儲在變數中,卻不知道變數是以什麼形式存在。
《內存》可以參考《計算機組成原理》和《微機原理》書籍,而作為信息學奧賽的同學們,只需了解《內存》的一些基礎知識即可,不必深究。
關於《計算機組成原理》,可參考 文章 :
【計算機組成原理】(入門篇)
目錄02
1、內存的內部結構
2、數據是如何存儲在內存中
3、數據在內存中的表現形式
4、存儲單元的大小
5、如何從內存中尋找指定的數據(內存地址)
概要03
本篇主要講解有關《內存》的基礎知識,有助於自己在編程上的進一步提升。
為什麼學習《內存》的知識可以提升自己對編程進一步的認識呢?
其實,我們學習信奧(C/C++)時,一般只是學習C/C++的相關語法。當我們練習多了,可以熟練地運用各種語法。我們也知道如何將1+1賦給一個int類型變數,也知道不能把整數1賦給string類型變數(對象)。但是1+1賦值操作在內存中是如何實現的呢?為什麼浮點型存在誤差?為什麼int類型與string類型不能直接賦值操作?
我們只知道編寫的程序在內存中運行,卻不知道數據在內存中是如何存儲的。就好比只看到書籍的封面,但不知道書中的內容。
要求04
在學習《內存》之前,我們只需掌握C/C++一些基礎知識,可以獨立解決一些簡單的問題即可。
內存的內部結構
對於信息學奧賽的同學們來說,《內存》這一概念比較抽象。不過,經過閱讀文章《【計算機組成原理】(入門篇)》後,相信同學們對內存的概念清晰了不少,至少知道內存是用來存儲程序運行的相關數據。
常用數據一般存儲在硬碟中,如果對這些數據進行處理(例如使用Word寫一篇文章),並不是CPU直接對硬碟的文件進行操作,而是從硬碟相對應的位置把該文件的數據讀取到內存中,CPU再對內存中的數據進行處理。簡單地說,《內存》是CPU與硬碟進行溝通的「橋梁」。當然,並不一定是硬碟,平時存儲數據的設備還有U盤等,統稱為外存。
《內存》內部由數以億計的納米級電子元件構成。
如上圖,內存條由存儲晶元、金手指、電路組成。
存儲晶元:黑色的方塊。每個方塊由很多的晶體管組成,可以理解為數據就存儲在晶體管中。
金手指:底部的金色金屬片。內存條插在主板的內存條插槽中,實際上與插槽接觸的部位就是金手指。如此一來,CPU就可以通過主板與內存進行通信。
電路:綠色面板。面板中有許多細微的線路和電阻等電子元件,用於數據的傳輸。
數據是如何存儲在內存中
家裡控制電燈的開關,電腦的開關。存儲晶元中的晶體管也是如此。程序運行的數據存儲在晶體管中。
如上圖,每個方格代表一個晶體管。
如下圖,每個晶體管都有獨立的開關,通電時開,斷電時關。此處用白色表示開,黑色表示關。
一個數值並不是只存儲在一個晶體管中,是多個晶體管。而多個晶體管構成一個存儲單元。
存儲單元的大小
存儲單元有大小,而一個存儲單元的大小是8位(bit)。
內存中常用的存儲單位是:位(bit)、位元組(Byte)。
1位元組=8位
那麼一個存儲單元也是1位元組。
關於《存儲單位》的相關知識,會以一篇獨立的文章詳細講解。
數據在內存中的表現形式
數據在內存中是以二進制的形式存儲。
十進制是由0~9組成,而二進制是由0和1組成。
如上圖,這是一個存儲單元(8bit),有8個格子,一個格子表示1bit。而每一個格子的值要麼0,要麼為1。其中,白色表示開,黑色表示關,一般用1和0分別表示開和關。那麼用二進製表示是01101001,轉換為十進制的值是105,所以該存儲單元存儲的值就是105。
關於《進制》的相關知識,會以一篇獨立的文章詳細講解。
此處只講解數字數據,其他數據的表現形式很復雜。
如何從內存中尋找指定的數據(內存地址)
先舉個例子:
如上圖,有幾棟樓房,我們都知道,每一棟樓都有一個具體的地址,而一棟樓的每家每戶都有各自的房號,從而組成一個完整的地址。而我們的個人居民身份證就有一個詳細地址。
居民身份證除了有地址外,還有身份證號碼,每一個號碼都是唯一。
如何從內存中尋找指定的數據?
內存中的存儲單元就像人一樣,都有著獨一無二的「身份證號碼」,就是地址。比如警察叔叔根據身份證號碼就能查到對應的個人信息。
再舉個例子:
如上圖,這是一個書櫃,又分成若干個小櫃子,現對每個小櫃子進行分類放置書籍並設置標簽。我們要尋找某一本書時,根據標簽就可以輕松找到。程序運行時也是一樣,知道要在什麼地址進行數據的讀寫操作。
其他疑問
為什麼要分十進制而二進制?
簡單說,十進制是給人用的,而二進制是給機器用的。
數據有數字、字母、符號、聲音、圖像等等。數據是以二進制的形式存儲在內存中。
內存數據輸出到 顯示器 時,為什麼可以顯示我們人類能看懂的信息?
內存中的數據是經過轉換處理後,我們才能看懂。我們所看到的數據(例如一篇文章、一張照片、一部電影),它們的本質還是二進制。
你不知道的內存知識
一、CPU與內存
先鋪墊幾個概念,以免後面混亂:
Socket或Processor: 指一個物理CPU晶元,盒裝還是散裝的。上面有很多針腳,直接安裝在主板上。
Core : 指在Processor里封裝一個CPU核心,每個Core都是完全獨立的計算單元,我們平時說的4核心CPU,指的就是Processor裡面封裝了4個Core。
HT超線程:目前Intel與AMD的Processor大多支持在一個Core里並行執行兩個線程,此時從 操作系統 看就相當於兩個邏輯CPU(Logical Processor)。大多數情況下,我們程序里提到的CPU概念就是指的這個Logical Processor。
咱們先來看幾個問題:
1、CPU可以直接操作內存嗎?
可能一大部分老鐵肯定會說:肯定的啊,不能操作內存怎麼讀取數據呢。
其實如果我們用這聰明的大腦想一想,咱們的台式主機大家肯定都玩過。上面CPU和內存條是兩個完全獨立的硬體啊,而且CPU也沒有任何直接插槽用於掛載內存條的。
也就是說,CPU和內存條是物理隔離的,CPU並不能直接的訪問內存條,而是需要藉助主板上的其他硬體間接的來實現訪問。
2、CPU的運算速度和內存條的訪問速度差距有多大?
呵呵呵,這么說吧,就是一個鴻溝啊,CPU的運算速度與內存訪問速度之間的差距是100倍。
而由於CPU與內存之間的速度差存在N個數量級的巨大鴻溝,於是CPU最親密的小夥伴Cache 閃亮登場了。與DRAM 家族的內存(Memory)不同,Cache來自SRAM家族。
而DRAM與SRAM的最簡單區別就是後者特別快,容量特別小,電路結構非常復雜,造價特別高。
而Cache與主內存之間的巨大性能差距主要還是工作原理與結構不同:
DRAM存儲一位數據只需要一個電容加一個晶體管,SRAM則需要6個晶體管。
由於DRAM的數據其實是被保存在電容里的,所以每次讀寫過程中的充放電環節也導致了DRAM讀寫數據有一個延時的問題,這個延時通常為十幾到幾十ns。
內存可以被看作一個二維數組,每個存儲單元都有其行地址和列地址。
由於SRAM的容量很小,所以存儲單元的地址(行與列)比較短,可以被一次性傳輸到SRAM中。DRAM則需要分別傳送行與列的地址。
SRAM的頻率基本與CPU的頻率保持一致,而DRAM的頻率直到DDR4以後才開始接近CPU的頻率。
3、Cache 是怎麼使用的?
其實Cache 是被集成到CPU內部的一個存儲單元(平時也被我們稱為高速緩存),由於其造價昂貴,並且存儲容量遠遠不能滿足CPU大量、高速存取的需求。
所以出於對成本的控制,在現實中往往採用金字塔形的多級Cache體系來實現最佳緩存效果。
於是出現了,一級Cache(L1 Cache)、二級Cache(L2 Cache)及三級Cache(L3 Cache)。每一級都犧牲了部分性能指標來換取更大的容量,目的也是存儲更多的 熱點 數據。
以Intel家族Intel SandyBridge架構的CPU為例:
L1 Cache容量為64KB,訪問速度為1ns左右
L2Cache容量擴大4倍,達到256KB,訪問速度則降低到3ns左右
L3 Cache的容量則擴大512倍,達到32MB,訪問速度也下降到12ns左右(也比訪問主存的105ns(40ns+65ns)快一個數量級)
L3 Cache是被一個Socket上的所有CPU Core共享的,其實最早的L3 Cache被應用在AMD發布的K6-III處理器上,當時的L3 Cache受限於製造工藝,並沒有被集成到CPU內部,而是被集成在主板上,如圖:
從上圖我們也能看出來,CPU如果要訪問內存中的數據,則需要經過L1、L2、L3三道關卡,就是這三個Cache中都沒有需要的數據,才會從主內存中直接進行讀取。
最後我們來看下Intel Sandy Bridge CPU的架構圖:
二、多核CPU與內存共享的問題
問題:Cache一致性問題
多核CPU共享內存的問題也被稱為Cache一致性問題。
其實就是多個CPU核心看到的Cache數據應該是一致的,在某個數據被某個CPU寫入自己的Cache(L1 Cache)以後,其他CPU都應該能看到相同的Cache數據。
如果在自己的Cache中有舊數據,則拋棄舊數據。
考慮到每個CPU都有自己內部獨占的Cache,所以這個問題與分布式Cache保持同步的問題是同一類問題
目前業界公認的解決一致性問題的最佳方案就是Intel 的MESI協議了,大多數SMP架構都採用了這一方案。
解決方案:MESI
不知道大家還記得Cache Line 嗎,就是我們常說的高速緩存中緩存條目裡面的那個緩存行。
其實仔細想想,在進行I/O操作從來不以位元組為單位,而是以塊為單位,有兩個原因:
I/O 操作比較慢,所以讀一個位元組與讀連續N個位元組的花費時間基本相同
數據訪問一般都具有空間連續的特徵
所以CPU針對Memory的讀寫也採用了類似於I/O塊的方式
實際上,CPU Cache(高速緩存)里最小的存儲單元就是Cache line(緩存行),Intel CPU 的一個Cache Line存儲64個位元組。
每一級Cache都被劃分為很多組Cache Line,典型的情況就是4條Cache Line為一組。
當Cache從Memory中載入數據時,一次載入一條Cache Line的數據
如圖我們可以看到,每個Cache Line 頭部都有兩個Bit來標識自身狀態,總共四種:
M(Modified):修改狀態,在其他CPU上沒有數據的副本,並且在本CPU上被修改過,與存儲器中的數據不一致,最終必然會引發系統匯流排的寫指令,將Cache Line中的數據寫回Memory中。
E(E__clusive):獨占狀態,表示當前Cache Line中的數據與Memory中的數據一致,此外,在其他CPU上沒有數據的副本。
S(Shared):共享狀態,表示Cache Line中的數據與Memory中的數據一致,而且當前CPU至少在其他某個CPU中有副本。
I(Invalid):無效狀態,在當前Cache Line中沒有有效數據或者該Cache Line數據已經失效,不能再用;當Cache要載入新數據時,優先選擇此狀態的Cache Line,此外,Cache Line的初始狀態也是I狀態
在對Cache(高速緩存)的讀寫操作引發了Cache Line(緩存行)的狀態變化,因而可以將其理解為一種狀態機模型。
但MESI的復雜和獨特之處在於狀態有兩種視角:
一種是當前讀寫操作(Local Read/Write)所在CPU看到的自身的Cache Line狀態及其他CPU上對應的Cache Line狀態
另一種是一個CPU上的Cache Line狀態的變遷會導致其他CPU上對應的Cache Line狀態變遷。
如下所示為MESI協議的狀態轉換圖:
具體MESI的實現過程可以看我另一篇文章:看懂這篇,才能說了解並發底層技術
深入理解不一致性內存
MESI協議解決了多核CPU下的Cache一致性問題,因而成為SMP架構的唯一選擇,而SMP架構近幾年迅速在PC領域(__86)發展。
SMP架構是一種平行的架構,所有CPU Core都被連接到一個內存匯流排上,它們平等訪問內存,同時整個內存是統一結構、統一定址的。
如下所示給出了SMP架構的示意圖:
隨著CPU核心數量的不斷增加,SMP架構也暴露出天生的短板,其根本瓶頸是共享內存匯流排的帶寬無法滿足CPU數量的增加,同時,在一條「馬路」上通行的「車」多了,難免會陷入「擁堵模式」。
不知道你是否聽說過匯流排風暴,可以看下:匯流排風暴
在這種情況下,分布式解決方案應運而生,系統的內存與CPU進行分割並捆綁在一起,形成多個獨立的子系統,這些子系統之間高速互聯,這就是NUMA(None Uniform Memory Architecture)架構,如下圖所示。
可以看出,NUMA架構中的內存被分割為獨立的幾塊,被不同CPU私有化了。
因此在CPU訪問自家內存的時候會非常快,在訪問其他CPU控制的內存數據時,則需要通過內部互聯通道訪問。
NUMA架構的優點就是其伸縮性,就算擴展到幾百個CPU也不會導致性嚴重的下降。
NUMA技術的特點
在NUMA架構中引入了一個重要的新名詞——Node
一個Node由一個或者多個Socket Socket組成,即物理上的一個或多個CPU晶元組成一個邏輯上的Node
我們來看一個Dell PowerEdge系列伺服器的NUMA的架構圖:
從上圖可以看出其特點:
4個處理器形成4個獨立的NUMA Node由於每個Node都為8 Core,支持雙線程
每個Node里的Logic CPU數量都為16個,占每個Node分配系統總內存的1/4
每個Node之間都通過Intel QPI(QuickPath Interconnect)技術形成了點到點的全互聯處理器系統
NUMA這種基於點到點的全互聯處理器系統與傳統的基於共享匯流排的處理器系統的SMP還是有巨大差異的。
在這種情況下無法通過嗅探匯流排的方式來實現Cache一致性,因此為了實現NUMA架構下的Cache一致性,Intel引入了MESI協議的一個擴展協議——MESIF
針對NUMA的支持
NUMA架構打破了傳統的「全局內存」概念,目前還沒有任意一種編程語言從內存模型上支持它,當前也很難開發適應NUMA的軟體。
Java在支持NUMA的系統里,可以開啟基於NUMA的內存分配方案,使得當前線程所需的內存從對應的Node上分配,從而大大加快對象的創建過程
在大數據領域,NUMA系統正發揮著越來越強大的作用,SAP的高端大數據系統HANA被SGI在其UV NUMA Systems上實現了良好的水平擴展
在雲計算與虛擬化方面,OpenStack與VMware已經支持基於NUMA技術的虛機分配能力,使得不同的虛機運行在不同的Core上,同時虛機的內存不會跨越多個NUMA Node