內(nèi)存條還有一個(gè)更專業(yè)的名字: RAM(隨機(jī)存取存儲(chǔ)器),因?yàn)樗鼈兛梢栽谌魏挝恢秒S機(jī)讀寫數(shù)據(jù)。
現(xiàn)在的計(jì)算機(jī)基本上都是二進(jìn)制的,所以無(wú)論什么數(shù)據(jù)或代碼指令,在我們這里都是一連串的0和1的比特。為了存儲(chǔ)這一個(gè)比特,在先驅(qū)者面前曾經(jīng)有兩種電路方案,第一種是靜態(tài)方案:即
這是不是有點(diǎn)復(fù)雜?我想是的。這種電路方案的優(yōu)點(diǎn)是在0和1之間保持穩(wěn)定的狀態(tài),因此被稱為靜態(tài)隨機(jī)存取存儲(chǔ)器(SRAM)。但它需要太多的晶體管,一個(gè)比特就需要幾個(gè)晶體管。16GB太多,而且成本太高。有第二個(gè)選擇:
這樣是不是簡(jiǎn)單了許多?只通過(guò)一個(gè)電容器的電荷就能決定這是一個(gè) 1 還是一個(gè) 0,這樣就存儲(chǔ)了 1bit。
在每一個(gè)存儲(chǔ)芯片里,這樣的比特位存儲(chǔ)單元都有很多,例如一個(gè) 16G 的內(nèi)存條有 137438953472 bit,也就是有 137438953472 個(gè)這樣的電容。
但這種電路方案有個(gè)毛病,就是里面的那個(gè)電容會(huì)“漏電”,電容中的電荷會(huì)慢慢消失,電壓也就變小了,這樣就沒(méi)辦法區(qū)分這是表示的 1 還是 0 了。
為了解決這個(gè)問(wèn)題,必須得周期性的去給它們充電,才能維持?jǐn)?shù)據(jù)的穩(wěn)定,這叫動(dòng)態(tài)數(shù)據(jù)刷新,所以這種方案叫 DRAM (Dynamic Random Access Memory)。
內(nèi)存控制器就像一個(gè)中介,位于 CPU 與 內(nèi)存條之間。
CPU 這邊想要訪問(wèn)數(shù)據(jù),肯定不想這么麻煩,所以內(nèi)存控制器就派上用場(chǎng)了。
用 bit 作為讀寫單元太麻煩了,咱們按 8 bit 為一組,叫做一個(gè)字節(jié) byte,CPU 統(tǒng)一給內(nèi)存的存儲(chǔ)空間編址,以后要讀取數(shù)據(jù)的時(shí)候呢,就把地址交給內(nèi)存控制器,再告訴內(nèi)存具體是讀寫哪個(gè)芯片哪個(gè)分片的哪些位置。
以后只需要一個(gè)地址,內(nèi)存控制器就轉(zhuǎn)換成具體的數(shù)據(jù)存儲(chǔ)位置,去讀取內(nèi)存,再由內(nèi)存完成讀寫操作就可以了。
由于內(nèi)存控制器的重要性,現(xiàn)在,內(nèi)存控制器已經(jīng)集成到了 CPU 內(nèi)部,成為了 CPU 的一份子了。
隨著 CPU 的發(fā)展,CPU 的速度越來(lái)越快,開始嫌內(nèi)存慢了,要說(shuō)慢,硬盤那可比內(nèi)存慢多了!于是在 CPU 內(nèi)部又搞了個(gè)緩存出來(lái),不用每次都問(wèn)內(nèi)存要數(shù)據(jù),而是把一些常用的數(shù)據(jù)存儲(chǔ)在 CPU 內(nèi)部的緩存中。
只不過(guò) CPU 內(nèi)部的緩存不會(huì)太大,僅存放一些常用的數(shù)據(jù),大部分?jǐn)?shù)據(jù)還是需要通過(guò)內(nèi)存進(jìn)行讀取。