作業系統[計算機管理控制程式]

作業系統[計算機管理控制程式]

作業系統(英語:operating system,縮寫作 OS)是管理計算機硬體與軟體資源的電腦程式,同時也是計算機系統的核心與基石。作業系統需要處理如管理與配置記憶體、決定系統資源供需的優先次序、控制輸入與輸出設備、操作網路與管理檔案系統等基本事務。作業系統也提供一個讓用戶與系統互動的操作界面。 作業系統的類型非常多樣,不同機器安裝的作業系統可從簡單到複雜,可從行動電話的嵌入式系統到超級計算機的大型作業系統。許多作業系統製造者對它涵蓋範疇的定義也不盡一致,例如有些作業系統集成了圖形用戶界面,而有些僅使用命令行界面,而將圖形用戶界面視為一種非必要的應用程式。

基本信息

簡介

作業系統(英語:operating 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的抽象架構
簡單應用程式機器語言
(遊戲直接操作)
8kBASICROM
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 toUnisysClearpath/MCP, present.

•IBMOS/360--IBM System/360, 1964 toIBM zSeries, present

•UNIVACEXEC 8--UNIVAC 1108, 1964, toUnisysClearpath Dorado, present.

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

嵌入式

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

類Unix系統

主條目:類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強中472台使用Linux,6台使用Windows,其餘為各類BSD等Unix。

微軟Windows

主條目:Microsoft 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(Service Pack 3)。

微軟上一款作業系統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 10則是於2015年7月29日發售。

Mac OS X 10.7

主條目:Mac OS和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,現行的最新的系統版本是macOS High Sierra。

Chrome OS

主條目:Google 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上運行OS X和Windows以兩種不同的技術OpenCL,Core Image:DirectX來使用圖形卡實現類似的作用。

通過圖像識別和聲音識別來進行信息搜尋。

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

未來

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

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

GNU Hurd是一個以完全兼容Unix並加強許多功能為目標的微核心架構。微軟Singularity是一個奠基於.Net並以創建較佳存儲器保護機制為目標的研究項目。

功能

作業系統位於底層硬體與用戶之間,是兩者溝通的橋樑。用戶可以通過作業系統的用戶界面,輸入命令。作業系統則對命令進行解釋,驅動硬體設備,實現用戶要求。以現代標準而言,一個標準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。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)時所需的中斷處理函式。

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

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

結構

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

•驅動程式- 最底層的、直接控制和監視各類硬體的部分,它們的職責是隱藏硬體的具體細節,並向其他部分提供一個抽象的、通用的接口。

•核心- 作業系統之最核心部分,通常運行在最高特權級,負責提供基礎性、結構性的功能。

•支承庫- (亦作“接口庫”)是一系列特殊的程式庫,它們職責在於把系統所提供的基本服務包裝成應用程式所能夠使用的編程接口(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的定址範圍對於一般應用程式來說是綽綽有餘的,因而,通常使用一維的線性地址空間,而不使用“段”。

相關詞條

相關搜尋