作業系統(OS)是什麼?它在電腦和手機裡做些什麼
作業系統(OS)是統一管理CPU、記憶體、儲存空間等零件的基本軟體。它負責安排,讓許多App依照順序和規則,安全地共用這些零件。代表例子有電腦的Windows、macOS、Linux,以及手機的Android、iOS。
這篇文章可以了解
- 作業系統在做什麼,和App有什麼不同
- 許多App同時執行的機制,以及記憶體的分配方式
- 「核心(kernel)」的意思,以及從按下電源到作業系統開始運作的過程
- App為什麼依作業系統而不同,以及更新為什麼重要
先備知識:不需要。如果知道CPU是「執行程式指令的零件」、記憶體是「放置工作中資料的地方」,會比較容易閱讀。
生活中的例子
手機跳出「有軟體更新」。電腦打開電源,先出現標誌,再出現登入畫面。App的說明寫著「支援Windows 11」。在這些場合出現的,就是「作業系統」。
作業系統是我們每天在用、卻很少注意到的軟體。這篇文章會一項一項來看它在背後做的工作。
作業系統是介於「零件」和「App」之間的軟體
電腦由CPU、記憶體等零件,以及在上面執行的程式組成。摸得到的零件稱為「硬體」。程式則稱為「軟體」。
軟體大致可分成2種。像郵件、相片、遊戲這樣,用來做人想做的事的,是「App」(應用程式)。另一方面,替App打好基礎、讓它能使用零件的,就是「作業系統」。英文是Operating System,簡稱OS。
App不論是在螢幕上顯示圖像,還是儲存檔案,都不會直接操作零件。它會請作業系統「幫我做這件事」,再由作業系統操作零件。有了這個機制,寫App的人就不必在意零件之間的細微差異。
代表性的作業系統,電腦有Microsoft的Windows、Apple的macOS,以及Linux。手機則有Google的Android和Apple的iOS。
電鍋或汽車的控制用電腦裡,有時也裝有小型的作業系統。其中多數重視「一定要在規定時間內做出反應」,稱為即時作業系統。
作業系統的中心:「核心」
作業系統裡,有一個一直放在記憶體中、一手包辦零件管理的中心部分。這稱為「核心」(英文kernel),原意是果實的「核」或「中心」。請注意,它和CPU裡的「核心」(英文core)是不同的東西,只是中文剛好同名。
「作業系統」這個詞有廣義和狹義兩種用法。廣義指核心,加上主畫面、設定畫面等一開始就附帶的軟體的整體。狹義則只指核心。這篇文章主要用廣義。
不同的作業系統,有時是以同一個核心為基礎。根據Android的官方資料,Android的核心是以Linux的核心為基礎做成的。另外,根據Apple公開的說明,macOS和iOS都使用名為XNU的核心。
工作①:讓許多App輪流使用CPU
一邊聽音樂一邊看網頁,還能收到新郵件的通知。看起來許多App是同時在執行。但是,CPU裡執行指令的部分稱為「CPU核心」。1個CPU核心在某一瞬間能執行的程式,基本上只有1個。
作業系統會把執行中的程式一個一個區分開來管理。這種「執行中的程式」稱為「行程」。1個App也可能分成好幾個行程來執行。
作業系統讓各個行程輪流使用1個CPU核心,每次只用以毫秒(千分之一秒)為單位的極短時間。因為切換非常快,人看起來就像全部同時在執行。決定讓哪個行程、在什麼時候、用多久的工作,稱為「排程」。
輪替時,作業系統會儲存前一個行程進行到哪裡,再讀入下一個行程接下來的狀態。這種替換稱為環境切換。儲存和讀入也要花一點時間,所以輪替切得太細,浪費就會變多。
其實,多數行程大部分時間都在等待鍵盤輸入或網路傳來的資料。作業系統不讓只是在等待的行程使用CPU核心,而是把順序讓給馬上能執行的行程。現在的CPU有好幾個核心,所以也有真的同時在執行的行程。即使如此,行程的數量通常遠多於CPU核心的數量,順序的管理還是不可或缺。
即使在1個行程裡,也能把工作分成幾條流程同時進行。這每一條流程稱為「執行緒」。
工作②:把記憶體分配給各個App
記憶體有位址(位置的編號),程式會指定位址來讀寫資料。如果所有App都能自由使用同樣的位址,就會出問題。因為某個App的錯誤,可能會改寫掉別的App的資料。
所以,作業系統會替每個App準備專用的位址空間。每個App都能像獨占記憶體一樣執行。App使用的是表面上的位址,要放在實際記憶體的哪裡,由作業系統決定。這種機制稱為虛擬記憶體。
表面上的位址和實際位置的對應,是把記憶體分成固定大小的區塊,再以區塊為單位決定的。這種區塊稱為「頁面」。作業系統替每個App保存一張對應表,記錄「表面上第幾號頁面,實際放在哪裡」。App每次使用位址,CPU都會查這張表,換成實際的位置。
記憶體不夠時,這張對應表也派得上用場。作業系統會把一段時間沒用到的頁面,暫時移到儲存空間,空出記憶體。App要使用被移走的頁面時,CPU會先暫停,並通知作業系統。作業系統把那個頁面讀回來之後,再讓App繼續執行。像這樣以頁面為單位管理、移進移出的方式,稱為「分頁」。
不過,儲存空間比記憶體慢得多,移進移出的次數一多,電腦的動作就會變慢。有些手機的作業系統,不把頁面移到儲存空間,而是關掉背景的App來空出記憶體。詳細內容請看「記憶體和儲存空間有什麼不同?」。
工作③:處理檔案和裝置
儲存空間裡的內容,原本只是一長串巨大的0和1。我們能把有名字的檔案分到資料夾裡保存,是因為作業系統在整理。把檔案的名字,和它在儲存空間裡實際的位置連結起來的管理機制,稱為「檔案系統」。
作業系統也負責處理鍵盤、螢幕、相機、印表機等裝置。不同廠商、不同型號的裝置,操作步驟都不一樣。負責吸收這些差異、每種裝置各自的程式,稱為裝置驅動程式。簡稱「驅動程式」。
接上新的印表機時要「安裝驅動程式」,就是為了教作業系統怎麼操作那台裝置。有了驅動程式,App只要請作業系統「幫我列印」,就能用任何一台印表機列印。
工作④:不讓App任意亂來
就算作業系統在管理零件,如果App能直接動零件,也就沒有意義了。所以,CPU有切換運作模式的機制。作業系統的核心,在什麼都能做的特別模式下執行。這種模式稱為特權模式,也叫「核心模式」。
App則在能做的事受到限制的「使用者模式」下執行。在這個模式下,如果想直接操作裝置,或偷看其他App的記憶體,CPU會擋下來並通知作業系統。通常作業系統會強制結束那個App。
那麼,App想讀檔案時該怎麼辦?App會用規定好的方式,向作業系統提出請求。這時CPU會暫時切換到特權模式,核心確認請求的內容後再執行。這種請求的機制稱為系統呼叫。兩種模式的差異,整理在「使用者模式與核心模式的差異」的表格裡。
手機上的App第一次使用相機或位置資訊時,會問你「是否允許?」。這也是作業系統的工作。作業系統確認使用者是否允許,只讓獲得允許的App使用。電腦也一樣,例如依登入的人區分能看的檔案,由作業系統管理可以使用的範圍(權限)。
工作⑤:畫面與操作的窗口
作業系統也提供人操作電腦的窗口。用滑鼠或手指操作圖示和視窗的方式,稱為「GUI」(圖形使用者介面)。
也有用文字輸入命令來操作的方式,主要用在伺服器的管理等場合。不論哪一種方式,在背後運作的核心都相同。①到④是不會出現在畫面上的幕後工作。
從按下電源到作業系統開始運作
剛打開電源時,記憶體是空的,作業系統也還在儲存空間裡。作業系統開始運作之前,有一場由幾個小程式接力的過程。這裡以電腦為例,簡化來說明。
- 韌體:一開始就寫在主機零件裡的小程式。它會檢查、準備零件,再從儲存空間找下一個階段。
- 啟動載入程式:用來載入作業系統的小程式。它把核心從儲存空間讀進記憶體,再把執行交棒出去。
- 核心:準備好各種裝置,依序啟動需要的程式。最後顯示登入畫面。
電腦的韌體,早期採用稱為「BIOS」的方式。現在多數電腦,是依照它的後繼規格「UEFI」製作的。UEFI是規定韌體和作業系統之間約定的規格,由業界團體UEFI Forum管理。
接力的每個階段,也有機制確認下一個要執行的程式,是否來自可信任的製作者、有沒有被改寫。如果有問題,就在那裡停止開機。這稱為安全開機。目的是防止惡意程式比作業系統更早開始執行。
App為什麼依作業系統而不同
Windows用的App,不能直接在macOS上執行。原因之一,是App向作業系統提出請求的「請求方式」,每個作業系統都不同。
作業系統會規定並公開App能使用的功能,以及呼叫它們的方式。這套約定稱為API。「開啟視窗」「儲存檔案」這類請求的方式,Windows和macOS各不相同。
另一個原因,是CPU能理解的指令種類和表示方式不同。這套規則稱為「指令集」。在指令集不同的CPU上,即使是同一個作業系統,App也不能直接執行。需要重新製作,或是用轉換指令的機制來執行。詳細內容請看「CPU是什麼?」中指令集的段落。
網路服務不論用哪個作業系統都能使用,是因為瀏覽器替我們吸收了各作業系統的差異。
更新為什麼重要
作業系統是非常龐大的程式,難免會留下錯誤。其中有些錯誤,會成為讓有心人士入侵的缺口。這樣的弱點稱為「漏洞」。
作業系統的開發者發現漏洞後,會發布修正過的程式。這就是「安全性更新」。作業系統處在管理一切的位置,漏洞一旦被惡意利用,損害可能會波及整台電腦。
安全性更新會定期發布。Android每個月公開彙整已修正漏洞的安全性公告。Windows的例行更新,在美國時間每月第2個星期二發布(台灣時間已是隔天星期三)。
另一方面,舊的作業系統遲早會停止更新。例如Windows 10,Microsoft已在2025年10月14日終止支援。停止更新的作業系統,新發現的漏洞會一直留著。
常見的誤解
誤解:作業系統就是畫面的外觀(主畫面或桌面)
實際上,畫面與操作的窗口只是作業系統工作的一部分。核心工作是管理CPU的順序、記憶體、檔案、裝置和權限。例如伺服器用的Windows,有一種沒有桌面畫面的安裝方式,叫做「Server Core」。Microsoft建議,如果沒有特別需要,就選這種方式。因為平常最常看到的是畫面,所以容易以為作業系統等於外觀。
誤解:開著的App越多,整體一定越慢
實際上,開著的App會占用記憶體。但如果只是在背景什麼都不做地等待,幾乎不會輪到CPU。只要記憶體還有餘裕,開著的App再多,也幾乎不會變慢。Android甚至會刻意把沒在用的App留在記憶體裡,讓下次能快速開啟。需要記憶體時,作業系統會自動關掉它們。會變慢的,是記憶體不夠、分頁變多的時候,或背景的App持續在做通訊等工作的時候。因為有過這種經驗,才容易以為數量本身就是原因。
誤解:Android和Linux沒有關係
實際上,Android的核心是以Linux的核心為基礎,加上Android專用的修改而成。另一方面,上層的App機制和畫面,和電腦用的Linux大不相同。電腦用Linux的App,不能直接在Android上執行。「是不是Linux」的答案,要看講的是核心,還是整個作業系統。
從數字來看
| 項目 | 時間 | 備註 |
|---|---|---|
| Windows 1.0發售 | 1985年11月 | 最初是疊在MS-DOS這個作業系統上使用的軟體 |
| Linux首次公開 | 1991年9月 | 版本0.01。作者是當時還是芬蘭大學生的林納斯·托瓦茲(Linus Torvalds) |
| Linux核心1.0 | 1994年3月 | 距首次公開約2年半 |
| Android的安全性公告 | 每月 | 截至2026年。已修正漏洞的一覽 |
| Windows 10終止支援 | 2025年10月14日 | 此後,一般的安全性更新已停止 |
現在使用的作業系統,很多都經過了數十年的改良。Windows從在MS-DOS上執行的軟體開始,之後一邊重新打造內部,一邊延續至今。Linux則是由1位學生起頭,再經許多人之手培育長大。
進一步學習
- 用表格看差異:行程與執行緒的差異、使用者模式與核心模式的差異
- 用數字試試看:CPU排程計算工具(排順序的方法如何改變等待時間)、分頁置換演算法計算工具(要把哪個頁面移到儲存空間)
- 下一步的用語:頁面錯誤、隨需分頁、虛擬機器監視器
- 從基礎讀起:「CPU是什麼?」、「記憶體和儲存空間有什麼不同?」