當前位置: 妍妍網 > 碼農

記憶體條是怎麽儲存數據的

2024-05-21碼農

作者:小道蕭兮
連結:https://www.jianshu.com/p/0aa5c09b2a6b

一、如何儲存數據

由於保存數據的重要性,科學家一直在思考,在電路中使用何種方式可以保存數據。

如果使某個器件一直輸出高電平,那不就是 1 了嗎?一直輸出低電平,那不就是 0 了嗎?而且還要可以自由切換 0 和 1。

接下來,記憶體條閃亮登場。

二、RAM

記憶體條還有一個更專業的名字:RAM ( R andom A ccess M emory) 隨機記憶體,因為可以隨意讀寫任意位置的數據。

現在電腦基本上都是二進制的,不管什麽樣的數據或者程式碼指令,在我們這裏都是一串串的 0 和 1 的位元位。

為了儲存這一個位元位,曾經有兩種電路方案擺在先輩們的面前,第一種是靜態方案:

是不是有點復雜?我也覺得。這種電路方案的好處是可以穩定的維持在 0 和 1 之間的某個狀態,所以叫靜態 SRAM (Static Random Access Memory)。

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

還有第二種方案:

這樣是不是簡單了許多?只透過一個電容器的電荷就能決定這是一個 1 還是一個 0,這樣就儲存了 1bit。

在每一個儲存芯片裏,這樣的位元位儲存單元都有很多,例如一個 16G 的記憶體條有 137438953472 bit,也就是有 137438953472 個這樣的電容。

但這種電路方案有個毛病,就是裏面的那個電容會「漏電」,電容中的電荷會慢慢消失,電壓也就變小了,這樣就沒辦法區分這是表示的 1 還是 0 了。

為了解決這個問題,必須得周期性的去給它們充電,才能維持數據的穩定,這叫動態數據重新整理,所以這種方案叫 DRAM (Dynamic Random Access Memory)。

三、記憶體控制器

當我們需要讀取數據時,要存取哪個 bit 位,透過芯片號、bank 號、行地址、列地址,就可以了。

是不是有點麻煩,這些內部細節應該封裝一下,提供給一個簡單介面就是了,於是 記憶體控制器 登場了。

記憶體控制器就像一個中介,位於 CPU 與 記憶體條之間。

記憶體儲存數據的電路單元中,電容經常漏電,需要定時重新整理,按照規定,最多 64ms 就得要重新整理一次,這數據重新整理的工作就由記憶體控制器管理。

記憶體條的數據儲存在每一個儲存芯片之上,每一個芯片裏面又分了很多個分片,每個分片裏面又有很多的位元位儲存格子。想要存取哪個位元位,就得指定對應的芯片、對應的分片、對應格子的行地址和列地址。

CPU這邊想要存取數據,肯定不想這麽麻煩,所以記憶體控制器就派上用場了。

用 bit 作為讀寫單元太麻煩了,咱們按 8 bit 為一組,叫做一個字節 byte,CPU 統一給記憶體的儲存空間編址,以後要讀取數據的時候呢,就把地址交給記憶體控制器,再告訴記憶體具體是讀寫哪個芯片哪個分片的哪些位置。

以後只需要一個地址,記憶體控制器就轉換成具體的數據儲存位置,去讀取記憶體,再由記憶體完成讀寫操作就可以了。

由於記憶體控制器的重要性,現在,記憶體控制器已經整合到了 CPU 內部,成為了 CPU 的一份子了。

隨著 CPU 的發展,CPU 的速度越來越快,開始嫌記憶體慢了,要說慢,硬碟那可比記憶體慢多了!於是在 CPU 內部又搞了個緩存出來,不用每次都問記憶體要數據,而是把一些常用的數據儲存在 CPU 內部的緩存中。

只不過 CPU 內部的緩存不會太大,僅存放一些常用的數據,大部份數據還是需要透過記憶體進行讀取。