系統程式、連結器與載入器 (System Programs, Linkers, and Loaders)
本系列文章內容參考自經典教材 Operating System Concepts, 10th Edition (Silberschatz, Galvin, Gagne)。本文對應章節:Section 2.4 System Services、2.5 Linkers and Loaders、2.6 Why Applications Are Operating-System Specific。
2.4 系統服務 (System Services)
在 2.1 節,我們看到 OS 透過系統呼叫對外提供各種服務。但對於大多數使用者而言,他們從來不會直接呼叫 open()、read() 這類系統呼叫,他們使用的是更高一層的東西:系統程式 (System Programs),又稱系統工具 (System Utilities)。
系統程式是隨 OS 一起提供的一組便利工具,為程式的開發與執行提供一個友善的環境。有些系統程式只是在系統呼叫上包了一層外殼(如 cp、ls),有些則複雜許多,需要大量的應用邏輯(如文字編輯器、編譯器)。從使用者的角度來看,使用者對 OS 的印象,幾乎完全由這些系統程式決定,而不是由底層的系統呼叫決定。
七大類系統程式
系統程式可以按功能分成七大類:
檔案管理 (File Management):建立、刪除、複製、重新命名、列印、列示、存取與管理檔案和目錄。UNIX 的 cp、mv、rm、ls 都屬於這一類。
狀態資訊 (Status Information):向使用者回報系統狀態,包括日期、時間、可用記憶體與磁碟空間、使用者數量等。較複雜的工具提供詳細的效能分析、日誌記錄、除錯資訊。在多數系統中,這些工具的輸出會格式化後印到終端機、GUI 視窗或日誌檔中。部分系統還提供登錄檔 (Registry),用於儲存和查詢 系統的配置資訊(Windows 的 Registry 是最典型的例子)。
檔案修改 (File Modification):可供建立與修改儲存裝置上檔案內容的文字編輯器(如 vi、nano、Notepad),以及搜尋檔案內容或執行文字轉換的特殊指令(如 grep、sed、awk)。
程式語言支援 (Programming-Language Support):常見程式語言(C、C++、Java、Python)的編譯器 (Compiler)、組譯器 (Assembler)、除錯器 (Debugger) 和直譯器 (Interpreter),通常隨 OS 一起提供,或可透過套件管理器另行下載。
程式載入與執行 (Program Loading and Execution):程式被編譯或組譯後,必須被載入記憶體才能執行。OS 提供絕對載入器 (Absolute Loader)、可重定位載入器 (Relocatable Loader)、鏈結編輯器 (Linkage Editor) 等工具,以及針對高階語言或機器語言的除錯系統。本文 2.5 節將詳細介紹連結器與載入器的完整工作流程。
通訊 (Communications):在行程、使用者和電腦系統之間建立虛擬連線 (Virtual Connections) 的工具。使用者可以透過這類工具傳送訊息到其他使用者的螢幕、瀏覽網頁、收發電子郵件、遠端登入其他機器,或在機器之間傳輸檔案。
背景服務 (Background Services):許多系統程式在開機時就被啟動,在背景持續執行,直到系統關機。這類長期執行的系統程式稱為服務 (Services)、子系統 (Subsystems) 或精靈 (Daemons)。
Daemon 是在背景持續執行、等待請求的系統程式,使用者通常感知不到它們的存在。典型例子包括:
- 網路連線監聽精靈:持續等待網路連線請求,將請求轉發給對應的行程(2.3.3.5 節提到的 network daemon)
- 排程精靈:依照預定時間表啟動行程(如 Linux 的
cron) - 系統錯誤監控服務:監聽並記錄系統錯誤事件
- 列印伺服器:管理列印佇列與印表機資源
一台典型系統同時執行數十個 Daemon。此外,某些 OS 會選擇在 User Mode(而非 Kernel Mode)執行一些重要活動,這時就需要 Daemon 來代為執行這些活動。
應用程式 (Application Programs)
除了系統程式,多數 OS 還附帶一批解決常見問題的應用程式 (Application Programs):網頁瀏覽器、文字處理器、試算表、資料庫系統、編譯器、統計分析套件、遊戲等。
這些應用程式不屬於 OS 的一部分,但它們進一步豐富了使用者對「這個 OS」的整體印象。以 macOS 為例,使用者看到的不只是系統呼叫和核心,而是整個 Aqua GUI 環境、Finder、Safari 等一整套應用程式生態。