基礎:計算機是什麼
儲存程式概念(stored-program concept)
早期的機器每換一個任務就要動手重接線——要讓一台計算機做不同的計算,你得真的去移動纜線、撥動開關,得花上好幾個小時。儲存程式的想法,是讓我們從中解放的領悟:把程式本身放進機器的記憶體裡,當成資料,就擺在它要處理的數字旁邊。要執行不同的程式,你只要把不同的位元組載入記憶體,而不是重建機器。
關鍵的洞見是:指令與資料是同樣的東西——都是同一塊記憶體裡的位元。處理器從記憶體讀一條指令、照它說的做、再讀下一條,如此往復,只靠把位址往前推進。因為程式不過是位元組,機器可以讀程式、寫程式,甚至在執行時讀取並修改程式。編譯器產出一個可執行檔,作業系統把它載入記憶體去執行,這兩件事之所以可能,全因為程式被當成普通資料儲存。
這是其餘一切的根基。正是它讓同一台機器無須任何實體改動,就能跑文書處理器、遊戲與網頁瀏覽器。不過這份統一也有鋒利的一面:如果指令只是可寫記憶體裡的位元組,那麼一個錯誤或一個攻擊者只要覆寫了不該動的位元組,就能改變實際執行的是哪些指令——這是整類安全漏洞的根源。自由與危險,是同一個想法的兩面。
載入一個 app,不過是把它的指令位元組複製進記憶體;處理器接著從第一條開始讀。沒有重接線、沒有新硬體——只是跟你剛才跑的那個 app 不同的位元組而已。
程式就是資料,所以換程式只是換記憶體裡的位元組。
把指令與資料放在同一塊記憶體裡是偉大的賦能者,但這正是為什麼可寫記憶體可能反過來危害程式——許多安全防護的存在,就是為了把守這條界線。
又称
另见