⑴ 內存顆粒可以手動焊接嗎
第一步---拆:看完了晶元的大概樣子,我們就要決定要拆除這種BGA封裝的晶元了。我們不考慮拆除過程中對內存晶元旁邊的器件和背面的器件的影響(因為拆除這個晶元的過程,不可避免的要對旁邊的器件和背面的器件產生影響)。
①需要的工具:熱風槍,鑷子(這里先不考慮專用的BGA焊接台來拆除);
②需要注意的事項:防高溫,防靜電,防MSD(潮濕敏感)--這個太復雜,先不講;
③過程:將熱風槍調整到300-350度檔,對晶元本體均勻加熱(加熱過程需要不停的移動,使晶元底下所有焊球都融化),加熱過程中用鑷子夾住晶元往上拉,加熱到差不多的時候,就可以將晶元拔下來了。
④可能的結果:加熱過程中旁邊的PCB和器件損壞燒黑燒壞,內存晶元本身損壞等等。
第二步---BGA和對應焊盤的清潔:
①需要的工具:烙鐵、酒精、吸錫線;
②注意事項:注意過程中不要破壞掉焊盤;
③過程:用烙鐵清除焊盤上多餘的錫,使用吸錫線清洗、拉平焊盤,用酒精將PCB焊盤清洗干凈;
然後用烙鐵清除BGA上多餘的錫,使用吸錫線清洗、拉平焊盤,用酒精將PCB焊盤清洗干凈;
④術語:吸錫線是一款專用的維修工具它的出現大大減少了電子產品的返工/修理的時間,並極大程度地降低了對電路板造成熱損傷的危險。精密的幾何編織設計保證了最大的表面張力和吸錫能力;
第三步---BGA植球:
①需要的工具:植球鋼網,對應大小的焊球,夾具,加熱台。如下圖舉例(植球鋼網,焊球):
②注意事項:注意定位不要偏移,注意每個孔裡面都要有焊球;②注意事項:注意定位不要偏移,注意每個孔裡面都要有焊球;
③過程:BGA固定在夾具上,刷上少量助焊劑,蓋上鋼網並對位,在鋼網上倒上對應大小錫球,來回晃動使錫球進行網孔;檢查每一焊盤是否有錫球 ;BGA放在高溫布上,移至加熱台上進行焊接(加熱台設定溫度260度); 加熱一段時間OK後,BGA焊球與BGA晶元焊接在一起。然後冷卻,准備下一步。
④可能結果: 漏球--需要重新來,沒焊接完成--需要重新來,偏移--需要重新來;
第四步:BGA(已經植球OK)與PCB之間焊接:
①需要的工具:BGA焊接台(這個要幾萬RMB,主要看功能);
這個的步驟就不說了,很復雜。包括光學的對位,加熱的曲線和時間,上下加熱溫度的設定,操作的技巧等等。這個的步驟就不說了,很復雜。包括光學的對位,加熱的曲線和時間,上下加熱溫度的設定,操作的技巧等等。當然第一步拆晶元的時候也用到這個設備是最好的!
以上就是手動焊接的具體步驟,技術要求很高,一般不建議自己來做.
⑵ 內存條掉落了一個電阻,請問如何焊上去
可以使用烙鐵頭小一點的電烙鐵焊好即可,一定焊接要快。
⑶ DIY高手請進啊!!!主板上有空餘的內存條焊接位,可以自己焊接嗎
你的想法很好,你可以自己嘗試一下。不過焊接後也不見得能夠使用,因為還有BIOS的問題需要處理。如果不更改BIOS讓北橋內存控制器能夠訪問新焊接上的內存插槽的話,肯定是不能使用的。除非廠家BIOS設計的時候本來就是設計的4根內存插槽。另外主板都是多層板,如果你是用烙鐵來焊接。。。。。小心一點。
⑷ 內存條的基礎知識
介面類型,是根據內存條金手指上導電觸片的數量來劃分的。金手指上的導電觸片,也習慣稱為針腳數(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