1. 程式人生 > >儲存器這個小話題(1)

儲存器這個小話題(1)

什麼是儲存器

儲存器, 想必大家都多少接觸過, 電腦的硬碟、 記憶體條、 手機的 ROM、 SD 卡、 microSD卡、 光碟還有古董級別的軟盤等等, 都是我們能夠說得出來的儲存器。 那麼儲存器是什麼, 又是怎麼樣分類的呢?

儲存器是計算機系統(包括嵌入式系統)中的記憶裝置, 用來存放程式(二進位制可執行檔案)和資料。 計算機中的全部資訊, 包括輸入的原始資料、 計算機程式、 中間執行結果和最終執行結果都儲存在儲存器中。 儲存器實際上有兩個單詞: 一個是Memory, 另一個是Storage。 開始時 Memory 指的通常就是 CPU 可以直接通過匯流排訪問的隨機存取儲存器(RAM), 而 Storage 指得就是 CPU 無法直接通過匯流排訪問的非易失性儲存器(ROM、 Flash、 硬碟)。 Wiki 百科上還有這麼一段話, 可以參考一下:

「Historically, memory has been called core memory, main memory, real storage or internal memory. Meanwhile, non-volatile storage devices have been referred to as secondary storage, external memory or auxiliary / peripheral storage. 」

譯:「從傳統上來說, memory 被稱為核心 memory,主 memory, 實 storage 或者內部 memory。 對比之下, 非易失性 storage 裝置則指代二級 storage

、 外部 memory 或者輔助 / 次要 storage。

從 Wiki 的這段話中可以看到, 傳統意義上的 Memory 就是指 RAM, 等同於 Internal Memory 和 Main Memory, 所以有些地方就把 Memory 翻譯成記憶體。不過隨著儲存器的發展,這種說法變得並不準確。 比如我們在哈佛結構計算機中的一些 ROM 雖然是非易失性儲存器,但與 CPU 是通過匯流排直接相連的,可以作為 Internal Memory。 這說明一些 storage 也同樣可以作為內部儲存器使用, 尤其是近些年來 Flash Memory 的發展。 所以我們這裡就不區分這兩個單詞了, 我們對儲存器的分類也不會使用這種說法。 這裡我們瞭解一下就可以了, 純粹當做擴充套件知識罷了。

儲存器的分類

儲存器分類的方法有很多, 比如按照儲存介質可分為: 半導體儲存器、 磁表面儲存器、 光儲存器、 磁芯儲存器(磁芯儲存器被半導體儲存器取代了, 詳細可查閱參考資料 [2])和紙帶儲存器(這也是老古董了)。 我們計算機裡常使用的機械硬碟就屬於磁表面儲存器, 還有磁帶(錄音帶)、 古董級的軟盤等; 光儲存器就是常見的光碟了, 實際上光碟的種類也很多: CD-ROM、 CD-R、 CD-RW、 DVD等。 如果對於它們的區別有興趣的話可以檢視參考資料 [3], 這裡就不作詳細講解了; 現在大部分的儲存器都是半導體儲存器, 硬碟也有被固態硬碟(固態硬碟是俗稱, 這種叫法是因為在 PC 機上固態硬碟和硬碟使用了相同的介面, 它實際上使用的是快快閃記憶體儲器)取代的趨勢。

內部儲存器和外部儲存器

按照儲存介質對儲存器進行分類不是本篇博文要討論的重點, 下面我們會從內部和外部的角度儲存器分為內部儲存器(Internal Memory)和外部儲存器(External Memory), 同時也讓讀者重新認識一下我們現在使用的儲存器。

內部儲存器

內部儲存器是「CPU可以直接定址/訪問的儲存器」,可以簡稱為記憶體,注意記憶體並不是指在系統內部的儲存器。在生活中記憶體這個詞的指向是很混亂的, 比如把硬碟容量叫作記憶體, TF / SD卡叫作記憶體卡等。給讀者一個建議, 慎用記憶體這個詞, 使用時要指向明確, 尤其是在論文當中。記憶體包含主儲存器(Main Memory, 可以簡稱為主存)、 快取記憶體(Cache暫存器(Register)。 快取記憶體和暫存器分別是整合在 SoC 和 CPU 內部, 它們更像是「內部的內部儲存器」, 有些地方說記憶體時不包括快取記憶體和暫存器。 但是 CPU 是可以直接訪問它們的,所以我就把它歸到記憶體部分了。 我們可以用下圖來表示:

                                                                             

從圖上可以看到我把 Internal Memory(內部儲存器)和 Main Memory(主儲存器)的概念分開了。 個人認為這一種分法更加接近我們現有的儲存器體系。 主儲存器包括 RAM(Random Access Memory, 隨機訪問儲存器)和部分ROM(Read-Only Memory)。 

一般在 PC 機(馮·諾依曼機)中, 主存指的是 RAM, 而一些嵌入式系統中,主存包括ROM。 ROM 可以作為記憶體也可以作為外部儲存器, 關鍵是看它是否能被 CPU 直接定址。 

暫存器則是 CPU 的組成部分, 由一些鎖存器和觸發器構成, 它通常儲存一個字(Word, 計算機資料匯流排位長)的資料或者指令, CPU對其的訪問速度非常快。 

快取記憶體通常包括一級快取(L1 Cache)和二級快取(L2 Cache), 部分 CPU 還有三級快取(L3 Cache)。 現在的快取記憶體基本上都整合在 SoC 內部,而不需要像 RAM 一樣需要外部晶片。 快取記憶體的目的就是為了解決解決 CPU 運算速度與主存讀寫速度不匹配的矛盾, 從而提高計算機系統的效能。 它的讀寫速度要比CPU 暫存器慢, 但是遠大於 CPU 對主存的訪問速度。 

上述三者訪問速度可以表示如下:主存 < 快取記憶體 < 暫存器

外部儲存器

外部儲存器是「不通過匯流排直接與 CPU 相連, CPU 需通過主存間接訪問的儲存器。 外部儲存器可以簡稱為外存, 也可以稱為二級儲存器或者輔助儲存器(輔存), 外存可以分為 磁表面儲存器、 光儲存器 (準確的來說應該是所有的磁表面儲存器和光儲存器都是外存, 如果有例外的, 歡迎指正)和快快閃記憶體儲器(Flash Memory, 快閃記憶體)一小部分快閃記憶體可以作為記憶體ROM使用, 同樣看它是否能被CPU直接定址。 可以用下圖來表示外存的分類:


圖中快閃記憶體我只寫了一種, 但實際上快閃記憶體這個家族是十分龐大的, 在《儲存器這個小話題(2)》和《儲存器這個小話題(3)》二文中我會進行更加詳細的分類, 比如 RAM 和 ROM 的分類、 快閃記憶體的分類

看完了上述對儲存器的分類, 我想你應該大致理解了儲存器是一個怎樣的東西, 然後我們就可以進一步理解計算機儲存器結構了, 下圖是計算機的三級儲存體系結構圖(注意 Cache 的位置可能也可能在 CPU 內部):


2017 年 1 月 24 日

Kilento


參考資料