簡介,歷史,1980年代前,1980年代,1990年代,今日,個人計算機,大型機,嵌入式,類Unix系統,微軟Windows,Mac OS X,Chrome OS,其他,未來,功能,進程管理,記憶體管理,磁碟與檔案系統,網路,安全,內部通訊安全,用戶界面,驅動程式,結構,分類,核心結構,通用與專用、嵌入式,實時與非實時,8位、16位、32位、64位、128位,
簡介
作業系統(英語:operating system,
縮寫作
OS)是管理
計算機硬體與
軟體資源的
電腦程式,同時也是計算機系統的核心與基石。作業系統需要處理如管理與配置
記憶體、決定系統資源供需的優先次序、控制輸入與輸出設備、操作
網路與管理
檔案系統等基本事務。作業系統也提供一個讓用戶與系統互動的操作界面。
作業系統的類型非常多樣,不同機器安裝的作業系統可從簡單到複雜,可從
行動電話的
嵌入式系統到
超級計算機的大型作業系統。許多作業系統製造者對它涵蓋範疇的定義也不盡一致,例如有些作業系統集成了
圖形用戶界面,而有些僅使用
命令行界面,而將圖形用戶界面視為一種非必要的應用程式。
歷史
主條目:作業系統歷史
綜觀計算機之歷史,作業系統與計算機硬體的發展息息相關。作業系統之本意原為提供簡單的工作排序能力,後為輔助更新更複雜的硬體設施而漸漸演化。從最早的批量模式開始,分時機制也隨之出現,在多處理器時代來臨時,作業系統也隨之添加多處理器協調功能,甚至是
分散式系統的協調功能。其他方面的演變也類似於此。另一方面,在個人計算機上,個人計算機之作業系統因襲大型機的成長之路,在硬體越來越複雜、強大時,也逐步實踐以往只有大型機才有的功能。
總而言之,作業系統的歷史就是一部解決計算機系統需求與問題的歷史。
1980年代前
第一部計算機並沒有作業系統。這是由於早期計算機的創建方式(如同建造機械
算盤)與性能不足以運行如此程式。但在1947年
美國貝爾實驗室的
肖克利、
巴丁和
布拉頓組成的研究小組發明的
電晶體,以及
莫里斯·威爾克斯發明的
微程式方法,使得計算機不再是機械設備,而是電子產品。系統管理工具以及簡化硬體操作流程的程式很快就出現了,且成為作業系統的起源。到了1960年代早期,商用計算機製造商製造了
批處理系統,此系統可將工作的建置、調度以及運行
序列化。此時,廠商為每一台不同型號的計算機創造不同的作業系統,因此為某計算機而寫的程式無法移植到其他計算機上運行,即使是同型號的計算機也不行。
到了1964年,IBM System/360推出了一系列用途與價位都不同的
大型機,而它們都共享代號為
OS/360的作業系統(而非每種產品都用量身訂做的作業系統)。讓單一作業系統適用於整個系列的產品是System/360成功的關鍵,且實際上IBM目前的大型系統便是此系統的後裔,為System/360所寫的應用程式依然可以在現代的IBM機器上運行。
OS/360也包含另一個優點:永久貯存設備—
硬碟的面世(IBM稱為
DASD)。另一個關鍵是
分時概念的建立:將大型機珍貴的時間資源適當分配到所有用戶身上。分時也讓用戶有獨占整部機器的感覺;而
Multics的分時系統是此時眾多新作業系統中實踐此觀念最成功的。
1980年代
第一代
微型計算機並不像大型機或小型計算機,沒有裝設作業系統的需求或能力;它們只需要最基本的作業系統,通常這種作業系統都是從
ROM讀取的,此種程式被稱為監視程式(Monitor)。1980年代,家用計算機開始普及。通常此時的計算機擁有8-bit處理器加上64KB
存儲器、
顯示器、
鍵盤以及低音質
喇叭。而80年代早期最著名的套裝計算機為使用微處理器6510(6502晶片特別版)的Commodore C64。此計算機沒有作業系統,而是以一8KB唯讀存儲器
BIOS初始化彩色顯示器、鍵盤以及軟碟驅動器和印表機。它可用8KB唯讀存儲器
BASIC語言來直接操作BIOS,並依此撰寫程式,大部分是遊戲。此BASIC語言的
解釋器勉強可算是此計算機的作業系統,當然就沒有
核心或軟硬體保護機制了。此計算機上的遊戲大多跳過BIOS層次,直接控制硬體。
家用計算機C64的抽象架構 |
簡單應用程式 | | |
| | |
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的成功使得
微軟成為地球上最賺錢的公司之一。
而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架構圖 |
用戶 模式 | |
| |
| 簡單庫(opendbm、sin等) | |
C庫(open、fopen、socket、exec、calloc等) |
核心 模式 | 系統中斷、調用、錯誤等軟硬體訊息 |
核心(驅動程式、進程、網上、記憶體管理等) |
硬體(處理器、記憶體、各種設備) |
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抽象架構 |
用戶 模式 | | Win32 應用程式 | | Win16 應用程式 | |
| 其他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為最主要的另類選擇,直至今日。
個人計算機
個人計算機市場目前分為兩大陣營,此兩種架構分別有支持的作業系統:
大型機
最早的作業系統是針對20世紀60年代的大型主結構開發的,由於對這些系統在軟體方面做了巨大投資,因此原來的計算機廠商繼續開發與原來作業系統相兼容的硬體與作業系統。這些早期的作業系統是現代作業系統的先驅。現在仍被支持的大型主機作業系統包括:
Burroughs MCP--B5000,1961 to
UnisysClearpath/MCP, present.
IBM
OS/360--IBM System/360, 1964 toIBM zSeries, present
UNIVACEXEC 8--UNIVAC 1108, 1964, to
UnisysClearpath Dorado, present.
現代的大型主機一般也可運行Linux或Unix變種。
嵌入式
類Unix系統
類Unix系統可在非常多的處理器架構下運行,在
伺服器系統上有很高的使用率,例如大專院校或工程套用的
工作站。
經歷數年的披荊斬棘,自由
開源的Linux系統逐漸蠶食以往專利軟體的專業領域,例如以往計算機動畫運算巨擘──矽谷圖形公司(SGI)的
IRIX系統已被Linux家族及
貝爾實驗室研發小組設計的九號項目與
Inferno系統取代,皆用於分散表達式環境。它們並不像其他Unix系統,而是選擇內置
圖形用戶界面。九號項目原先並不普及,因為它剛推出時並非自由軟體。後來改在自由及開源軟體許可證Lucent Public License發布後,便開始擁有廣大的用戶及社群。Inferno已被售予Vita Nuova並以GPL/MIT許可證發布。
當前,計算機按照計算能力排名世界500強中472台使用Linux,6台使用Windows,其餘為各類
BSD等Unix。
微軟Windows
雖然由於人們對於開放原始碼作業系統興趣的提升,Windows的市場占有率有所下降,但是到2004年為止,Windows作業系統在世界範圍內占據了桌面作業系統90%的市場。
Windows系統也被用在低級和中階伺服器上,並且支持網頁服務的資料庫服務等一些功能。最近微軟花費了很大研究與開發的經費用於使Windows擁有能運行企業的大型程式的能力。
Windows XP在2001年10月25日發布,2004年8月24日發布服務包2(Service Pack 2),2008年4月21日發布最新的服務包3(Service Pack 3)。
Mac OS X
macOS,前稱“Mac OS X”或“OS X”,是一套運行於蘋果
Macintosh系列計算機上的作業系統。Mac OS是首個在商用領域成功的
圖形用戶界面系統。Macintosh開發成員包括比爾·阿特金森(Bill Atkinson)、
傑夫·拉斯金(Jef Raskin)和安迪·赫茨菲爾德(Andy Hertzfeld)。從OS X 10.8開始在名字中去掉Mac,僅保留OSX和版本號。2016年6月13日在WWDC2016上,蘋果公司將OS X更名為macOS,現行的最新的系統版本是10.14,即
macOS Mojave。
Chrome OS
Google Chrome OS是一項Google的輕型的、基於網路的計算機作業系統計畫,其基於Google的瀏覽器
Google Chrome的Linux核心。
其他
少數較舊的OS今日依然在一些需要穩定性的市場中活躍,例如IBM的
OS/2、
BeOS以及XTS-400。
在達康時代狂潮過後,如
AmigaOS與RISC OS等少數人使用的OS依然持續建立,以滿足狂熱的愛好者社群與特殊專業用戶。
優秀的作業系統必定要具備能讓各種能力級別的用戶滿足各種需求的工具包可視化的高效簡便程式環境,以程式來創建程式,就如立法的法律指導規範新的法案的創建。這其實是作業系統所隱含的一部分,決定了可以有多強的擴充能力。比如,某個作業系統有對應的開發者工具包集成環境程式並且是個可視化的,還能讓能力不太高的人一看能懂的,用於修改某個聲音合成器包含頻譜顯示,可要是作業系統本身不支持也沒有提供可用的工具程式,就會變得很繁瑣,很可能為了達到這個目標,開發者就要預備好各種相關的工具程式,甚至自己來編寫一系列相關的工具程式創建專門的工具包,最後還要檢查代碼。若是有人想通過音樂來生成五線譜,要對類似標記語言的五線譜規則對應一下,對各種音色,音準採集並總結出一整套規律,通過聲音識別可以識別出樂器的類別等,進而標出樂符完成從聲音到樂譜的轉換並生成。可是對人聲卻又更為複雜也不必要如此。若是需要用聲音的波形圖重現聲音,沒有相關的工具集是相當難實現,另外只有使用同一套聲音的波形繪製規則的所生成的波形圖用來再現的聲音才是原來的聲音。
在作為商品出售的作業系統軟體的歷史中常常因為其中包含的瀏覽器,媒體播放器在美國遭到反壟斷起訴,差點使得功能上殘缺不全。少數作業系統軟體能夠提供較為全面的App和實用工具程式。
作業系統軟體的編譯也需要對應的編譯環境。
在同一台計算機上運行不同的作業系統軟體,就能夠以不同的方式來使用計算機資源。比如,在Mac上運行OS X和Windows以兩種不同的技術
OpenCL,Core Image:
DirectX來使用圖形卡實現類似的作用。
通過圖像識別和聲音識別來進行信息搜尋。
能夠滿足不同需求所要求的精確程度對時間的精細劃分,以及尺度細分可以互聯,同步,協調原本必須由多個人協同合作才能完成的隨時需要調整並相互同步的操控作業,這就必須有即時訊息傳送顯示,可視化的用於協調同步計畫任務的配置腳本,以及執行這樣計畫任務的完整組件。
未來
研究與創建未來的作業系統依舊進行著。作業系統朝提供更省電、網上化、易用、華麗的用戶界面的方向來改進。類UNIX OS通過和
桌面環境開發者協作,正努力讓自己改進使用環境。
eyeOS是一套基於PHP實現的半開源模擬雲計算作業系統,但其實質只是在網上瀏覽器中提供一種類似無界限的類獨立作業系統,其並非於任何類似虛擬化中實現的真正計算機作業系統,能提供諸如Word、PPT、Excel的線上處理功能…
GNU Hurd是一個以完全兼容Unix並加強許多功能為目標的微核心架構。微軟
Singularity是一個奠基於
.Net並以創建較佳存儲器保護機制為目標的研究項目。
功能
作業系統位於底層硬體與用戶之間,是兩者溝通的橋樑。用戶可以通過作業系統的用戶界面,輸入命令。作業系統則對命令進行解釋,驅動硬體設備,實現用戶要求。以現代標準而言,一個標準PC的作業系統應該提供以下的功能:
進程管理
不管是常駐程式或者應用程式,他們都以
進程為標準運行單位。當年運用
馮·諾伊曼結構建造計算機時,每個
中央處理器最多只能同時運行一個進程。早期的作業系統(例如DOS)也不允許任何程式打破這個限制,且DOS同時只有運行一個進程(雖然DOS自己宣稱他們擁有終止並等待駐留能力,可以部分且艱難地解決這問題)。現代的作業系統,即使只擁有一個CPU,也可以利用
多進程(multitask)功能同時執行多個進程。
進程管理指的是作業系統調整多個進程的功能。
由於大部分的計算機只包含一顆中央處理器,在宏核心(Core)的情況下多進程只是簡單迅速地切換各進程,讓每個進程都能夠運行,在多核心或多處理器的情況下,所有進程透過許多協同技術在各處理器或核心上轉換。越多進程同時運行,每個進程能分配到的時間比率就越小。很多作業系統在遇到此問題時會出現諸如音效斷續或滑鼠跳格的情況(稱做顛簸(Thrashing),一種作業系統只能不停運行自己的管理程式並耗盡系統資源的狀態,其他用戶或硬體的程式皆無法運行。進程管理通常實踐了分時的概念,大部分的作業系統可以利用指定不同的特權檔次(priority),為每個進程改變所占的分時比例。特權越高的進程,運行優先權越高,單位時間內占的比例也越高。互動式作業系統也提供某種程度的反饋機制,讓直接與用戶互動的進程擁有較高的特權值。
除了進程管理之外,作業系統尚有擔負起
進程間通信(IPC)、進程異常終止處理以及
死鎖(Dead Lock)偵測及處理等較為艱深的問題。
在進程之下尚有
執行緒的問題,但是大部分的作業系統並不會處理執行緒所遭遇的問題,通常作業系統僅止於提供一組API讓用戶自行操作或透過
虛擬機的管理機制控制執行緒之間的互動。
記憶體管理
根據
帕金森定律:“
你給程式再多記憶體,程式也會想盡辦法耗光”,因此
程式設計師通常希望系統給他
無限量且
無限快的存儲器。大部分的現代計算機存儲器架構都是層次結構式的,最快且數量最少的
暫存器為首,然後是
快取、
存儲器以及最慢的磁碟存儲設備。而作業系統的
存儲器管理提供查找可用的記憶空間、配置與釋放記憶空間以及交換存儲器和低速存儲設備的內含物……等功能。此類又被稱做
虛擬記憶體管理的功能大幅增加每個進程可獲得的記憶空間(通常是4
GB,即使實際上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。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協定等。
安全
大多數作業系統都含有某種程度的
信息安全機制。信息安全機制主要基於兩大理念:
作業系統提供外界直接或間接訪問數種資源的管道,例如本地端磁碟驅動器的檔案、受保護的特權
系統調用、用戶的隱私數據與系統運行的程式所提供的服務。
作業系統有能力
認證資源訪問的請求。允許通過認證的請求並拒絕無法通過的非法請求,並將適當的權力
授權(
Authorization)給此請求。有些系統的認證機制僅簡略地把資源分為特權或非特權,且每個請求都有獨特的身份識別號碼,例如用戶名。資源請求通常分成兩大種類:
內部來源:通常是一個正在運行的程式發出的資源請求。在某些系統上,一個程式一旦可執行就可做任何事情(例如
DOS時代的
病毒),但通常作業系統會給程式一個識別代號,並且在此程式發出請求時,檢查其代號與所需資源的訪問許可權關係。
外部來源:從
非本地端計算機而來的資源請求,例如遠程登錄本機計算機或某些網上連線請求(
FTP或
HTTP)。為了識別這些外部請求,系統也許會對此請求提出認證要求。通常是請求輸入用戶名以及相對應的密碼。系統有時也會套用諸如磁卡或生物識別數據的它種認證方法。在某些例子,例如網上通信上,通常不需通過認證即可訪問資源(例如匿名訪問的FTP伺服器或
P2P服務)。
內部通訊安全
內部信息安全可視為防止正在運行的程式任意訪問系統資源的手段。大多作業系統讓普通程式可直接操作計算機的
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)時所需的中斷處理函式。
設計驅動程式的主要目的在於操作抽象化,任何硬體模組,既使是同一類的設備,在硬體設計面上也有巨大差異。廠商推出的較新模組通常更可靠更有效率,控制方法也會有所不同。計算機與其作業系統每每不能預期那些現有與新設備的變異之處,因此無法知道其操作方法。為解決此問題作業系統通常會主動制訂每種設備該有的操作方式,而驅動程式功能則是將那些作業系統制訂的行為描述,轉譯為可讓設備了解的自定義操作手法。
理論上適合的驅動程式一旦安裝,相對應的新設備就可以無誤地運行。此新驅動程式可以讓此設備完美地切合在作業系統中,讓用戶察覺不到這是作業系統原本沒有的功能。
結構
作業系統理論研究者有時把作業系統分成四大部分:
當然,本節所提出的四部結構觀也絕非放之四海皆準。例如,在早期的微軟視窗作業系統中,各部分耦合程度很深,難以區分彼此。而在使用
外核結構的作業系統中,則根本沒有驅動程式的概念。因而,本節的討論只適用於一般情況,具體特例需具體分析。
作業系統中四大部分的不同布局,也就形成了幾種整體結構的分野。常見的結構包括:簡單結構、層結構、微核心結構、垂直結構、和
虛擬機結構。
分類
核心結構
核心是作業系統最核心最基礎的構件,其結構往往對作業系統的外部特性以及套用領域有著一定程度的影響。儘管隨著理論和實踐的不斷演進,作業系統高層特性與核心結構之間的耦合有日趨縮小之勢,但習慣上,核心結構仍然是作業系統分類之常用標準。
單核心結構是作業系統中各核心部件雜然混居的形態,該結構產生於1960年代(亦有1950年代初之說,尚存爭議),歷史最長,是作業系統核心與外圍分離時的最初形態。
微核心結構是1980年代產生出來的較新的核心結構,強調結構性部件與功能性部件的分離。20世紀末,基於微核心結構,理論界中又發展出了超微核心與外核心等多種結構。儘管自1980年代起,大部分理論研究都集中在以微核心為首的“新興”結構之上,然而,在套用領域之中,以單核心結構為基礎的作業系統卻一直占據著主導地位。
在眾多常用作業系統之中,除了
QNX和基於Mach的UNIX等個別系統外,幾乎全部採用單核心結構,例如大部分的
Unix、
Linux,以及
Windows(
微軟聲稱Windows NT是基於改良的微核心架構的,儘管理論界對此存有異議)。 微核心和超微核心結構主要用於研究性作業系統,還有一些
嵌入式系統使用外核。
基於單核心的作業系統通常有著較長的歷史淵源。例如,絕大部分UNIX的家族史都可上溯至1960年代。該類作業系統多數有著相對古老的設計和實現(例如某些UNIX中存在著大量1970年代、1980年代的代碼)。另外,往往在性能方面略優於同一套用領域中採用其他核心結構的作業系統(但通常認為此種性能優勢不能完全歸功於單核心結構)。
通用與專用、嵌入式
通用作業系統是面向一般沒有特定套用需求的作業系統。由於沒有特定的套用需求,通用作業系統為了適應更廣泛的套用,需要支持更多的硬體與軟體,需要針對所有的用戶體驗,對系統進行更新。通用作業系統是一個工程量繁重的作業系統。
實時與非實時
“
實時作業系統”(Real Time OS)泛指所有據有一定實時資源調度以及通訊能力的作業系統。而所謂“實時”,不同語境中往往有著非常不同的意義。某些時候僅僅用作“高性能”的同義詞。但在作業系統理論中“實時性”所指的通常是特定操作所消耗的時間(以及空間)的上限是可預知的。比如,如果說某個作業系統提供實時記憶體分配操作,那也就是說一個記憶體分配操作所用時間(及空間)無論如何也不會超出作業系統所承諾的上限。實時性在某些領域非常重要,比如在工業控制、醫療器材、影音頻合成、以及軍事領域,實時性都是無可或缺的特性。
在
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的定址範圍對於一般應用程式來說是綽綽有餘的,因而,通常使用一維的線性地址空間,而不使用“段”。