微軟創辦人 比爾蓋茲,便是以作業系統(例: Windows)起家,接下來要介紹「作業系統」的基本概念和不同系統間的資源分配、管理方式
在開始之前,先說明一些專有名詞的意思
代表正在執行中的程式(Program),又可以叫做job(非正式名稱)
Program:沒有被執行的程式,通常沈睡在你的硬碟裡,等待被啟動。一但被啟動,就會進入記憶體裡,此時這樣的 program 就稱為 process
CPU 藉由適當的排班方式,可以在不同的行程之間來回轉換執行。最主要的目的是讓電腦的系統隨時都能夠保有一個行程(process)在系統內執行,提高 CPU 利用率
十個工作在記憶體內等待被執行,今天要挑哪個工作來執行,採用哪種 CPU 排班程式,像是「先進先出」、「依序循環排班」、「優先權排班」等,後面會寫文章來介紹
當 CPU 的使用權由一個行程轉換到另一個行程時,必須將舊的 Peocess 的相關資訊儲存在記憶體中,並且把新的 Process 的相關資訊載入到系統中,這個置換工作就稱為「內容轉換」。「內容轉換」的時間能夠縮得越短越好
像是我電腦的記憶體只有8G,但我今天要載入一個遊戲需要 16G,那要怎麼辦?
這時虛擬記憶體就派上用場了,允許 Program Size 大於實際記憶體大小,而 Program 仍能正常執行
但缺點是程式執行起來會卡卡的
以「使用者」的觀點來看,作業系統可以說是個程式的集合,扮演使用者(User)和電腦硬體(Hardware)之間的中間人,並且提供使用者一個方便又有效率的環境,使其能夠執行程式(Program)。
由上述可以知道,作業系統服務的對象有兩個:
以「系統」的觀點來看,作業系統是一個資源分配者(Resource Allocator),負責分配資源給有需要用的程式和使用者
每執行一個程式,其實都會去搶奪並佔用電腦資源,在這過程常會有衝突產生,那作業系統就是負責解決這些硬體資源使用上的衝突,使硬體資源可以公平且有效的被利用
此外,作業系統還能對 program 進行監控,由於 program 是人寫的,就可能會有bug,為了防止不正常的運作造成對系統的危害
由上述可以知道,作業系統可以分為兩個角色
任何一個電腦系統大致可以分為三個部分
作業系統中,最重要的就是常駐在記憶體的核心程式 - kernel,核心程式的主要工作是管理作業系統,負責把其他部分的作業系統(非常駐程式)在必要時從磁碟載入到記憶體。像是當我們電腦「開機」時,核心程式就會負責把其他作業系統載入到記憶體中
前面的章節有提到中央處理器就是電腦的心臟,所有的程式都會需要經過處理器運算,當多個程式“同時”要使用處理器時,「作業系統」會依照優先順序讓 CPU 充分發揮其功能,提高使用效率。
以下舉兩個例子來說明不同情境:
狀況一: 有一個程序(Process)處於等待的狀況(像是等待使用著的輸入),這時候「作業系統」也不會讓 CPU 閒著,會讓它去處理別的 Process 的運算。
狀況二:如果突然有一個 Process 的優先順序較目前 CPU 在運算的程序高時,「作業系統」就會把 CPU 搶過來給優先序較高的 Process 使用! CPU 真的是一刻都不能閒啊 💦
每台電腦都會有一個有限的記憶體,不可能無限制的使用,如何把記憶體的資源進行合理的分配,使每一個 Process 都能被滿足,也是「作業系統」的首要任務啊!!
作業系統在分配記憶體時,必須要讓每個 Process 都能獨立執行,同時也要讓每個程序共享公共的程序和資料,避免重複的程式和資料佔用記憶體資源
真的很斤斤計較喔~
假設我的電腦記憶體只有8G,但我今天要載入一個遊戲需要 16G,那要怎麼辦?
這時虛擬記憶體就派上用場啦!它會由「作業系統」定址後作為 RAM 使用,允許 Program Size 大於實際記憶體的大小下, Program 仍能正常執行。缺點就是它的效能沒那麼好
由於主記憶體容量有限,因此大部分的程序和資料甚至是「作業系統」本身都是儲存在輔助記憶體上,如何標示這些資料檔案,有條理的組織這些訊息,讓檔案能夠順利的被存取和控制,也是「作業系統」的工作之一
像是輸入、輸出設備(I/O)都是周邊設備,作業系統還要負責控制輸入與輸出裝置,並且提供簡易的使用者圖形化介面程式(GUI,Graphic User Interface) 。舊的「作業系統」通常不會有 GUI 介面,而是以命令列介面(CLI)加上鍵盤為輸入裝置
在作業系統中,每一個程序(Process)都會對應一個程序控制表(Process Control Block, PCB),又叫「過程控制段」,是作業系統核心中一種資料結構,主要用來記錄該程序的狀態和資訊。當程序進入系統後,就會被放到工作佇列(Job Queue),它位在主記憶體(RAM)中。而等待被執行的程序則會放在就緒佇列(Ready Queue)中。
作業系統必須不間斷的將程序交給 CPU 進行運算(好忙啊~
大家應該都不會太陌生,畢竟現在幾乎人手一台手機甚至是電腦,作業系統跟我們的生活其實緊密相扣!
像是手機的作業系統有 Android/iOS/ChromeOS 等; 筆電的作業系統有 Windows、macOS、Linux 等
而 macOS 和 iOS 看起來外觀和介面都不太一樣,但其實他們的作業系統核心是一樣的喔!都是基於 Darwin 核心所建構起來的作業系統
此外,這裡來簡單的介紹一下 Linux 這個作業系統
Linux 最早的創始人 - 林納斯·托瓦茲(Linus Benedict Torvalds),當時還在芬蘭讀大學的他,在 1991 年時發表了 Linux0.02 版本,受到廣大的迴響,隨後便發起了開源專案(Open Source),擔任 Linux 核心的首要架構師與專案協調者。開源專案就是任何人都可以免費的使用 Linux 所有底層原始碼,也可以自由的修改和再發布。由於 Linux 的開放性,使它逐漸成長了起來!
Linux 有以下特點:
對於大型系統而言,為了要讓很多使用者使用,「作業系統」必須優先考慮效能並分配好使用的資源; 對於個人電腦而言,大部分的使用者都是單一的,因此除了要考慮效能外,資源的分配就顯得沒那麼重要; GUI 圖形化介面為了提供一個友善的操作介面,只好犧牲一點效能。總之,在不同的場景中,作業系統需因時制宜,使用不同作業系統來滿足需求