AS Level 電腦科學 (9618) 學習筆記:系統軟件
歡迎來到系統軟件的世界!如果說硬件是電腦的軀體,那麼系統軟件就是讓一切運作起來的大腦與神經系統。這些關鍵程序負責管理電腦本身,讓您(以及您的應用程式)能夠真正地使用它。
在本章中,我們將拆解兩大類系統軟件:作業系統 (Operating System, OS) 以及各類語言翻譯程式 (Language Translators)。如果有些概念看起來很抽象,請別擔心——我們會透過大量比喻,確保您能輕鬆掌握!
5.1 作業系統 (Operating System, OS)
什麼是作業系統,為什麼我們需要它?
作業系統 (OS) 是最重要的系統軟件。它充當用戶/應用程式與物理硬件(CPU、記憶體、打印機、磁碟機)之間的管理者和轉譯者。
為什麼作業系統至關重要?
- 它能最大化資源利用率(確保 CPU 不會閒置)。
- 它提供用戶介面 (User Interface, UI)(如圖形用戶介面 GUI 或命令行介面 CLI),將複雜混亂的硬件細節隱藏起來,讓用戶無需編寫二進制代碼就能打開檔案!
- 它能高效地管理和控制所有任務與硬件。
作業系統的關鍵管理任務
作業系統同時執行多項關鍵管理任務。您可以將作業系統想像成一間公司的行政總裁 (CEO),協調所有部門。
記憶小撇步:要記住五大任務,請想:People Make Funny Shapes Helping. (Process 進程, Memory 記憶體, File 檔案, Security 安全, Hardware 硬件)
1. 進程管理 (Process Management) - 交通指揮官
進程 (Process) 是當前正在執行的程序。當您同時運行多個應用程式(多工處理)時,作業系統必須公平地管理它們。
- 排程 (Scheduling): 決定哪個進程可以獲取 CPU 以及使用時間的長短。
- 進程狀態 (Process States): 進程會在不同狀態間循環:執行 (Running)(正在使用 CPU)、就緒 (Ready)(等待 CPU 時間)、以及阻塞 (Blocked)(等待 I/O 操作,如等待打印機回應)。
排程常規 (Scheduling Routines)
作業系統使用不同的排程算法來分配 CPU 時間:
- 輪轉法 (Round Robin): 每個進程獲得固定的時間片。公平,但對於關鍵任務來說可能較慢。
- 最短作業優先 (Shortest Job First, SJF): 下一個執行等待時間最短的任務。最大化吞吐量,但需要預先知道作業長度。
- 先到先得 (First Come First Served, FCFS): 按任務到達的順序進行處理。簡單,但如果一個長作業先到,會導致「瓶頸」。
- 最短剩餘時間 (Shortest Remaining Time, SRT): SJF 的搶佔式版本。如果在長作業執行期間有新的、更短的作業到達,長作業會被暫停。
2. 記憶體管理 (Memory Management) - 座位安排
作業系統管理電腦的主記憶體 (RAM),確保每個運行的進程都有其所需的空間,且不會相互干擾。
- 分配 (Allocation): 為程序劃分記憶體區塊。
- 收回 (Deallocation): 當程序完成時,回收記憶體空間。
虛擬記憶體、分頁與分段
當 RAM 用完時會發生什麼?作業系統會使用虛擬記憶體 (Virtual Memory)。
- 虛擬記憶體: 一種技術,作業系統將輔助儲存裝置(如硬碟)的一部分當作 RAM 使用。這容許運行超過物理 RAM 容量的程序。
- 分頁 (Paging): 記憶體被劃分為固定大小的區塊,稱為頁 (pages)。這些頁會根據需要,在 RAM 和輔助儲存裝置之間移動。
- 分段 (Segmentation): 記憶體被劃分為大小不一的邏輯區塊(段 segments),這是根據編程人員構建代碼的方式(例如:一個段用於主程序,一個段用於數據)。
- 磁碟抖動 (Disk Thrashing): 這是使用虛擬記憶體的弊端。當頁面在 RAM 和磁碟之間頻繁交換,導致系統花費大量時間在處理交換而非執行運算時,效能會急劇下降。
3. 檔案管理 (File Management) - 圖書館管理員
作業系統控制檔案和資料夾如何在輔助儲存裝置(如 HDD 或 SSD)上儲存、命名、存取及保護。
- 維護檔案目錄結構。
- 處理讀/寫存取權限。
4. 硬件管理 (Hardware Management) - 翻譯官
也稱為輸入/輸出 (I/O) 管理。作業系統協調所有硬件裝置(打印機、鍵盤、屏幕)。
- 使用裝置驅動程式 (Device Drivers)—讓作業系統與特定硬件溝通的特殊軟件組件。
- 管理緩衝區 (Buffers)(臨時儲存區域),以處理裝置間的速度差異(例如:逐步輸出打印數據,而不會阻塞 CPU)。
5. 安全管理 (Security Management) - 保安
作業系統保護系統資源和數據免受未經授權的存取。
- 使用用戶帳戶和密碼。
- 管理存取權限(例如:唯讀、讀寫、執行)。
作業系統管理Processes (進程)、Memory (記憶體)、Files (檔案)、Security (安全) 以及 Hardware/I/O (硬件)。目標是達到最高效率並隱藏硬件複雜性。
公用軟件 (Utility Software)
公用軟件是指旨在幫助維護、優化和保護電腦系統的系統程序。
隨作業系統提供的常見公用軟件:
- 磁碟格式化工具 (Disk Formatter): 透過建立必要的檔案結構和尋址系統,準備磁碟(硬碟、USB)以進行數據儲存。
- 病毒檢測程式 (Antivirus): 掃描、偵測並移除惡意軟件。
- 磁碟重組工具 (Defragmentation Software): 將硬碟上的檔案片段進行物理重組,使數據連續存放。這能加快存取速度。(註:對 SSD 的重要性較低。)
- 磁碟檢查/修復工具 (Disk Contents Analysis/Repair): 檢查磁碟的物理結構是否有錯誤(壞軌),並嘗試復原丟失的數據。
- 檔案壓縮工具 (File Compression): 縮小檔案大小,節省儲存空間並減少傳輸時間(例如:ZIP 檔)。
- 備份軟件 (Back-up Software): 將檔案或整個系統的複本複製到輔助儲存裝置,以防災難恢復。
程式庫 (Program Libraries) - 可重複使用的代碼
程式庫是一組預先寫好、經過測試的代碼常規(如函數或程序),開發者可以將其引入自己的程式中。
- 對開發者的好處: 它們節省了時間、精力和除錯工作,因為他們不需要從零開始編寫常見功能(如排序列表或計算對數)。
- 動態連結庫 (DLL) 檔案: 這是常見的庫檔案(特別是在 Windows 中),包含許多程式會用到的常規。它們只在程式需要時才載入記憶體,而不是永久編譯進執行檔中。
冷知識:使用 DLL 可以節省磁碟空間和 RAM,並允許程式輕鬆更新——只需替換 DLL 檔案,而無需重新安裝整個程式。
5.2 語言翻譯程式 (Language Translators)
當人類編寫代碼時,我們使用高級語言 (HLL) 如 Python 或 Java,這些語言易於我們閱讀。然而,CPU 只能執行機器碼 (Machine Code)(二進制)。
語言翻譯程式是彌補這一差距的系統軟件工具,負責將人類可讀的代碼轉換為機器可執行的代碼。
翻譯程式類型
1. 組譯程式 (Assembler) - 針對低級代碼
- 用途: 將組合語言 (Assembly Language) 程序翻譯成機器碼。
- 特點: 組合語言非常接近機器碼(它使用助記符如 ADD 和 MOV)。翻譯過程通常是簡單的 1 對 1 指令對應。
2. 編譯程式 (Compiler) - 書籍翻譯者
- 用途: 在程式執行前,將整個高級語言原始碼檔案一次性翻譯成一個獨立的執行檔 (Executable File)(機器碼)。
- 處理階段:
- 詞法分析 (Lexical Analysis): 將原始碼分解為標記(如關鍵字和識別符等可識別單元)。
- 語法分析 (Syntax Analysis): 檢查標記是否遵循該語言的語法規則(若在此發現錯誤,編譯會停止)。
- 代碼生成 (Code Generation): 產生目的代碼(機器碼)。
- 優化 (Optimisation): 嘗試使生成的代碼更有效率(速度更快或體積更小)。
編譯程式的優點:
- 編譯後,程式執行速度非常快。
- 不需要原始碼即可執行(保護知識產權/原始碼安全性)。
- 錯誤在程式執行前就會被識別。
編譯程式的缺點:
- 編譯過程可能很慢。
- 除錯較困難,因為錯誤通常指向原始碼,而非執行檔。
3. 直譯程式 (Interpreter) - 同步翻譯者
- 用途: 在程式執行期間,逐行、逐條指令地翻譯並執行高級語言程式。
- 特點: 不會產生獨立的執行檔;每次運行程式時都必須有原始碼在場。
直譯程式的優點:
- 非常適合除錯,因為程式在發現錯誤時會立即停止,並清楚指出錯誤行。
- 代碼具備高度可移植性——相同的原始碼可以在任何安裝了對應直譯器的平台上運行。
直譯程式的缺點:
- 執行速度較慢,因為每一行在每次運行時都要被重新翻譯(尤其是在迴圈內部)。
- 必須提供原始碼(安全性較低)。
比較與選擇 (編譯器 vs. 直譯器)
- 使用編譯器的情況: 速度至關重要(例如:作業系統、商業遊戲)且原始碼安全性很重要。
- 使用直譯器的情況: 程式用於測試、學習,或者可移植性至關重要(例如:網頁腳本、教育環境)。
部分翻譯(混合方法): 一些語言,如 Java(控制台模式),既不是純粹編譯,也不是純粹直譯。它們首先被編譯成中間形式(稱為字節碼 bytecode),然後在執行期間由虛擬機(如 Java 虛擬機)進行直譯。這在可移植性和速度之間取得了平衡。
請記住:編譯器將整個程式翻譯一次,建立永久的執行檔。直譯器則是在每次程式執行時,逐行進行翻譯。
整合開發環境 (Integrated Development Environment, IDE)
IDE 是一個為程式設計師提供全面軟件開發工具的應用程式。它將基本工具整合到一個介面中,就像一個專業的工作室。
典型 IDE 的關鍵功能:
1. 編寫功能
- 語境敏感提示 (Context-sensitive prompts): 在開發者輸入時自動建議關鍵字或變數名稱,加快編寫速度並減少拼寫錯誤。
2. 初步錯誤偵測 (語法)
- 動態語法檢查: 在開發者輸入代碼時立即檢查語法規則,並即時標示錯誤(如缺少分號或結構錯誤)。
3. 呈現功能
- Prettyprint: 自動格式化代碼(縮排、空格、顏色標記),使其更易於閱讀。
- 程式碼塊摺疊: 允許開發者隱藏部分代碼(如程序主體),以專注於整體結構。
4. 除錯功能
這些工具幫助開發者發現並修復錯誤 (Bugs):
- 單步執行 (Single stepping): 允許開發者逐行執行程式,仔細觀察邏輯流程。
- 中斷點 (Breakpoints): 在代碼中設置執行暫停點,允許開發者檢查特定時刻的程式狀態。
- 變數與表達式檢視視窗: 在中斷點顯示變數當前值或表達式結果的面板,有助於追蹤邏輯錯誤。
本章小結:系統軟件
系統軟件是任何電腦的基礎層。作業系統負責管理所有資源(P, M, F, S, H)並提供必要的公用軟件以進行維護。語言翻譯程式(組譯程式、編譯器、直譯器)確保人類編寫的代碼能轉換為機器碼。最後,IDE 為開發者提供了一個強大的環境,以便高效地編寫和除錯代碼。