基礎:計算機是什麼
編譯器與作業系統的角色(the role of the compiler and operating system)
硬體只懂一件事:機器碼,也就是符合 ISA 的原始位元。人這一邊,卻想寫出可讀的程式,並一次跑很多支,而不必對晶片事必躬親。有兩塊軟體架起這道鴻溝,坐落在人類意圖與裸矽之間:編譯器,把我們寫的程式翻成機器碼;以及作業系統,管理硬體並讓眾多程式分享它。
編譯器是個翻譯者:它把以 C 或 Python 等高階語言寫成的程式,轉成目標 ISA 所定義的組合語言與機器指令,選用哪些指令,並設法讓結果又快又小。它是從人類可讀的程式碼通往硬體/軟體介面的橋樑。作業系統是管理者兼裁判:它把程式載入記憶體並啟動它們,決定每一刻由哪支程式佔用處理器,透過虛擬記憶體分配記憶體,掌控輸入輸出裝置,並隔離各程式,使一次當機或一個惡意行為者無法破壞其他程式——這些服務,程式透過系統呼叫取用。
這兩者合起來,就是直接坐落在硬體之上的軟體層,也是為什麼一般程式設計師很少需要想暫存器、中斷或分頁表。它們也形塑硬體本身:鐵律裡的指令數,大半是編譯器的傑作,而作業系統依賴特權層級與記憶體管理單元等硬體特性。結構與系統軟體是協同設計的——各自都知道對方存在而被打造,這正是為什麼研究這台機器,意味著要同時認識兩者。
你用 Python 寫 print('hi');編譯器或直譯器把它變成機器指令,作業系統則把程式載入、排程到處理器上,並透過系統呼叫把它的輸出送到螢幕——這些你都不必親自交代。
編譯器負責翻譯;作業系統負責管理並分享硬體。
它們是軟體而非硬體,卻是與結構協同設計的:編譯器善用 ISA,作業系統倚靠硬體支援(特權層級、MMU)。少了它們,你無法完整理解這台機器。
又称
另见