計算機五大組件,已經介紹完了輸入輸出設備。從前面幾篇中我們了解到,計算任務實際上就是控制單元控制執行單元根據輸入和存儲器中內容計算得到輸出結果,控制單元和執行單元比較復雜,運算時也需要使用到存儲器,所以本篇先展開存儲器相關知識。
1. RAM原理
如果你還能記得,第一篇電學知識中我們提到過S-R觸發器(Flip Flop,簡稱FF)。
總的來講,觸發器的工作狀態依賴于兩個開關S和R,閉合一個斷開另一個,總會得到兩個相反的輸出Q和Q',而如果兩個開關都斷開,那么就保持住Q和Q’最后處于什么狀態。完整觸發器真值表如下:
通過使用S-R觸發器或其類似實現版本,可以實現1個bit的存儲。而通過組合使用S-R觸發器,就可以達到多個bit的存儲,也就是RAM的由來,而其組成部分中的每個觸發器則被稱為存儲單元。
內存單元的主要職責是保存存儲在其中的數據直到下一次設置或重置操作的出現,現今廣泛使用的RAM主要有靜態RAM(Static RAM)和動態RAM(Dynamic RAM)兩種。
1.1 SRAM
SRAM直接使用6個晶體管內存單元的狀態來存儲1 bit數據,造價相比DRAM更貴,但同時帶來的好處是比DRAM擁有更快的存取速度和更低的能耗。通常用于CPU內部的Cache中。
1.2 DRAM
與SRAM的全晶體管內存單元不同的是,DRAM搭配一個晶體管和一個電容器來保存1 bit數據。其中電容器負責存儲,晶體管負責控制存取操作。
同樣的,第一篇中捎帶提到電容器原理,從中我們知道電容器由于會對空氣放電的因素,內部電勢差會逐漸衰減。也就是說,存儲其中的1 bit值,如果放任不管,不知道哪次去讀取時,就會從1變成0了,這就無法實現存儲的功能。為了隨時都能夠爭取獲取其中保存的值,就必須經常對電容就行充電,也稱刷新。
根據能量守恒定律,充電需要額外供電,因此DRAM功耗肯定是要比SRAM大的。同時,由于需要經常刷新DRAM,存取速率也自然比不上SRAM。那還造DRAM干嘛?因為DRAM電路簡單許多,可以擁有非常高的密度,單位體積的容量較高因此成本較低。總的來說就是因為便宜且速率可接受。這沒什么不好,權衡利弊,夠用就行。
2. RAM在哪里
前面講的都是原理,具體到計算機組件應用之前,先放一張CPU使用到的存儲器層級圖,稍后將依次展開。
從圖中我們可以看出,RAM屬于臨時存儲區,它和CPU之間至少還間隔著幾層Cache,RAM下方是永久性存儲區域。永久性存儲區域之前提到過如光盤、硬盤等,但這個Cache又是什么?
2.1 Cache
前面提到過Cache使用的是高大上的SRAM,擁有速度快、功耗低的特點。快自然是件好事,我們也知道囊中羞澀,無法給CPU配上幾個GB的SRAM作為RAM使用,只能退而求其次,換上速度一般但容量客觀的DRAM。不過有句話說得好,好鋼用在刀刃上,假如說配個小容量如KB、MB級別的SRAM能夠提高系統性能,還是值得嘗試的。
隨著硬件的發展,CPU頻率早已達到GHz級別,而同期的DRAM還在以MHz作為單位,先不去追究為什么DRAM無法提升至GHz級別,就說使用時,這種量級的頻率差異確實拖慢了整個計算機的性能。
之前略微提到,CPU工作時是有指令周期的,指令只是操作方法,要想操作有意義,畢竟還是要有操作對象才行的。操作對象來自哪里?無論是輸入設備也好,光盤、硬盤也罷,終究是要加載到RAM中,排好了地址,才能加載。如果因為從內存中加載拖慢了CPU的運行,那么這么肆意地浪費CPU資源就太過奢侈了,畢竟CPU也不便宜啊。
但辦法終歸還是有的,于是乎在CPU和DRAM之間,插入了小存儲的SRAM,畢竟CPU每個指令周期操作的對象也有限,無需特別大的空間。這樣一來,CPU對接SRAM,速率得到了大大提升。不過現在還沒完,快是快了,但我想更快,又不舍得花太多的錢,只好分配下預算,買一些頂級SRAM,再買一些稍慢一點的,再買一些慢的DRAM。反正CPU不和低一級的SRAM直接對接,也不會影響太大。
于是就有了多個Level的Cache,費勁心機,無非就是想在預算有限的條件下達到更快。
2.2 內存(RAM)
內存也稱為主存,使用的是DRAM內存單元。由于前面介紹了SRAM和DRAM的主要區別等相關知識,這里就不再贅述。只要有一個概念,就是到RAM為止,都是掉電就丟失數據的。也就是說,RAM只在計算機運行過程中保存數據,運行完畢斷電后,不負責保存任何信息。
然而為了實現計算機自動化執行任務,就必須先將任務存儲在計算機內部而不是每次都需要輸入設備輸入,因此對于永久性存儲設備的需求十分強烈。
2.3 永久性存儲器
如前面CPU存儲器層級圖所示,永久性存儲器主要分為如下幾種。
2.3.1 ROM
首先講ROM,ROM全稱Read Only Memory,顯而易見是一種只讀存儲器,其內容在出廠前就已經固化進去,后續只能讀取而不能再次寫入。雖然后面出現別的可擦寫ROM如(EPROM),但終歸寫入的條件如紫外線要求較高。
ROM存儲在一個非易失性芯片上,即使掉電后其中內容依舊可以保存。比較廣泛的使用場景是計算機BIOS,關于BIOS的部分在后續講解操作系統時會詳細講述。
2.3.2 Network Storage
所謂網絡存儲,就是通過網絡接口進行存取。比如通常網吧會使用無盤計算機以節約成本,這時候啟動系統的任務就交給了網線而不是磁盤。再比如,不考慮緩存文件的情況下,在線查看郵箱,并不會因為本機掉電而使得郵箱內郵件丟失。
雖然從本機看起來,不需要依賴存儲磁盤,但終歸網絡另一端提供服務的計算機仍然需要磁盤來獲取源數據,因此不管雞生蛋還是蛋生雞,至少能確定,必須有雞才行,而在這里,雞就是磁盤存儲。
2.3.3 Hard Drive
終于到了永久性存儲中的重頭戲,硬盤存儲。硬盤也稱為磁盤,還是要來那么一句,如果你看了第一章的電學知識的話,那么你應該能理解為什么要通過磁來實現存儲。

硬盤之所以成為磁盤是因為它通過改變盤片上磁性的分布來實現存儲,讀取時再根據盤片磁性分布轉換成電信號,并進一步成為二進制值。這其中的原理無非是電磁感應,電生磁、磁生電。
講到硬盤,總有關于柱面、扇區、磁頭的內容,本篇也不能免俗。
如圖所示,磁道是兩個同心圓間區域,該區域等分成扇區,每個扇區字節數為512B。所有盤片上的同一磁道構成柱面,由于磁頭為機械裝置,如頻繁尋址則開銷較大,因此寫入數據時,就以柱面為單位,盡量減少機械裝置的移動頻率。
到這一步,似乎所有正兒八經點的資料都能給出,但有一點,由于盤片是一張圓盤,也就是說,越往外的磁道在盤片轉動單位時間內走過的路程越多,也就是說相對靠內的磁道,其尋址速度更快。因此通常將操作系統安裝在靠外柱面可以適量提升其響應速度,對應到Windows也就是C盤位置通常最靠外,其他盤符依次往內。
由于磁頭是機械裝置,既降低了存取速度,又降低了穩定性,如果存取過程中由于震動盤片被磁頭劃傷,那數據就可能出現錯誤。假如出現錯誤的數據正好是操作系統,那么就只有自認倒霉了。
2.3.4 固態硬盤SSD
正是因為磁盤存在速度、穩定性等因素,和Cache一樣,我們又制造出一種新的硬盤,成為固態硬盤。
對比下就可以發現,SSD使用的是集成電路而非機械裝置來存取,所以可以達到更高的存取頻率,也不用再為可能出現的震動操心。比較顯著的缺點就是目前成本仍然較高、同時存在寫入次數有限的問題。為了保證數據的安全性,通常SSD內部會使用多個內存單元來存儲一個bit,即以冗余來換穩定。
3. 總結
寫到這里,關于計算機五大組件之一的內存部分就基本介紹完畢。還是那句話,內存的存在是實現了計算機自動執行任務的關鍵。下一篇中,將去啃啃包含了控制單元和執行單元的真正的硬骨頭CPU。