基礎:機器模型

儲存程式型電腦(stored-program computer)

以下就是讓現代電腦得以成真的那一個關鍵想法:電腦把它的資料和指令放在同一塊記憶體裡,全都以數字的形式存在。食譜(程式)和食材(資料)擺在同一個架子上,用同一種墨水寫成。要執行不同的程式,你不必把機器重接線路——只要把不同的數字載入記憶體,讓 CPU 去讀就行。

在這個想法出現之前,早期機器要為每個新任務實際重接線路或撥動開關來「程式化」。儲存程式的設計則改說:把一串指令以一連串數字的形式存進記憶體,用一個標記(計數器)指著下一條指令,再讓 CPU 反覆地——取出計數器所指的那個數字、照它說的去做、然後把計數器往前推。因為指令不過是記憶體裡的數字,一個程式甚至能讀取、產生或修改另一個程式——而這正是編譯器、直譯器與作業系統在做的事。

為何重要:這是本領域一切所立足的基礎。它解釋了為何記憶體在系統程式設計中如此核心、為何一次失控的寫入能像覆蓋資料一樣輕易地覆蓋程式碼,以及為何「載入一個程式」不過就是把它的位元組複製進記憶體、再把 CPU 指向起點。你這輩子會去寫程式的幾乎每一台機器,從這個意義上講都是儲存程式型電腦。

在記憶體裡,「把這兩個數相加」這條指令的位元組,和那兩個被加的數字的位元組長得一模一樣——都只是位元組。CPU 把指令計數器指到的東西當作程式碼,把其餘的當作資料,即便它們在實體上毫無差別。

程式碼與資料共用同一塊記憶體;讓位元組成為「程式碼」的,只是 CPU 去執行了它們。

因為程式碼住在可寫的記憶體裡,有缺陷或惡意的程式原則上能覆寫指令——這是當機與漏洞的真實來源。現代系統會把程式碼記憶體標記為唯讀以對抗它,但程式碼與資料合一的底層模型依然不變。

又稱
stored-program concept儲存程式概念