作業系統

作業系統（Operating system，operations system，operation system，縮寫：OS）是一組主管並控制電腦操作、運用和運行硬體、軟體資源和提供公共服務來組織使用者交互的相互關聯的系統軟體程序，同時也是電腦系統的核心與基石。作業系統需要處理如管理與配置記憶體、決定系統資源供需的優先次序、控制輸入與輸出裝置、操作網路與管理文件系統等基本事務。作業系統也提供一個讓使用者與系統互動的操作界面。

作業系統的型態非常多樣，不同機器安裝的作業系統可從簡單到複雜，可從行動電話的嵌入式系統到超級電腦的大型作業系統。許多作業系統製造者對它涵蓋範疇的定義也不盡一致，例如有些作業系統整合了圖形使用者界面，而有些僅使用命令行界面，將圖形使用者界面視為一種非必要的應用程式。

作業系統理論在電腦科學中，為歷史悠久而又活躍的分支；而作業系統的設計與實現則是軟體工業的基礎與核心。

## 歷史

從電腦發展史來看，作業系統與電腦硬體的演進關係密切。作業系統最初主要提供簡單的工作排序能力，後來隨著硬體設施日益複雜而逐步演化。自最早的批次模式開始，分時機制、多處理器協調功能乃至分散式系統協調功能相繼出現，其他功能也大致循著類似脈絡發展。另一方面，個人電腦的作業系統也沿襲大型電腦的演進路徑；當個人電腦硬體變得更複雜、更強大時，以往僅見於大型電腦的功能也逐漸普及。

總而言之，作業系統的歷史就是一部解決電腦系統需求與問題的歷史。

### 1980年代前

第一部電腦並沒有作業系統。這是由於早期電腦的建立方式（如同建造機械算盤）與效能不足以執行如此程式。但在1947年發明了電晶體，以及莫里斯·威爾克斯發明的微程序方法，使得電腦不再是機械裝置，而是電子產品。系統管理工具以及簡化硬體操作流程的程式很快就出現了，且成為作業系統的起源。到了1960年代早期，商用電腦製造商製造了批次處理系統，此系統可將工作的建置、排程以及執行序列化。此時，廠商為每一台不同型號的電腦創造不同的作業系統，因此為某電腦而寫的程式無法移植到其他電腦上執行，即使是同型號的電腦也不行。

到了1964年，IBM System/360推出了一系列用途與價位都不同的大型電腦，而它們都共用代號為OS/360的作業系統（而非每種產品都用量身訂做的作業系統）。讓單一作業系統適用於整個系列的產品是System/360成功的關鍵，且實際上IBM目前的大型系統便是此系統的後裔，為System/360所寫的應用程式依然可以在現代的IBM機器上執行。

OS/360也包含另一個優點：永久貯存裝置—硬碟的面世（IBM稱為DASD）。另一個關鍵是分時概念的建立：將大型電腦珍貴的時間資源適當分配到所有使用者身上。分時也讓使用者有獨佔整部機器的感覺；而Multics的分時系統是此時眾多新作業系統中實踐此觀念最成功的。

1963年，奇異公司與貝爾實驗室合作以PL/I語言建立的Multics，是激發1970年代眾多作業系統建立的靈感來源，尤其是由AT&T貝爾實驗室的丹尼斯·里奇與肯·湯普遜所建立的Unix系統，為了實踐平台移植能力，此作業系統在1973年由C語言重寫；另一個廣為市場採用的小型電腦作業系統是VMS。

### 1980年代

第一代微型計算機並不像大型電腦或小型電腦，沒有裝設作業系統的需求或能力；它們只需要最基本的作業系統，通常這種作業系統都是從ROM讀取的，此種程式被稱為監視程式（Monitor）。1980年代，家用電腦開始普及。通常此時的電腦擁有8-bit處理器加上64KB記憶體、螢幕、鍵盤以及低音質喇叭。而80年代早期最著名的套裝電腦為使用微處理器6510（6502晶片特別版）的Commodore C64。此電腦沒有作業系統，而是以一8KB唯讀記憶體BIOS初始化彩色螢幕、鍵盤以及軟碟機和印表機。它可用8KB唯讀記憶體BASIC語言來直接操作BIOS，並依此撰寫程式，大部分是遊戲。此BASIC語言的直譯器勉強可算是此電腦的作業系統，當然就沒有核心或軟硬體保護機制了。此電腦上的遊戲大多跳過BIOS層次，直接控制硬體。

家用電腦C64的抽象架構

簡單應用程式｜機器語言（遊戲直接操作）

8k BASIC ROM 8k ROM-BIOS 硬體（中央處理器、儲存裝置等）

早期最著名的磁碟啟動型作業系統是CP/M，它支援許多早期的微電腦。最早期的IBM PC其架構類似C64。使用BIOS抽象硬體並提供統一接口，內置BASIC解釋器，但是它的BASIC優於其他公司產品的原因在於他有可攜性，並且相容於任何符合IBM PC架構的機器上。這樣的PC可利用Intel-8088處理器（16-bit暫存器）定址，並最多可有1MB的記憶體，然而最初只有640KB。軟式磁碟機取代了過去的磁帶機，成為新一代的儲存裝置，並可在它512KB的空間上讀寫。為了支援更進一步的檔案讀寫概念，磁碟作業系統（Disk Operating System，DOS）因而誕生。此作業系統可以合併任意數量的磁區，因此可以在一張磁碟片上放置任意數量與大小的檔案。檔案之間以檔名區別。IBM並沒有很在意其上的DOS，因此以向外部公司購買的方式取得作業系統。1980年微軟公司取得了與IBM的合約，並且收購了一家公司出產的作業系統，在將之修改後以MS-DOS的名義出品，此作業系統可以直接讓程式操作BIOS與檔案系統。到了Intel-80286處理器的時代，才開始實作基本的儲存裝置保護措施。其後，MS-DOS成爲了IBM PC上面最常用的作業系統（IBM自己也有推出DOS，稱為IBM-DOS或PC-DOS）。MS-DOS的成功使得微軟成為地球上最賺錢的公司之一。

MS-DOS在個人電腦上的抽象架構普通應用程式（Shell script、文字編輯器）

MS-DOS（檔案系統）

BIOS（驅動程式）

硬體（中央處理器、儲存裝置等）

而1980年代另一個崛起的作業系統異數是Mac OS，此作業系統緊緊與麥金塔電腦綑綁在一起。此時一位施樂帕羅奧多研究中心的員工Dominik Hagen拜訪了蘋果電腦的史蒂夫·賈伯斯，並且向他展示了此時全錄發展的圖形化使用者介面。蘋果電腦驚為天人，並打算向全錄購買此技術，但因帕羅奧多研究中心並非商業單位而是研究單位，因此全錄回絕了這項買賣。在此之後蘋果一致認為個人電腦的未來必定屬於圖形使用者介面，因此也開始發展自己的圖形化作業系統。

### 1990年代

延續1980年代的競爭，1990年代出現了許多影響未來個人電腦市場深厚的作業系統。由於圖形化使用者介面日趨繁複，作業系統的能力也越來越複雜與巨大，因此強韌且具有彈性的作業系統就成了迫切的需求。此年代是許多套裝類的個人電腦作業系統互相競爭的時代。

上一年代於市場崛起的蘋果電腦，由於舊系統的設計不良，使得其後繼發展不力，蘋果電腦決定重新設計作業系統。經過許多失敗的專案後，蘋果於1997年釋出新作業系統——Mac OS X的測試版，而後推出的正式版取得了巨大的成功。讓原先失意離開蘋果的史蒂夫·賈伯斯風光再現。

除了商業主流的作業系統外，從1980年代起在開放原始碼的世界中，BSD系統也發展了非常久的一段時間，但在1990年代由於與AT&T的法律爭端，使得遠在芬蘭赫爾辛基大學的另一股開源作業系統——Linux興起。Linux核心是一個標準POSIX核心，其血緣可算是Unix家族的一支。Linux與BSD家族都搭配GNU計畫所發展的應用程式，但是由於使用的許可證以及歷史因素的作弄下，Linux取得了相當可觀的開源作業系統市佔率，而BSD則小得多。相較於MS-DOS的架構，Linux除了擁有傲人的可移植性（相較於Linux，MS-DOS衹能運行在Intel CPU上），它也是一個分時多行程核心，以及良好的記憶體空間管理（普通的行程不能存取核心區域的記憶體）。想要存取任何非自己的記憶體空間的行程衹能透過系統調用來達成。一般行程是處於使用者模式（User mode）底下，而執行系統呼叫時會被切換成核心模式（Kernel mode），所有的特殊指令衹能在核心模式執行，此措施讓核心可以完美管理系統內部與外部裝置，並且拒絕無權限的行程提出的請求。因此理論上任何應用程式執行時的錯誤，都不可能讓系統當機。

幾乎完整的Linux架構圖

使用者模式｜應用程式（sh、vi、OpenOffice.org等）

複雜函式庫（KDE、glib等）

簡單函式庫（opendbm、sin等）

C函式庫（open、fopen、socket、exec、calloc等）

核心模式｜系統中斷、呼叫、錯誤等軟硬體訊息

核心（驅動程式、行程、網路、記憶體管理等）

硬體（處理器、記憶體、各種裝置）

另一方面，微軟對於更強力的作業系統呼聲的回應便是Windows NT於1993年的面世。

1983年開始微軟就想要為MS-DOS建構一個圖形化的作業系統應用程式，稱為Windows（有人說這是比爾·蓋茨被蘋果的Lisa電腦上市所刺激）。一開始Windows並不是一個作業系統，只是一個應用程式，其背景還是純MS-DOS系統，這是因為當時的BIOS設計以及MS-DOS的架構不甚良好之故。在1990年代初，微軟與IBM的合作破裂，微軟從OS/2（早期為命令列模式，後來成為一個技術很優秀但是曲高和寡的圖形化作業系統）專案中抽身，並且在1993年7月27日推出Windows 3.1，一個以OS/2為基礎的圖形化作業系統。並在1995年8月15日推出Windows 95。這時的Windows系統依然是建立在MS-DOS的基礎上，不過微軟在這同時也在開發不依賴於DOS的NT系列Windows系統，並在後來完全放棄了DOS而轉向NT作為Windows的基礎。

底下的表格為Windows NT系統的架構：在硬體階層之上，有一個由微核心直接接觸的硬體抽象層（HAL），而不同的驅動程式以模組的形式掛載在核心上執行。因此微核心可以使用諸如輸入輸出、檔案系統、網路、資訊安全機制與虛擬記憶體等功能。而系統服務層提供所有統一規格的函式呼叫庫，可以統一所有子系統的實作方法。例如儘管POSIX與OS/2對於同一件服務的名稱與呼叫方法差異甚大，它們一樣可以無礙地實作於系統服務層上。在系統服務層之上的子系統，全都是使用者模式，因此可以避免使用者程式執行非法行動。

簡化版本的Windows NT抽象架構

使用者模式｜OS/2應用程式｜Win32應用程式｜DOS程式｜Win16應用程式｜POSIX應用程式

其他DLL函式庫｜DOS系統｜Windows模擬系統

OS/2子系統｜Win32子系統｜POSIX.1子系統

核心模式｜系統服務層

輸入輸出管理檔案系統、網路系統｜物件管理系統 / 安全管理系統 / 行程管理 / 物件間通訊管理 / 行程間通訊管理 / 虛擬記憶體管理微核心｜視窗管理程式

驅動程式｜硬體抽象層（HAL）｜圖形驅動

硬體（處理器、記憶體、外部裝置等）

子系統架構第一個實作的子系統群當然是以前的微軟系統。DOS子系統將每個DOS程式當成一行程執行，並以個別獨立的MS-DOS虛擬機器承載其運行環境。另外一個是Windows 3.1模擬系統，實際上是在Win32子系統下執行Win16程式。因此達到了安全掌控為MS-DOS與早期Windows系統所撰寫之舊版程式的能力。然而此架構只在Intel 80386處理器及後繼機型上實作。且某些會直接讀取硬體的程式，例如大部分的Win16遊戲，就無法套用這套系統，因此很多早期遊戲便無法在Windows NT上執行。Windows NT有3.1、3.5、3.51與4.0版。Windows 2000是Windows NT的改進系列（事實上是Windows NT 5.0）、Windows XP（Windows NT 5.1）以及Windows Server 2003（Windows NT 5.2）與Windows Vista（Windows NT 6.0）也都是立基於Windows NT的架構上。

而本年代漸漸增長並越趨複雜的嵌入式設備市場也促使嵌入式作業系統的成長。

### 今日

現代作業系統通常都有一個使用的繪圖裝置的圖形使用者界面（GUI），並附加如滑鼠或觸控面版等有別於鍵盤的輸入裝置。舊的OS或效能導向的伺服器通常不會有如此親切的介面，而是以命令行界面（CLI）加上鍵盤為輸入裝置。以上兩種介面其實都是所謂的殼，其功能為接受並處理使用者的指令（例如按下一按鈕，或在命令提示列上鍵入指令）。

選擇要安裝的作業系統通常與其硬體架構有很大關係，只有Linux與BSD幾乎可在所有硬體架構上執行，而Windows NT僅移植到了DEC Alpha與MIPS Magnum。在1990年代早期，個人電腦的選擇就已被侷限在Windows家族、類Unix家族以及Linux上，而以Linux及Mac OS X為最主要的另類選擇，直至今日。

大型機與嵌入式系統使用很多樣化的作業系統。大型主機近期有許多開始支援Java及Linux以便共享其他平台的資源。嵌入式系統近期百家爭鳴，從給Sensor Networks用的Berkeley Tiny OS到可以操作Microsoft Office的Windows CE都有。

#### 個人電腦

個人電腦市場目前分為兩大陣營，此兩種架構分別有支持的作業系統：

- Apple Macintosh - Mac OS X，Windows（僅Intel平台），Linux、BSD。
- IBM相容PC - Windows、Linux、BSD、Mac OS X（非正式支援）。

#### 大型電腦

最早的作業系統是針對20世紀60年代的大型主結構開發的，由於對這些系統在軟體方面做了巨大投資，因此原來的電腦廠商繼續開發與原來作業系統相兼容的硬體與作業系統。這些早期的作業系統是現代作業系統的先驅。現在仍被支持的大型主機作業系統包括：

- Burroughs MCP-- B5000，1961 to Unisys Clearpath/MCP, present.
- IBM OS/360 -- IBM System/360, 1964 to IBM zSeries, present
- UNIVAC EXEC 8 -- UNIVAC 1108, 1964, to Unisys Clearpath Dorado, present.

現代的大型主機一般也可運行Linux或Unix變種。

#### 嵌入式

嵌入式系統使用非常廣泛的系統（如VxWorks、eCos、Symbian OS及Palm OS）以及某些功能縮減版本的Linux或者其他作業系統。某些情況下，OS指稱的是一個內建了固定應用軟體的巨大泛用程式。在許多最簡單的嵌入式系統中，所謂的OS就是指其上唯一的應用程式。

#### 類Unix系統

所謂的類Unix家族指的是一族種類繁多的OS，此族包含了System V、BSD與Linux。由於Unix是The Open Group的註冊商標，特指遵守此公司定義的行為的作業系統。而類Unix通常指的是比原先的Unix包含更多特徵的OS。

類Unix系統可在非常多的處理器架構下執行，在伺服器系統上有很高的使用率，例如大專院校或工程應用的工作站。

1991年，芬蘭學生林納斯·托瓦茲根據類Unix系統Minix編寫並發布了Linux作業系統內核，其後在理察·斯托曼的建議下以GNU通用公共許可證發布，成為自由軟體Unix變種. Linux近來越來越受歡迎，它們也在個人桌面電腦市場上大有斬獲，例如Ubuntu系統。

某些Unix變種，例如惠普的HP-UX以及IBM的AIX僅設計用於自家的硬體產品上，而SUN的Solaris可安裝於自家的硬體或x86電腦上。蘋果電腦的Mac OS X是一個從NeXTSTEP、Mach以及FreeBSD共同衍生出來的微核心BSD系統，此OS取代了蘋果電腦早期非Unix家族的Mac OS。

經歷數年的披荊斬棘，自由開源的Linux系統逐漸蠶食以往專利軟體的專業領域，例如以往電腦動畫運算巨擘──矽谷圖形公司（SGI）的IRIX系統已被Linux家族及貝爾實驗室研發小組設計的九號計畫與Inferno系統取代，皆用於分散運算式環境。它們並不像其他Unix系統，而是選擇內建圖形使用者界面。九號計畫原先並不普及，因為它剛推出時並非自由軟體。後來改在自由及開源軟體許可證Lucent Public License釋出後，便開始擁有廣大的使用者及社群。Inferno已被售予Vita Nuova並以GPL/MIT許可證釋出。

當前，電腦按照計算能力排名世界500強中全數皆使用Linux系統。

#### 微軟Windows

Microsoft Windows系列作業系統是在微軟給IBM機器設計的MS-DOS的基礎上設計的圖形作業系統。現在的Windows系統，如Windows 2000、Windows XP皆是建立於現代的Windows NT核心。NT核心是由OS/2和OpenVMS等系統上借用來的。Windows可以在32位元和64位元的Intel和AMD的處理器上運行，但是早期的版本也可以在DEC Alpha、MIPS與PowerPC架構上運行。

雖然由於人們對於開放原始碼作業系統興趣的提升，Windows的市場佔有率有所下降，但是到2004年為止，Windows作業系統在世界範圍內佔據了桌面作業系統90%的市場。

Windows系統也被用在低階和中階伺服器上，並且支援網頁服務的資料庫服務等一些功能。最近微軟花費了很大研究與開發的經費用於使Windows擁有能運行企業的大型程式的能力。

Windows XP在2001年10月25日發佈，2004年8月24日發佈服務包2（Service Pack 2），2008年4月21日發佈最新的服務包3，但只有32位元（Service Pack 3）。

Windows XP的下一代為Windows Vista（開發代碼為Longhorn）於2007年1月30日發售。Windows Vista增加了許多功能，尤其是系統的安全性和網路管理功能，並且其擁有介面華麗的Aero Glass。但是整體而言，其在全球市場上的口碑卻並不是很好。其後繼者Windows 7則是於2009年10月22日發售，Windows 7改善了Windows Vista為人詬病的效能問題，相較於Windows Vista，在同樣的硬體環境下，Windows 7的表現較Windows Vista為好。

Windows 8 於2012年10月26日發售，與Windows Phone 8共用核心，取消了開始按鈕，並使用了全新動態磚介面，並可使用Windows 市集購買安裝App，但由於整體介面相較於前幾版是很大的更改，以及為觸控設計的介面，讓不少鍵盤滑鼠使用者比較不習慣。微軟於隔年2013年10月18日發布了Windows 8.1，並加回了開始按鈕。

而最多人使用的Windows 的Windows 10則是於2015年7月29日發售。而每次大更新後就更改版本號，目前最新為22H2。微軟已在2025年10月15日停止支援Windows 10家用版及專業版。

Windows 11於2021年10月5日發行ISO等安裝檔，但無發售盒裝版。是目前最新的Windows，也是唯一可以安裝Android App與只有64位元版的Windows。

#### 蘋果macOS

macOS，前稱「Mac OS X」或「OS X」，是一套運行於蘋果Macintosh系列電腦上的作業系統。Mac OS是首個在商用領域成功的圖形使用者界面系統。Macintosh開發成員包括比爾·阿特金森（Bill Atkinson）、傑夫·拉斯金（Jef Raskin）和安迪·赫茨菲爾德（Andy Hertzfeld）。從OS X 10.8開始在名字中去掉Mac，僅保留OSX和版本號。在WWDC 2016 上，蘋果公司將OS X更名為macOS，現行的最新的系統版本是macOS Golden Gate。

#### Chrome OS

Google Chrome OS是一項Google的輕型電腦作業系統計劃，其基於Google的瀏覽器Google Chrome的Linux內核。

#### 其他

大型主機以及嵌入式作業系統均與Unix或Windows家族關係不大，除了Android，Windows CE、Windows NT及Windows XP Embedded是Windows的血親產品，以及數種*BSD和嵌入式Linux套件為例外。

少數較舊的OS今日依然在一些需要穩定性的市場中活躍，例如IBM的OS/2、BeOS以及XTS-400。

在達康時代狂潮過後，如AmigaOS與RISC OS等少數人使用的OS依然持續建立，以滿足狂熱的愛好者社群與特殊專業使用者。

優秀的作業系統必定要具備能讓各種能力級別的使用者滿足各種需求的工具包可視化的高效簡便程序環境，以程序來創建程序，就如立法的法律指導規範新的法案的創建。這其實是作業系統所隱含的一部分，決定了可以有多強的擴充能力。比如，某個作業系統有對應的開發者工具包集成環境程序並且是個可視化的，還能讓能力不太高的人一看能懂的，用於修改某個聲音合成器包含頻譜顯示，可要是作業系統本身不支持也沒有提供可用的工具程序，就會變得很繁瑣，很可能為了達到這個目標，開發者就要預備好各種相關的工具程序，甚至自己來編寫一系列相關的工具程序創建專門的工具包，最後還要檢查代碼。若是有人想通過音樂來生成五線譜，要對類似標記語言的五線譜規則對應一下，對各種音色，音準採集並總結出一整套規律，通過聲音識別可以識別出樂器的類別等，進而標出樂符完成從聲音到樂譜的轉換並生成。可是對人聲卻又更為複雜也不必要如此。若是需要用聲音的波形圖重現聲音，沒有相關的工具集是相當難實現，另外只有使用同一套聲音的波形繪製規則的所生成的波形圖用來再現的聲音才是原來的聲音。

在作為商品出售的作業系統軟體的歷史中常常因為其中包含的瀏覽器，媒體播放器在美國遭到反壟斷起訴，差點使得功能上殘缺不全。少數作業系統軟體能夠提供較為全面的App和實用工具程序。

作業系統軟體的編譯也需要對應的編譯環境。

在同一台電腦上運行不同的作業系統軟體，就能夠以不同的方式來使用電腦資源。比如，在Mac上運行Mac OS X和Windows以兩種不同的技術OpenCL，Core Image:DirectX來使用圖形卡實現類似的作用。

通過圖像識別和聲音識別來進行資訊搜索。

能夠滿足不同需求所要求的精確程度對時間的精細劃分，以及尺度細分可以互聯，同步，協調原本必須由多個人協同合作才能完成的隨時需要調整並相互同步的操控作業，這就必須有即時消息傳送顯示，可視化的用於協調同步計劃任務的配置腳本，以及執行這樣計劃任務的完整組件。

### 未來

研究與建立未來的作業系統依舊進行著。作業系統朝提供更省電、網路化、易用、華麗的使用者介面的方向來改進。類UNIX OS通過和桌面環境開發者協作，正努力讓自己改進使用環境。

eyeOS是一套基於PHP實現的半開源模擬雲端運算作業系統，但其實質只是在網路瀏覽器中提供一種類似無界限的類獨立作業系統，其並非於任何類似虛擬化中實現的真正電腦作業系統，能提供諸如Word、PPT、Excel的在線處理功能...

GNU Hurd是一個以完全相容Unix並加強許多功能為目標的微核心架構。微軟Singularity是一個奠基於.Net並以建立較佳記憶體保護機制為目標的研究計畫。

Fuchsia是一個由Google研發的，不兼容傳統類Unix系統設計的微內核作業系統。擁有某些創新性的權限隔離設計以增強安全與隱私性。

## 功能

作業系統位於底層硬體與使用者之間，是兩者溝通的橋梁。使用者可以通過作業系統的使用者界面，輸入命令。作業系統則對命令進行解釋，驅動硬體設備，實現使用者要求。以現代標準而言，一個標準PC的作業系統應該提供以下的功能：

- 進程管理（Processing management）
- 記憶體管理（Memory management）
- 文件系統（File system）
- 網路通信（Networking）
- 安全機制（Security）
- 使用者界面（User interface）
- 驅動程序（Device drivers）

### 進程管理

不管是常駐程式或者應用程式，他們都以行程為標準執行單位。當年運用馮·諾伊曼結構建造電腦時，每個中央處理器最多只能同時執行一個行程。早期的作業系統（例如DOS）也不允許任何程式打破這個限制，且DOS同時只有執行一個進程（雖然DOS自己宣稱他們擁有終止並等待駐留能力，可以部分且艱難地解決這問題）。現代的作業系統，即使只擁有一個CPU，也可以利用多進程（multitask）功能同時執行多個進程。進程管理指的是作業系統調整多個行程的功能。

由於大部分的電腦只包含一顆中央處理器，在單核心（Core）的情況下多行程只是簡單迅速地切換各行程，讓每個行程都能夠執行，在多核心或多處理器的情況下，所有行程透過許多協同技術在各處理器或核心上轉換。越多行程同時執行，每個行程能分配到的時間比率就越小。很多作業系統在遇到此問題時會出現諸如音效斷續或滑鼠跳格的情況（稱做顛簸（Thrashing），一種作業系統只能不停執行自己的管理程式並耗盡系統資源的狀態，其他使用者或硬體的程式皆無法執行。行程管理通常實踐了分時的概念，大部分的作業系統可以利用指定不同的特權等級（priority），為每個行程改變所佔的分時比例。特權越高的行程，執行優先順序越高，單位時間內佔的比例也越高。互動式作業系統也提供某種程度的回饋機制，讓直接與使用者互動的行程擁有較高的特權值。

除了行程管理之外，作業系統尚有擔負起行程間通訊（IPC）、行程異常終止處理以及死鎖（Dead Lock）偵測及處理等較為艱深的問題。

在行程之下尚有執行緒的問題，但是大部分的作業系統並不會處理執行緒所遭遇的問題，通常作業系統僅止於提供一組API讓使用者自行操作或透過虛擬機器的管理機制控制執行緒之間的互動。

### 記憶體管理

根據帕金森定律：「你給程序再多記憶體，程序也會想盡辦法耗光」，因此程式設計師通常希望系統給他無限量且無限快的記憶體。大部分的現代電腦記憶體架構都是階層式的，最快且數量最少的暫存器為首，然後是快取、記憶體以及最慢的磁碟儲存裝置。而作業系統的記憶體管理提供尋找可用的記憶空間、配置與釋放記憶空間以及交換記憶體和低速儲存裝置的內含物......等功能。此類又被稱做虛擬記憶體管理的功能大幅增加每個行程可獲得的記憶空間（通常是4GB，即使實際上RAM的數量遠少於這數目）。然而這也帶來了微幅降低執行效率的缺點，嚴重時甚至也會導致行程崩潰。

記憶體管理的另一個重點活動就是藉由CPU的幫助來管理虛擬位置。如果同時有許多行程儲存於記憶裝置上，作業系統必須防止它們互相干擾對方的記憶體內容（除非透過某些協定在可控制的範圍下操作，並限制可存取的記憶體範圍）。分割記憶體空間可以達成目標。每個行程只會看到整個記憶體空間（從0到記憶體空間的最大上限）被配置給它自己（當然，有些位置被作業系統保留而禁止存取）。CPU事先存了幾個表以比對虛擬位置與實際記憶體位置，這種方法稱為分頁配置。

藉由對每個行程產生分開獨立的位置空間，作業系統也可以輕易地一次釋放某行程所佔據的所有記憶體。如果這個行程不釋放記憶體，作業系統可以結束行程並將記憶體自動釋放。

### 磁碟與文件系統

所謂的檔案系統，通常指稱管理磁碟資料的系統，可將資料以目錄或檔案的型式儲存。每個檔案系統都有自己的特殊格式與功能，例如日誌管理或不需磁碟重整。

作業系統擁有許多種內建檔案系統。例如Linux擁有非常廣泛的內建檔案系統，如ext2、ext3、ext4、ReiserFS、Reiser4、GFS、GFS2、OCFS、OCFS2、NILFS與Google檔案系統。Linux也支援非原生檔案系統，例如XFS、JFS、FAT家族與NTFS。另一方面，Windows能支援的檔案系統衹有FAT12、FAT16、FAT32、exFAT與NTFS、ReFS。NTFS系統是Windows上最可靠與最有效率的檔案系統。其他的FAT家族都比NTFS老舊，且對於檔案長度與分割磁碟能力都有很大限制，因此造成很多問題。而UNIX的檔案系統多半是UFS，而UNIX中的一個分支Solaris最近則開始支援一種新式的ZFS。

大部份上述的檔案系統都有兩種建置方法。系統可以以日誌式或非日誌式建置。日誌式檔案系統可以以較安全的手法執行系統恢復。如果一個沒有日誌式建置的檔案系統遇上突然的系統崩潰，導致資料建立在一半時停頓，則此系統需要特殊的檔案系統檢查工具才能復原；日誌式則可自動恢復。微軟的NTFS與Linux的ext3、ext4、ReiserFS與JFS都是日誌式檔案系統。

每個檔案系統都實作相似的目錄／子目錄架構，但在相似之下也有許多不同點。微軟使用「\」符號以建立目錄／子目錄關係，且檔案名稱忽略其大小寫差異；UNIX系統則是以「/」建立目錄架構，且檔案名稱大小寫有差異。(其實這是給系統調用的，"/"或"\"並不實際存在硬碟)

### 網路

許多現代的作業系統都具備操作主流網路通訊協定TCP/IP的能力。也就是說這樣的作業系統可以進入網路世界，並且與其他系統分享諸如檔案、印表機與掃描器等資源。

許多作業系統也支援多個過去網路啟蒙時代的各路網路通訊協定，例如IBM建立的系統網路架構、DEC在它所生產的系統所設定的DECnet架構與微軟為Windows製作的特殊通訊協定。還有許多為了特殊功能而研發的通訊協定，例如可以在網路上提供檔案存取功能的NFS系統。現今大量用於影音串流（Streaming media）及遊戲訊息傳送的UDP協定等。

### 安全

大多數作業系統都含有某種程度的資訊安全機制。資訊安全機制主要基於兩大理念：

- 作業系統提供外界直接或間接存取數種資源的管道，例如本地端磁碟機的檔案、受保護的特權系統呼叫、使用者的隱私資料與系統執行的程式所提供的服務。
- 作業系統有能力認證資源存取的請求。允許通過認證的請求並拒絕無法通過的非法請求，並將適當的權力授權給此請求。有些系統的認證機制僅簡略地把資源分為特權或非特權，且每個請求都有獨特的身份辨識號碼，例如使用者名稱。資源請求通常分成兩大種類：
- 內部來源：通常是一個正在執行的程式發出的資源請求。在某些系統上，一個程式一旦可執行就可做任何事情（例如DOS時代的病毒），但通常作業系統會給程式一個識別代號，並且在此程式發出請求時，檢查其代號與所需資源的存取權限關係。
- 外部來源：從非本地端電腦而來的資源請求，例如遠端登入本機電腦或某些網路連線請求（FTP或HTTP）。為了識別這些外部請求，系統也許會對此請求提出認證要求。通常是請求輸入使用者名稱以及相對應的密碼。系統有時也會應用諸如磁卡或生物識別資料的它種認證方法。在某些例子，例如網路通訊上，通常不需通過認證即可存取資源（例如匿名存取的FTP伺服器或P2P服務）。

除了允許／拒絕形式的安全機制，一個高安全等級的系統也會提供記錄選項，允許記錄各種請求對資源存取的行為（例如「誰曾經讀了這個檔案？」）。

肇因於軍方與商業組織將敏感資料記錄在電腦上，安全機制在作業系統歷史上是一個被長久關注與討論的問題。美國國防部（DoD）便創立了《可信賴之電腦系統評鑑程序》（TCSEC），此手冊確立了評鑑安全機製成效的基本原則。這對作業系統作者來說非常重要，因為TCSEC是用於評鑑、分類與選拔出用於處理、儲存與獲取敏感或機密資料的電腦系統的標準程序。

#### 內部通訊安全

內部資訊安全可視為防止正在執行的程式任意存取系統資源的手段。大多作業系統讓普通程式可直接操作電腦的CPU，所以產生了一些問題，例如怎樣把可如作業系統一樣處理事務、執行同樣特殊指令的程式強迫停止，畢竟在此情境下，作業系統也只是另一個平起平坐的程式。為通用作業系統所生產的CPU通常於硬體層級上實踐了一定程度的特殊指令保護概念。通常特權層級較低的程式想要執行某些特殊指令時會被阻斷，例如直接存取像是硬碟之類的外部裝置。因此，程式必須得經由詢問作業系統，讓作業系統執行特殊指令來存取磁碟。因此作業系統就有機會檢查此程式的識別身份，並依此接受或拒絕它的請求。

在不支援特殊指令架構的硬體上，另一個也是唯一的保護方法，則是作業系統並不直接利用CPU執行使用者的程式，而是藉由模擬一個CPU或提供一P-code機系統（偽代碼執行機），像是Java一樣讓程式在虛擬機器上執行。

內部安全機制在多使用者電腦上特別重要：它允許每個系統使用者擁有自己個人的檔案與目錄，且其他使用者不能任意存取或刪除。因為任何程式都可能繞過作業系統的監控，更有可能繞過側錄程式的監控，擁有強制力的內部安全機制在側錄啟動時也非常重要。

#### 外部通訊安全

通常一個作業系統會為其他網路上的電腦或使用者提供（主持）各種服務。這些服務通常藉由埠或作業系統網路地址後的數字存取點提供。通常此服務包括提供檔案共享（NFS）、列印共享、電子郵件、網頁服務與檔案傳輸協定（FTP）。外部資訊安全的最前線，是諸如防火牆等的硬體裝置。在作業系統內部也常設置許多種類的軟體防火牆。軟體防火牆可設定接受或拒絕在作業系統上執行的服務與外界的連線。因此任何人都可以安裝並執行某些不安全的網路服務，例如Telnet或FTP，並且設定除了某些自用通道之外阻擋其他所有連線，以達成防堵不良連線的機制。

### 使用者界面

今日大部分的作業系統都包含圖形使用者界面（GUI）。有幾類較舊的作業系統將圖形化使用者介面與核心緊密結合，例如最早的Windows與Mac OS實作產品。此種手法可提供較快速的圖形回應能力，且實作時不需切割模組因而較為省工，但是會有強烈副作用，例如圖形系統崩潰將導致整個系統崩潰，例如藍白當機畫面。許多近代的作業系統已模組化，將圖形介面的子系統與核心分開（已知Linux與Mac OS X原先就是如此設計，而某些擴充版本的Windows終於也採用此手法）。

許多作業系統允許使用者安裝或創造任何他們喜歡的圖形使用者界面。大部分的Unix與Unix衍生系統（BSD、Linux與Minix）通常會安裝X Window系統配合GNOME或KDE桌面環境。而某些作業系統就沒有這麼彈性的圖形化使用者介面，例如Windows。這類的作業系統只能透過外加的程式來改變其圖形化使用者介面，甚至根本只能改變諸如選單風格或顏色配置等部分。

圖形化使用者介面與時並進，例如Windows在每次新版本上市時就會將其圖形化使用者介面改頭換面，而Mac OS的GUI也在Mac OS X上市時出現重大轉變。

### 驅動程序

所謂的驅動程式（Device driver）是指某類設計來與硬體互動的電腦軟體。通常是一設計完善的裝置互動介面，利用與此硬體連接的電腦匯排流或通訊子系統，提供對此裝置下令與接收資訊的功能；以及最終目的，將訊息提供給作業系統或應用程式。驅動程式是針對特定硬體與特定作業系統設計的軟體，通常以作業系統核心模組、應用軟體包或普通電腦程式的形式在作業系統核心底下執行，以達到通透順暢地與硬體互動的效果，且提供硬體在處理非同步的時間依賴性介面（asynchronous time-dependent hardware interface）時所需的中斷處理常式。

設計驅動程式的主要目的在於操作抽象化，任何硬體模組，即使是同一類的裝置，在硬體設計面上也有巨大差異。廠商推出的較新模組通常更可靠更有效率，控制方法也會有所不同。電腦與其作業系統每每不能預期那些現有與新裝置的變異之處，因此無法知道其操作方法。為解決此問題作業系統通常會主動制訂每種裝置該有的操作方式，而驅動程式功能則是將那些作業系統制訂的行為描述，轉譯為可讓裝置瞭解的自訂操作手法。

理論上適合的驅動程式一旦安裝，相對應的新裝置就可以無誤地執行。此新驅動程式可以讓此裝置完美地切合在作業系統中，讓使用者察覺不到這是作業系統原本沒有的功能。

## 結構

作業系統理論研究者有時把作業系統分成四大部分：

- 驅動程序 - 最底層的、直接控制和監視各類硬體的部分，它們的職責是隱藏硬體的具體細節，並向其他部分提供一個抽象的、通用的接口。
- 內核 - 作業系統之最核心部分，通常運行在最高特權級，負責提供基礎性、結構性的功能。
- 支承庫 - （亦作「接口庫」）是一系列特殊的程序庫，它們職責在於把系統所提供的基本服務包裝成應用程式所能夠使用的編程接口（API），是最靠近應用程式的部分。例如，GNU C運行期庫就屬於此類，它把各種作業系統的內部編程接口包裝成ANSI C和POSIX編程接口的形式。
- 外圍 - 所謂外圍，是指作業系統中除以上三類以外的所有其他部分，通常是用於提供特定高級服務的部件。例如，在微內核結構中，大部分系統服務，以及UNIX/Linux中各種守護進程都通常被劃歸此列。

當然，本節所提出的四部結構觀也絕非放之四海皆準。例如，在早期的微軟視窗作業系統中，各部分耦合程度很深，難以區分彼此。而在使用外核結構的作業系統中，則根本沒有驅動程序的概念。因而，本節的討論只適用於一般情況，具體特例需具體分析。

作業系統中四大部分的不同布局，也就形成了幾種整體結構的分野。常見的結構包括：簡單結構、層結構、微內核結構、垂直結構、和虛擬機結構。

## 分類

作業系統的分類沒有一個單一的標準，可以根據工作方式分為批處理作業系統、分時作業系統、實時作業系統、網路作業系統和分布式作業系統等；根據架構可以分為單內核作業系統等；根據運行的環境，可以分為桌面作業系統，嵌入式作業系統等；根據指令的長度分為8bit, 16bit, 32bit, 64bit的作業系統。

### 內核結構

內核是作業系統最核心最基礎的構件，其結構往往對作業系統的外部特性以及應用領域有著一定程度的影響。儘管隨著理論和實踐的不斷演進，作業系統高層特性與內核結構之間的耦合有日趨縮小之勢，但習慣上，內核結構仍然是作業系統分類之常用標準。

內核的結構可以分為單內核、微內核、超微內核、以及外核等。

單內核結構是作業系統中各核心部件雜然混居的形態，該結構產生於1960年代（亦有1950年代初之說，尚存爭議），歷史最長，是作業系統內核與外圍分離時的最初形態。

微內核結構是1980年代產生出來的較新的內核結構，強調結構性部件與功能性部件的分離。20世紀末，基於微內核結構，理論界中又發展出了超微內核與外內核等多種結構。儘管自1980年代起，大部分理論研究都集中在以微內核為首的「新興」結構之上，然而，在應用領域之中，以單內核結構為基礎的作業系統卻一直占據著主導地位。

在眾多常用作業系統之中，除了QNX和基於Mach的UNIX等個別系統外，幾乎全部採用單內核結構，例如大部分的Unix、Linux，以及Windows（微軟聲稱Windows NT是基於改良的微內核架構的，儘管理論界對此存有異議）。微內核和超微內核結構主要用於研究性作業系統，還有一些嵌入式系統使用外核。

基於單內核的作業系統通常有著較長的歷史淵源。例如，絕大部分UNIX的家族史都可上溯至1960年代。該類作業系統多數有著相對古老的設計和實現（例如某些UNIX中存在著大量1970年代、1980年代的代碼）。另外，往往在性能方面略優於同一應用領域中採用其他內核結構的作業系統（但通常認為此種性能優勢不能完全歸功於單內核結構）。

### 通用與專用、嵌入式

通用作業系統是面向一般沒有特定應用需求的作業系統。由於沒有特定的應用需求，通用作業系統為了適應更廣泛的應用，需要支持更多的硬體與軟體，需要針對所有的使用者體驗，對系統進行更新。通用作業系統是一個工程量繁重的作業系統。

### 即時與非即時

「即時作業系統」（Real Time OS）泛指所有據有一定實時資源調度以及通訊能力的作業系統。而所謂「即時」，不同語境中往往有著非常不同的意義。某些時候僅僅用作「高性能」的同義詞。但在作業系統理論中「即時性」所指的通常是特定操作所消耗的時間（以及空間）的上限是可預知的。比如，如果說某個作業系統提供實時記憶體分配操作，那也就是說一個記憶體分配操作所用時間（及空間）無論如何也不會超出作業系統所承諾的上限。即時性在某些領域非常重要，比如在工業控制、醫療器材、影音訊合成、以及軍事領域，即時性都是無可或缺的特性。

常用即時作業系統有QNX、VxWorks、RTLinux等等，而Linux、多數UNIX、以及多數Windows家族成員等都屬於非實時作業系統。作業系統整體的即時性通常依仗內核的即時能力，但有時也可在非即時內核上建立即時作業系統，很多在Windows上建立的即時作業系統就屬於此類。

在POSIX標準中專有一系用於規範即時作業系統的API，其中包括POSIX.4、POSIX.4a、POSIX.4b（合稱POSIX.4）以及POSIX.13等等。符合POSIX.4的作業系統通常被認可為即時作業系統（但即時作業系統並不需要符合POSIX.4標準）。

### 8位、16位、32位、64位、128位

所謂8位、16位、32位、64位、128位等術語有時指匯流排寬度，有時指指令寬度（在定長指令集中），而在作業系統理論中主要是指記憶體定址的寬度。如果記憶體的定址寬度是16位，那麼每一個記憶體地址可以用16個二進位位來表示，也就是說可以在64KB的範圍內定址。同樣道理32位的寬度對應4GB的定址範圍，64位的寬度對應16 Exabyte的定址範圍。記憶體定址範圍並非僅僅是對作業系統而言的，其他類型的軟體的設計有時也會被定址範圍而影響。但是在作業系統的設計與實現中，定址範圍卻有著更為重要的意義。

在早期的16位作業系統中，由於64KB的定址範圍太小，大都都採用「段」加「線性地址」的二維平面地址空間的設計。分配記憶體時通常需要考慮「段置換」的問題，同時，應用程序所能夠使用的地址空間也往往有比較小的上限。

在32位作業系統中，4GB的定址範圍對於一般應用程序來說是綽綽有餘的，因而，通常使用一維的線性地址空間，而不使用「段」。

## 參考文獻

### 來源

- （俗稱「恐龍書」，OS教科書「聖經」）
- （Linux由此書而啟發，可惜新版本將實作內容移除）

## 參閱

- 電腦
- 作業系統內核
- 實時作業系統-分時系統-多任務-嵌入式系統-單一使用者-多用戶
- 對稱多處理機（SMP）-集群（Cluster）-分布式計算
- 64位作業系統
- 作業系統列表

## 外部連結

- OS的歷史
- 簡略OS介紹的教育網站....
- OSDP，所有作業系統的文件網站
- Unix OS家族的歷史樹
- Windows的歷史
- TLDP，Linux核心徹底講解，適用於想要徹底了解OS核心結構者
- 作業系統原理介紹