歡迎來到作業系統的世界!

你有沒有想過,電腦是如何同時播放音樂、下載檔案並讓你撰寫論文的呢?這就是作業系統 (Operating System, OS) 的魔法。你可以把作業系統想像成忙碌餐廳的經理。它雖然不親自下廚,但它確保廚師(CPU)有足夠的食材(資料),服務生(輸入/輸出)知道該做什麼,而顧客(使用者)也能獲得滿意的服務。

在這些筆記中,我們將詳細拆解這位「經理」是如何讓一切順暢運作的。如果有些部分看起來很複雜也不用擔心,我們一步一步來!

1. 作業系統的目的與功能

作業系統是一種介於使用者與硬體之間的系統軟體 (system software)。沒有它,你連移動滑鼠都必須撰寫複雜的程式碼!

作業系統主要有四項工作:
資源管理 (Resource Management): 決定哪些程式可以使用 CPU,以及分配多少記憶體給它們。
使用者介面 (User Interface, UI): 提供與電腦互動的方式(例如視窗、圖示或命令列)。
周邊裝置管理 (Peripheral Management): 處理輸入(鍵盤)和輸出(印表機)設備。
安全與檔案管理 (Security and File Management): 整理你的檔案,並透過密碼保護它們。

快速回顧: 作業系統是使用者與硬體之間的「橋樑」。

2. 記憶體管理

你的電腦 RAM 容量有限。作業系統必須小心地管理這些空間,以防止程式之間發生「衝突」。它主要透過兩種方式來達成:

分頁 (Paging)

記憶體會被劃分為固定大小的實體區塊,稱為頁 (pages)。當一個程式需要載入 RAM 時,它會被切分成這些頁面。
類比:想像一本有固定頁數的筆記本。你可以將你的故事寫在多頁上,即使它們在書中並非相連。

分段 (Segmentation)

記憶體會被劃分為大小不一的邏輯區域,稱為段 (segments)。這些區段代表程式的組成部分(如特定的函式或資料結構)。
類比:就像書中的章節。根據內容長度,有些章節很長,有些則很短。

虛擬記憶體 (Virtual Memory)

當 RAM 完全用盡時,作業系統會將硬碟的一部份當作額外的 RAM 使用,這就是虛擬記憶體。它會將暫時不用的頁面從 RAM 移到硬碟,為活躍的程式騰出空間。
常見誤區: 學生常以為虛擬記憶體能讓電腦變快。事實上,它反而會讓電腦變慢,因為讀取硬碟的速度遠比讀取 RAM 慢得多!

重點總結: 分頁使用固定大小;分段使用邏輯大小;虛擬記憶體則是 RAM 滿載時的「備援」空間。

3. 中斷與中斷服務常式 (ISR)

中斷 (interrupt) 是一個發送給 CPU 的訊號,意思是:「嘿!有重要的事情發生了!」這可能是印表機紙張用完了,或是你點擊了滑鼠。

CPU 處理中斷的方式:
1. 在每次 Fetch-Decode-Execute (提取-解碼-執行) 週期結束時,CPU 會檢查是否有中斷訊號。
2. 如果有中斷,CPU 會暫停 (suspends) 當前的任務。
3. 它會儲存當前的狀態(暫存器內容),以便稍後能回來繼續處理。
4. 它會執行一小段稱為中斷服務常式 (Interrupt Service Routine, ISR) 的程式碼來處理該問題。
5. 完成後,它會載入舊的狀態,並從中斷的地方繼續執行。

記憶小撇步:把中斷想像成寫功課時接到的電話。你會在書中夾個書籤(儲存狀態),去講電話(執行 ISR),然後回到書中同一行繼續閱讀(恢復狀態)。

4. 排程 (Scheduling)

由於 CPU 通常一次只能做一件事情,作業系統會使用排程來決定哪個行程 (process) 獲得 CPU 的使用時間。這創造了「多工處理」的錯覺。

常見的排程演算法:
輪轉排程 (Round Robin): 每個行程獲得平等的「時間片段」。如果沒處理完,它就必須回到隊伍的最後面。(非常公平!)
先來先服務 (First Come First Served, FCFS): 最先抵達的工作最先被處理。(簡單,但長工作可能會阻塞所有後續程序)。
最短工作優先 (Shortest Job First, SJF): 所需時間最少的工作優先處理。(對速度有利,但長工作可能永遠無法獲得執行機會——這稱為飢餓狀態 (starvation))。
最短剩餘時間 (Shortest Remaining Time, SRT): 類似 SJF,但如果有更新、更短的工作進來,它會踢走當前正在執行中的工作。
多層回饋佇列 (Multi-level Feedback Queues): 使用多個具有不同優先級的佇列。工作可以根據它們使用的 CPU 時間長短在佇列間移動。

快速回顧: 排程確保了 CPU 的高效使用,並且沒有任何行程會被無限期擱置。

5. 作業系統的類型

並非所有作業系統都一樣!你需要了解以下幾種:
分散式 (Distributed): 將任務分攤到多台電腦上。它們像是一台單一且強大的機器般協同工作。
嵌入式 (Embedded): 內建在特定裝置中(如微波爐或汽車儀表板)。它通常只高效執行單一任務。
多工 (Multi-tasking): 允許使用者同時執行多個應用程式(如 Windows 或 macOS)。
多使用者 (Multi-user): 允許多個使用者同時操作同一台電腦(如強大的伺服器)。
即時 (Real-Time): 保證在特定時間限制內做出反應。用於關鍵系統,例如飛機自動駕駛醫院監護儀

你知道嗎?「即時」作業系統並不一定代表「速度快」。它代表的是「一致性」。如果它需要在 2 毫秒內回應,它就必須每一次都在 2 毫秒內做出回應。

6. BIOS、驅動程式與虛擬機器

BIOS (基本輸入/輸出系統)

當你開啟電腦時,BIOS 是第一個執行的程式。它會執行 POST (開機自我測試) 來檢查你的硬體是否運作正常,然後尋找並啟動作業系統。

裝置驅動程式 (Device Drivers)

驅動程式是一個小型程式,充當翻譯官。它告訴作業系統如何與特定的硬體(如新款電競滑鼠或印表機)溝通。

虛擬機器 (Virtual Machines, VM)

虛擬機器是指使用軟體來模擬一台實體電腦。
範例 1: 在 Mac 上的視窗中執行 Windows。
範例 2:中間程式碼。 像 Java 這類的語言不會立即轉為機器碼,而是轉為「位元組碼 (Bytecode)」,並在「Java 虛擬機器」上執行。這意味著相同的程式碼可以在任何裝置上運行!

重點總結: BIOS 啟動電腦;驅動程式為硬體進行翻譯;虛擬機器則是「假裝」是一台電腦。

摘要核對表

你能解釋嗎...
分頁 (Paging)分段 (Segmentation) 的區別?
• 當中斷 (interrupt) 發生時會發生什麼事?
• 為什麼維生設備使用即時 (Real-Time) 作業系統?
虛擬記憶體 (Virtual Memory) 的用途?

如果一開始覺得困難也不要擔心!作業系統同時處理成千上萬個任務,內容確實很多。多讀幾次這些比喻,你很快就會成為專家!