1. 程式人生 > >一個故事看懂記憶體條工作原理

一個故事看懂記憶體條工作原理

我是記憶體條

我是一個記憶體條,剛剛從深圳的一個工廠裡被生產出來,跟我一起的還有一批小夥伴,長得跟我一模一樣,下了流水線後我們就被扔進了一處黑暗的角落。

“這是哪裡啊,黑漆漆的”,一個小夥伴說到。

“這裡是記憶體條倉庫”,黑暗中有人在說話,聲音中略有一絲滄桑,像是一個老頭。

 

“誰?誰在那裡”

“別怕,我也是一個記憶體條,比你們早幾個月被生產出來”,那老頭說到。

“啥,你都被關在這裡幾個月了,完了完了”,小夥伴急了。

“不是的,我出去過,後來被發現是殘次品,又被回收了關在了這裡,你們跟我不一樣,剛剛生產出來,應該很快就能出去,被安裝到電腦主機板上,實現你們的價值。”

“電腦主機板?那是什麼地方?”,我好奇的問到。

那聲音繼續說到:“那是計算機最核心的地方,是一個巨大的電路板,上面住著CPU、硬碟、網絡卡、顯示卡、音效卡,當然,還有我們記憶體條。計算機必須有我們才能正常運轉,因為CPU工作需要的指令和資料都儲存在咱們記憶體中”

剛說完,我們身邊亮起了燈光,這時,我們才看清我和小夥伴們的樣子。

“我們身上那幾塊黑乎乎的東西是什麼,真是有點拉低顏值啊!”

“你可別小瞧了它們,那可是咱們記憶體條的核心儲存晶片,我們的資料都是放在這裡面的,它們一個就是1GB,總共16個,就是16GB的空間呢!”,那老頭又開口說到。

奇怪的是,我們還是看不到他。

“你在哪裡,怎麼亮了燈還是看不到你呢?”,一個小夥伴問到。

“我在隔壁的櫃子裡,像我這種殘次品估計是沒機會出去了”

“你剛才說16個儲存晶片,這不是明明只有8個嗎?”

“你轉過身去看看,背上還有8個呢”

我們幾個紛紛轉身看去,果然如此。

老頭繼續說到:“除了儲存晶片,還有PCB電路板和金手指,這三部分共同構成了我們的身體。”

“金手指是什麼東西?”

“就是腳下那一排土豪金顏色的部分了,那是我們連線主機板插槽的接觸點,一面有120個,兩面就是240個,因為每個點看起來像手指,人們就把這叫做金手指了”。

“那為什麼中間留了一個缺口呢?”

“我們的每個金手指都有不同的功能,正反面可不能弄混,為了防止愚蠢的人類把我們插錯,所以中間留了一個缺口,要是弄反了可是插不進去的。通過主機板上的電路,我們就能接通到計算機的匯流排系統上,可以和CPU對話了。”

原來如此,我們都若有所思的點點頭。

資料儲存

接下來,這位老頭還講了很多我們記憶體條先輩的故事。

原來,我們還有一個更專業的名字:RAM,隨機儲存器,因為我們可以隨意讀寫任意位置的資料。

老頭還說,現在計算機基本上都是二進位制的,不管什麼樣的資料或者程式碼指令,在我們這裡都是一串串的0和1的位元位。

為了儲存這一個位元位,我們的先輩們可是費了不少功夫!

曾經有兩種電路方案擺在先輩們的面前,第一種是靜態方案:

是不是很複雜?我也覺得。這種電路方案的好處是可以穩定的維持在0和1之間的某個狀態,所以叫靜態SRAM。

但是需要用到的電晶體實在太多了,一個位元位就要用好幾個電晶體,16GB那得用多少才夠啊,成本太高了,造出來我們的個頭肯定會特別大,主機板上空間這麼侷促,哪裡裝得下啊。

先輩們沒有選擇這種方案,用了第二種方案:

看,是不是簡單了許多?通過一個電容器的電荷就能決定這是一個1還是一個0。

在我們身上的每一個儲存晶片裡,這樣的位元位儲存單元都有很多:

 

再縮小一下看,它們密密麻麻的排列著,每一個位都由行地址和列地址來確定的:

 

圖源知乎@老狼

但這種電路方案有個毛病,就是裡面的那個電容會“漏電”,電容中的電荷會慢慢消失,電壓也就變小了,這樣就沒辦法區分這是表示的1還是0了,為了解決這個問題,必須得週期性的去給它們充電,才能維持資料的穩定,這叫動態資料重新整理,所以這種方案叫動態DRAM。

記憶體編址

老頭正給我們講的興起,突然有人把我們打包起來,所有的小夥伴都被分開了。

又經過了好長一段日子的黑暗和孤獨,那一天突然咔嚓一聲,我的金手指和卡槽連線了起來,難道這就是傳說中的主機板嗎?

 

“你就是記憶體啊,我們可等你好久了,你來了我們總算可以開始工作了!”,旁邊一個傢伙跟我打起了招呼。

“你哪位啊?”

“你好,我是CPU裡的阿Q,你看就在你隔壁,咱們以後少不了要天天打交道了。對了,快告訴我,你有多大儲存空間?”

我檢查了一下,回答道:“我有16GB空間,也就是137438953472個位元位!”

“哇,這麼多!太給力了!不過我該怎麼使用你來儲存資料呢?”

“這簡單,你要訪問哪個bit位,告訴我晶片號、bank號、行地址、列地址,我把資料取給你不就行了嗎!”

“怎麼這麼麻煩?你這不講武德啊,這些內部細節應該封裝一下啊,提供給我一個簡單介面就是了”,阿Q吐槽道。

“兩位大哥,看這裡”,這時,主機板上不遠處又有一個傢伙開口了。

“你是誰?”我和阿Q異口同聲的問到。

這傢伙眯著眼說到:“我是記憶體控制器,專門為二位服務的。”

“啥,你要控制我?”

“您別誤會,我就是一箇中介,為兩位提供服務而已”

見我倆一頭霧水,這傢伙接著說到:“記憶體老哥,你的儲存資料電路單元中的電容是不是經常漏電,需要定時重新整理?而且按照規定,最多64ms就得要重新整理一次?你放心,這資料重新整理的工作以後就交給我了”

“你怎麼知道的?”

這傢伙笑了笑繼續說道:“這算啥,我還知道你的資料儲存在你身上的每一個儲存晶片之上,每一個晶片裡面又分了很多個分片,每個分片裡面又有很多的位元位儲存格子。想要訪問哪個位元位,就得指定對應的晶片、對應的分片、對應格子的行地址和列地址,我說的對不對?”

 

我點了點頭,沒想到這傢伙居然對我瞭解的這麼清楚。

“阿Q啊,你們CPU這邊想要訪問資料,肯定不想這麼麻煩吧?”,這傢伙笑著問到。

“那當然!”

“所以啊,我就派上用場了啊,用位元位作為讀寫單元太麻煩了,咱們按8個位元位為一組,叫做一個位元組,你們CPU這邊統一給記憶體兄弟的儲存空間編址,以後要讀取資料的時候呢,就把地址交給我,我再告訴記憶體兄弟具體是讀寫哪個晶片哪個分片的哪些位置,怎麼樣,是不是為你們解決了大麻煩?”,說完,記憶體控制器露出了得意的笑容。

“聽上去不錯啊,咱們開始吧!”

“現在還不行,還沒通電呢!”

不過我們沒等太久,就聽見一陣嘶嘶聲響,來電了!

隨後我們就開始配合工作起來,初次見面,合作的就非常順利,CPU對我所有的儲存位按照位元組為單位進行了統一編址,以後只需要一個地址,記憶體控制器就轉換成具體的資料儲存位置交給我,我再完成讀寫操作就可以了。

後來,看到記憶體控制器表現非常不錯,在阿Q的牽線下,還把他整合到了CPU內部,現在成為了他們的一份子了!

我和CPU一直相處的不錯,可沒過多久,他們居然開始嫌我慢了,要說慢,硬碟那傢伙可比我慢多了!

他們發現拿我沒有辦法,於是在CPU內部又搞了個快取出來,不用每次都問我要資料,倒是給我省了不少工作量。

我的日子就這樣過著,本以為就要在這主機板上幹到退休了,沒想到那一天,一個瀏覽器程式告訴我說:“記憶體大哥你完了,剛剛我看到主人在網上買新的DDR4記憶體條,你要被淘汰了”

難道我也要被打入小黑屋了嗎?

往期TOP5文章

我是Redis,MySQL大哥被我害慘了!

CPU明明8個核,網絡卡為啥拼命折騰一號核?

一個故事看懂Docker容器技術

主機板上來了一個新鄰居,CPU慌了!

雜湊表哪家強?幾大程式語言吵起來了!

&n