主記憶體:配置、連結與分段

記憶體階層(the memory hierarchy)

想想你依照拿取頻率把東西放在哪裡。手上的筆是瞬間可得的。桌上的筆記本要花一秒。抽屜裡的資料夾要久一點。地下室箱子裡的東西則要專程跑一趟。這些做法都沒有錯;你把最常用的東西放得最近,因為近代表快,但既貴又小,而遠處的儲存則慢卻便宜又巨大。電腦安排它的記憶體,方式一模一樣。

從作業系統的角度看,由最快最小到最慢最大的層級大致是:CPU 的暫存器(數十個字組,一個時脈週期內就能存取)、快取(小,位於晶片上或附近)、主記憶體或 RAM(數十億位元組,電子速度快但仍比快取慢很多),以及作為後備儲存的磁碟或 SSD(巨大且便宜,但慢得多)。對記憶體管理而言最關鍵的事實是:CPU 只能直接從暫存器和主記憶體讀取並執行指令。它無法直接從磁碟執行程式碼或載入運算元。所以程式要執行所需的任何東西,都必須先被搬進主記憶體。

為什麼重要:這條單一規則塑造了本領域的一切。因為 CPU 只從 RAM 工作,作業系統必須在程式執行前把它的程式碼和資料放進 RAM,必須在 RAM 滿了時決定保留什麼,並且必須在磁碟之間搬移資料(置換)。這個階層也解釋了為什麼一次未命中快取、跑到 RAM 的記憶體存取就已經算慢,而為什麼一次必須跑到磁碟的存取則慢得災難性——大約相差十萬倍以上。

粗略的存取時間:暫存器遠少於 1 奈秒、L1 快取約 1 奈秒、主記憶體約 100 奈秒,而硬碟需數百萬奈秒(數毫秒)。CPU 只從最上面兩層執行。

往下走每一步大約慢一個數量級——而跳到磁碟那一步差距極其巨大。

CPU 與 RAM 之間的快取由硬體管理,不是作業系統;作業系統的記憶體管理主要掌管主記憶體與磁碟後備儲存。不要把快取和主記憶體混為一談。

又称
storage hierarchy儲存階層