電腦記憶體

記憶體（memory）是電腦中能接收和存儲數據，並能根據控制命令提供所存數據的基本硬體。現代的電腦系統以存儲器為中心，故存儲器的特性是影響整個電腦系統最大吞吐量的決定性因素。

存儲器又分為主存儲器（main memory，簡稱「記憶體」）和輔助存儲器（auxiliary memory，簡稱「儲存」、「儲存體」）。主存儲器與中央處理器（CPU）一起構成主機，用來存放電腦運行時隨時需要使用的程序和數據，一切數據要被CPU操作都必須先裝入主存。主存的工作速度較快，存儲容量較小，主要採用半導體存儲器。目前大部分電腦系統的主存儲器主體為動態隨機存儲器（DRAM），「主存儲器」乃至「存儲器」一詞有時特指DRAM；另外，靜態隨機存儲器（SRAM）與只讀存儲器（ROM）等也可作主存儲器的一部分。輔助存儲器和輸入輸出設備都屬於外設，用來存放CPU運行時暫時不用的各種程序和數據，一般在斷電後仍能保存。輔助存儲器的存儲容量大，工作速度慢，例子如硬碟、U盤、光碟、磁帶等。

除了可分為主存儲器和輔助存儲器外，存儲器還可按存儲介質分為半導體存儲器、磁表面存儲器、磁芯存儲器和光碟存儲器等，按存取方式分為隨機存儲器、只讀存儲器、串行訪問存儲器等。

傳統上，一部電腦最重要的元件是中央處理器（CPU），因為他負責處理資料，進行所有計算，並且控制電腦內其他所有元件。中央處理器包含兩個部分: 控制單元 以及算術邏輯單元（ALU）。前者控制資料在中央處理器及記憶體之間的流動。後者處理資料的邏輯運算。如果沒有足夠的記憶體，電腦將只能進行固定的工作而且立刻將結果輸出。這在電腦及數位訊號處理是可接受的。馮·諾伊曼結構機器擁有足夠的記憶體去儲存正在執行的指令集以及資料。結果使電腦不用為了執行一個新的程式而改變硬體的配置，使程式設計變得簡單，大部分的電腦都是范紐曼型架構。

## 記憶體的特性

<image>

所有的記憶體都可以用其核心的特性以及可以用測量而得知的效能，容量來區分。核心的特性有揮發性，讀寫性，存取法，以及定址法。測量得知的特性有效能跟容量。

### 容量

<image>

電腦使用二進制來處理數據。文件，數字，圖形，影音，或是其他資料都可以用一串位元來表示，每一個位元的值不是一就是零。最常見的儲存單位是位元組，一位元組等於八位元。一份資料可以被任何具有足夠容量去容納該資料大小的電腦所處理。

根據電氣電子工程師協會（IEEE 1541）和歐洲聯盟（HD 60027-2:2003-03）的標準，二進制乘數詞頭的縮寫為「Ki」、「Mi」、「Gi」，以避免與國際單位制混淆。但二進制乘數詞頭沒有廣泛被製造業和個人採用，標示為4GB的記憶體實際上已經是4GiB，但標示為4.7GB的DVD實際上是4.37GiB。

對於32位元的作業系統，最多可使用232個地址，即是4GiB。物理地址擴展可以讓處理器在32位元作業系統存取超過4GiB記憶體，發展64位元處理器則是根本的解決方法，但作業系統、驅動程式和應用程式都會有相容性問題。

### 揮發性

非揮發性記憶體: 資料在電源不供電的狀態下仍能保存。這適用於須長期使用的資料。

揮發性記憶體: 資料需要有持續不斷的電力才能保持。目前存取速度最快的記憶體是屬於揮發性的。因為第一級記憶體需要極快的速度，所以採用揮發性記憶體。

動態隨機存取記憶體（DRAM）:一種揮發性記憶體，資料需要每隔一段時間就重新讀取或重新寫入，否則資料將會消失。eDRAM

靜態隨機存取記憶體（SRAM）:一種類似DRAM的記憶體。不同的是在電力持續供應的狀態下，它不用被重新寫入或是讀取資料（如果沒有電力來支持，資料還是會消失）。

### 讀寫性

可讀寫的記憶體:它允許資料在任一時間被覆寫。如果一台電腦的第一級記憶體不是可讀寫的，那這台電腦將無法執行各種任務（至少要有一定數量的第一級記憶體是可讀寫的）。而第二級記憶體也有許多是可讀寫的。

唯讀記憶體:記憶體內的資料通常不會變，但有時允許資料寫入（Write once read many）這種記憶體也被叫做不可變記憶體，主要備用在第三級跟離線記憶體上，例如CD-ROM以及CD-R。

快速讀取低速寫入記憶體:例如CD-RW和快閃記憶體。

### 存取法

隨機存取:在任何的時間，任何的位置都可以被存取。這適合第一級與第二級記憶體。

循序存取:要存取的資訊依照順序來存取，一個接著一個; 存取時間長短取決於哪一項資料是最後存取的，這是離線記憶體的特徵。

### 定址法

區塊定址:根據記憶體區塊的物理地址來存取資料。在今日的電腦，區塊定址通常只出現在第一級記憶體，由電腦程式來存取，而且存取的效率很高，不過對人而言這是個負擔。

檔案定址:資料被分割成檔案，檔案依照人類可讀的名稱或檔案名稱而被選擇，其實這也是一種區塊定址，不過作業系統會將檔案抽象化，從而讓工作更容易被理解。在今日的電腦，第二級，第三級，離線記憶體採用這種方法來定址。

內容定址:資料依據本身的內容被存取。內容定址被使用於軟體或硬體，這讓硬體變得有效率，但也變得比較昂貴。硬體內容定址記憶體通常被用於CPU快取。

### 效能

遲滯時間: 存取儲存器內部特定區域資料所花的時間。在第一級記憶體中，以奈秒作為合理的計量單位，第二級記憶體以毫秒作為計量單位，以秒作為第三級記憶體的計量單位或是。遲滯時間可以合理的分為讀取的遲滯時間和寫入的遲滯時間，以循序存取儲存器來說，有最短、最長與平均遲滯時間。

吞吐量:將資料讀取到或是寫出記憶體的速度。吞吐量通常表示為百萬位元組/秒或是MB/s，位元率也被使用著。就跟遲滯時間一樣，讀和寫的速度算做兩筆不同資料。存取資料的速度取決於最大吞吐量。

粒度: 能以單獨一個單位被有效率的存取的最大片資料的大小, 例如, 沒有引發更多的遲滯時間。

可靠度:在不同的條件下，非自發性的位元值改變, 或整體故障率。

## 分類

直至2008年，最常用的數據儲存技術是半導體、磁性、光學，同時還看到一些使用紙張作儲存。也有一些曾於過去使用或是在將來會使用的數據儲存技術。市場上存在多種不同形態、不同材質的存儲器。到目前為止，任何一種儲存裝置都有其缺點，因此一台電腦通常都有好幾種不同種類的儲存裝置，每一種都有其特別的功能。

電腦記憶體可以根據儲存能力與電源的關係可以分為以下兩類：

### 揮發性記憶體

揮發性記憶體（Volatile memory）是指當電源供應中斷後，記憶體所儲存的資料便會消失的記憶體。主要有以下的類型：

- 隨機存取記憶體
- 動態隨機存取記憶體，英文縮寫寫作DRAM，一般每個單元由一個電晶體和一個電容組成（後者在積體電路上可以用兩個電晶體模擬）。特點是單元占用資源和空間小，速度比SRAM慢，需要刷新。一般電腦主記憶體即由DRAM組成。在PC上，DRAM以記憶體條的方式出現，DRAM顆粒多為4位或8位位寬，而載有多個顆粒的單根記憶體條的位寬為64位。
- 靜態隨機存取存儲器，英文縮寫寫作SRAM，一般每個單元由6個電晶體組成，但近來也出現由8個電晶體構成的SRAM單元。特點是速度快，但單元占用資源比DRAM多。一般CPU的CPU緩存即由SRAM構成。

### 非揮發性記憶體

非揮發性記憶體（Non-volatile memory）是指即使電源供應中斷，記憶體所儲存的資料並不會消失，重新供電後，就能夠讀取記憶體中的資料。

主要種類如下：

- 唯讀記憶體（ROM）
- 可規化式唯讀記憶體（PROM）
- 可擦除可規劃式唯讀記憶體（EPROM）
- 電子抹除式可複寫唯讀記憶體（EEPROM）
- Flash ROM
- 磁儲存
- 硬碟
- 軟碟
- 磁帶
- 3D XPoint
- 固態硬碟
- 光儲存
- 光碟

## 記憶體階層

實際上，幾乎所有電腦都有各種不同的記憶體，這些記憶體在中央處理器旁邊，構築成記憶體階層，在效率和花費兩者之間的拉鋸中，在階層中較低層的記憶體，頻寬較低，而且資料到中央處理器的時間也較久，遲滯時間較長。傳統上分第一級，第二級，第三級，離線記憶體。

### 第一級記憶體

第一級記憶體（又稱主記憶體或內部記憶體），通常簡稱為記憶體，這層的記憶體與中央處理器直接連通，中央處理器會不斷讀取儲存在這裡的指令集，並在需要時執行這些指令集。

歷史上，早期的電腦使用延遲線，威廉士管作為主要的儲存器。在1954年，磁芯記憶體被開發出來大幅取代了上述不太穩定的方法。磁芯記憶體維持優勢至1970年代，此時積體電路技術的進步，使得半導體記憶體在價格上變得便宜而有競爭力。

這使得現代化的隨機存取記憶體（RAM）被製造出來。該款記憶體的重量輕，尺寸小，然而十分昂貴。這種記憶體被用來做成第一級記憶體，同時它也是揮發性記憶體，意思就是當電力不再供應時，記憶體內的資料就會消失。

如同右圖所示，在第一級記憶體的內部除了主記憶體，也就是隨機存取記憶體外，還分有兩個或兩個以上的子層:

- 暫存器被設置在處理器內。每個暫存器都儲存資料中的一個字（一個字的大小通常是32位元或64位元）。中央處理器內的指令能讓 算術邏輯單元 去執行各種計算或是處理資料。暫存器傳輸資料的速度是所有記憶體中最快的。
- CPU快取，它傳輸資料的速度僅次於暫存器。被用來作為提升電腦的效能。大部分經常被使用的資料，會複製另一份存在快取記憶體內，這樣可提升速度，否則速度將會大幅降低，且暫存器也容納不下那麼多資料。多層快取階層亦經常被使用—第一層快取容量最小，速度最快且位於處理器內部；第二層快取容量較大且較慢。

主記憶體藉記憶體匯流排與中央處理器連接。有兩種不同的匯流排：位址匯流排以及資料匯流排。一開始中央處理器藉位置匯流排傳送數字，這數字就是記憶體位置，其指出資料的位置。然後中央處理器用資料匯流排將資料讀出或寫入。此外，記憶體管理單元（MMU）是一種介於中央處理器跟主記憶體的裝置，用來重新計算記憶體位置，例如提供虛擬地址。

由於RAM具有揮發性，這樣的話電腦就無法儲存開機時需要的指令，因此，非揮發性記憶體儲存了執行開機的程式（BIOS），為了讀取較大的程式，先自第二層的非揮發性記憶體讀取到隨機存取記憶體，然後執行程式。一種記憶體因著這目的被製出，就是唯讀記憶體（唯讀記憶體也是屬於隨機存取）。

許多唯讀記憶體並不僅僅只能讀取，雖然速度慢，但資料還是可以抹除並重新寫入。一些嵌入式系統直接使用唯讀記憶體來跑程式，因為程式幾乎不會變化，現在的電腦將資料存於第二層非揮發性的記憶體，而非唯讀記憶體，這是比較經濟的做法。

### 第二級記憶體

<image>

第二級記憶體，又稱外部記憶體或輔助記憶體，和第一級記憶體不同的是，第二級記憶體和中央處理器並沒有直接連通，電腦經常使用記憶體的I/O通道來與之連接，第二級記憶體使用資料緩衝器來將資料傳送至第一級記憶體。在不供應電源的情況下，第二級記憶體的資料仍然不會消失—這表示它是非揮發性的。

現今的電腦，硬碟被廣泛地做為第二層記憶體，硬碟存取資料的時間大約是幾千分之一秒，或是幾個毫秒。然而，隨機存取記憶體存取資料的時間僅有幾十億分之一秒，或是幾個奈秒。硬碟的速度只有記憶體存取速度的百萬分之一，光碟，例如CD和DVD，有更長的存取時間。

當資料儲存於碟片時，將資料傳送到區塊可降低遲滯時間，提升效率，這樣的話需要外部記憶體演演算法。連續存取和區塊存取的速度比隨機存取要快得多，所以許多尖端的記憶體都在開發更有效率的演演算法來執行連續存取或區塊存取。一個突破I/O瓶頸的方法是使用多重磁碟，可以增加第一級與第二級記憶體之間的頻寬。

這裡列舉一些第二級記憶體的例子：快閃記憶體（例如隨身碟和固態硬碟）、軟碟、磁帶、紙帶、打孔卡、RAM disk、Zip Drive。

第二級記憶體通常被設計成符合文件系統的格式，這使得資料可以儲存在目錄和電腦檔案內。

大部分的作業系統使用了虛擬記憶體的概念，第一級記憶體的物理容量雖然不變，但可以藉挪用第二級記憶體的空間來增大第一級記憶體的容量。系統會將最少使用到的區塊移至第二級記憶體（置換檔案或分頁檔案），當這些檔案被需要時再將它們取回，當愈多檔案需要從第二級記憶體中取回，電腦的效能就愈低。

### 第三級記憶體

第三級儲存裝置或第三級記憶體, 這是指可直接插入或自電腦拔除的儲存裝置；裡面的資料在被使用前通常都會複製到第二級記憶體內。該款記憶體的存取速度比第二級記憶體要慢得多（5–60秒，相較於1–10毫秒）。該款記憶體的優勢在於其擁有龐大的儲存空間，典型的例子包含磁帶櫃和光學記錄庫。

## 外部連結

- How Computer Memory Works , by Jeff Tyson