CPU 只能從記憶體中載入指令,因此執行程式必須位於記憶體。通用計算機執行的大多數程式通常位於可讀寫記憶體,稱為
記憶體(main memory),也稱為
隨機存取記憶體(Random Access Memory,RAM)。記憶體通常為動態隨機存取記憶體(Dynamic Random Access Memory,DRAM),它採用半導體技術來實現。
計算機也使用其他形式的記憶體,如我們已經提到的唯讀記憶體(ROM)和電可擦可程式化唯讀記憶體(EEPROM)。由於 ROM 不可修改,因此只能將靜態程式(如載入程式)存在其中。ROM 的不可變性對遊戲盒來說還是有用的。EEPROM 可以修改,但是不能經常修改,因此可以儲存大多數的靜態程式,例如,智慧手機採用 EEPROM 來儲存工廠安裝的程式。
所有形式的記憶體都提供位元組陣列,每個位元組都有地址。互動通過針對特定記憶體地址,執行一系列 load 或 store 指令來實現。指令 load 將記憶體位元組或字儲存到 CPU 暫存器,而指令 store 將暫存器內容儲存到記憶體。除了明確使用 load 和 store 外,CPU 還會自動載入記憶體指令以便執行。
在馮•諾依曼體系結構(von Neumann architecture)上執行時,一個典型的指令執行週期是,首先從記憶體中獲取指令,並存到指令暫存器(instruction register)。接著,該指令被解碼,也可能會從記憶體中獲取運算元據並且存到內部暫存器。在指令完成對運算元據的執行後,結果也可存到記憶體。
注意,記憶體單元只能看到記憶體地址的流,而並不知道它們如何產生(通過指令計數器、索引、間接、常數地址或其他方式)或它們是什麼樣(指令或資料)的地址。相應地,我們可以忽略程式如何產生記憶體地址,而只關注由程式執行所生成的地址序列。
在理想情況下,程式和資料都應永久駐留在記憶體中。由於以下兩個原因,這是不可能的:
-
記憶體通常太少,不能永久儲存所有需要的程式和資料。
-
記憶體是易失性的(volatile)儲存裝置,掉電時就會失去所有內容。
因此,大多數的計算機系統都提供外存(secondary storage)來擴充記憶體。外存的主要需求是,能夠永久儲存大量資料。最為常用的外存裝置為
硬碟或
磁碟(Hard Disk Drive,HDD),它能儲存程序和資料。大多數程式(系統與應用)都儲存在磁碟上,當要執行時才載入到記憶體。許多程式都使用硬碟作為它們處理的起點和終點。因此,磁碟儲存的管理是否適當,對計算機系統來說十分重要(這將在後續章節中加以討論)。
從更廣意義上來說,以上所述的儲存結構(由暫存器、記憶體和磁碟組成的),僅僅只是多種儲存系統的一種。除此之外,還有快取記憶體、CD-ROM、磁帶等。每個儲存系統都可儲存與儲存資料,以便以後提取。各種儲存系統的主要差異是速度、價格、大小和易失性。
圖 1 儲存裝置的層次