操作系统(英語:Operating System,縮寫:OS)是一组主管并控制计算机操作、运用和运行硬件、软件資源和提供公共服务来组织用户交互的相互关联的系统软件程序,同时也是计算机系统的核心与基石。操作系统需要处理如管理與配置内存、決定系統資源供需的優先次序、控制輸入與輸出裝置、操作网络與管理文件系统等基本事務。操作系统也提供一個讓使用者與系統互動的操作界面。
「Operating System」的各地常用名稱 | |
---|---|
中国大陸 | 操作系统 |
臺灣 | 作業系統 |
港澳 | 作業系統 |
操作系统的型態非常多樣,不同機器安裝的操作系统可從簡單到複雜,可從行動電話的嵌入式系统到超級電腦的大型作業系統。許多操作系统製造者對它涵盖范畴的定义也不尽一致,例如有些操作系统整合了图形用户界面,而有些僅使用命令行界面,將图形用户界面視為一種非必要的應用程式。
歷史
綜觀電腦之歷史,作業系統與電腦硬體的發展息息相關。作業系統之本意原為提供簡單的工作排序能力,後為輔助更新更複雜的硬體設施而漸漸演化。從最早的批次模式開始,分時機制也隨之出現,在多處理器時代來臨時,作業系統也隨之添加多處理器協調功能,甚至是分散式系統的協調功能。其他方面的演變也類似於此。另一方面,在個人電腦上,個人電腦之作業系統因襲大型電腦的成長之路,在硬體越來越複雜、強大時,也逐步實踐以往衹有大型電腦才有的功能。
總而言之,作業系統的歷史就是一部解決電腦系統需求與問題的歷史。
第一部電腦並沒有作業系統。這是由於早期電腦的建立方式(如同建造機械算盤)與效能不足以執行如此程式。但在1947年發明了電晶體,以及莫里斯·威尔克斯發明的微程序方法,使得電腦不再是機械裝置,而是電子產品。系統管理工具以及簡化硬體操作流程的程式很快就出現了,且成為作業系統的起源。到了1960年代早期,商用電腦製造商製造了批次處理系統,此系統可將工作的建置、排程以及執行序列化。此時,廠商為每一台不同型號的電腦創造不同的作業系統,因此為某電腦而寫的程式無法移植到其他電腦上執行,即使是同型號的電腦也不行。
到了1964年,IBM System/360推出了一系列用途與價位都不同的大型電腦,而它們都共用代號為OS/360的作業系統(而非每種產品都用量身訂做的作業系統)。讓單一作業系統適用於整個系列的產品是System/360成功的關鍵,且實際上IBM目前的大型系統便是此系統的後裔,為System/360所寫的應用程式依然可以在現代的IBM機器上執行。
OS/360也包含另一個優點:永久貯存裝置—硬盘的面世(IBM稱為DASD)。另一個關鍵是分時概念的建立:將大型電腦珍貴的時間資源適當分配到所有使用者身上。分時也讓使用者有獨佔整部機器的感覺;而Multics的分時系統是此時眾多新作業系統中實踐此觀念最成功的。
1963年,奇異公司與貝爾實驗室合作以PL/I語言建立的Multics[3],是激發1970年代眾多作業系統建立的靈感來源,尤其是由AT&T貝爾實驗室的丹尼斯·里奇與肯·湯普遜所建立的Unix系統,為了實踐平台移植能力,此作業系統在1973年由C語言重寫;另一個廣為市場採用的小型電腦作業系統是VMS。
第一代微型计算机並不像大型電腦或小型電腦,沒有裝設作業系統的需求或能力;它們只需要最基本的作業系統,通常這種作業系統都是從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拜訪了蘋果電腦的史蒂夫·乔布斯,並且向他展示了此時全錄發展的圖形化使用者介面。蘋果電腦驚為天人,並打算向全錄購買此技術,但因帕羅奧多研究中心並非商業單位而是研究單位,因此全錄回絕了這項買賣。在此之後蘋果一致認為個人電腦的未來必定屬於圖形使用者介面,因此也開始發展自己的圖形化作業系統。
延續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家族指的是一族種類繁多的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系統。[4]
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%的市場。[5]
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日發售[6]。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日發售。而每次大更新後就更改版本號,目前最新為21H2。會在2025年10月25日停止支援Windows 10家用版及專業版
Windows 11於2021年10月5日發行ISO等安裝檔,但無發售盒裝版。是目前最新的Windows,也是唯一可以安裝Android App與只有64位元版的Windows
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 Sonoma。
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)給此請求。有些系統的認證機制僅簡略地把資源分為特權或非特權,且每個請求都有獨特的身份辨識號碼,例如使用者名稱。資源請求通常分成兩大種類:
除了允許/拒絕形式的安全機制,一個高安全等級的系統也會提供記錄選項,允許記錄各種請求對資源存取的行為(例如「誰曾經讀了這個檔案?」)。
肇因於軍方與商業組織將敏感資料記錄在電腦上,安全機制在操作系统歷史上是一個被長久關注與討論的問題。美國國防部(DoD)便創立了《可信賴之計算機系統評鑑程序》(TCSEC),此手冊確立了評鑑安全機制成效的基本原則。這對操作系统作者來說非常重要,因為TCSEC是用於評鑑、分類與選拔出用於處理、儲存與獲取敏感或機密資料的電腦系統的標準程序。
內部資訊安全可視為防止正在執行的程式任意存取系統資源的手段。大多操作系统讓普通程式可直接操作電腦的CPU,所以產生了一些問題,例如怎樣把可如操作系统一樣處理事務、執行同樣特殊指令的程式強迫停止,畢竟在此情境下,操作系统也只是另一個平起平坐的程式。為通用操作系统所生產的CPU通常於硬體層級上實踐了一定程度的特殊指令保護概念。通常特權層級較低的程式想要執行某些特殊指令時會被阻斷,例如直接存取像是硬碟之類的外部裝置。因此,程式必須得經由詢問操作系统,讓操作系统執行特殊指令來存取磁碟。因此操作系统就有機會檢查此程式的識別身份,並依此接受或拒絕它的請求。
在不支援特殊指令架構的硬體上,另一個也是唯一的保護方法,則是操作系统並不直接利用CPU執行使用者的程式,而是藉由模擬一個CPU或提供一P-code机系統(偽代碼執行機),像是Java一樣讓程式在虛擬機器上執行。
內部安全機制在多使用者電腦上特別重要:它允許每個系統使用者擁有自己個人的檔案與目錄,且其他使用者不能任意存取或刪除。因為任何程式都可能繞過操作系统的監控,更有可能繞過側錄程式的監控,擁有強制力的內部安全機制在側錄啟動時也非常重要。
通常一個作業系統會為其他網路上的電腦或使用者提供(主持)各種服務。這些服務通常藉由端口或操作系统網路地址後的數字存取點提供。通常此服務包括提供檔案共享(NFS)、列印共享、電子郵件、網頁服務與檔案傳輸協定(FTP)。外部資訊安全的最前線,是諸如防火墙等的硬體裝置。在操作系统內部也常設置許多種類的軟體防火牆。軟體防火牆可設定接受或拒絕在操作系统上執行的服務與外界的連線。因此任何人都可以安裝並執行某些不安全的網路服務,例如Telnet或FTP,並且設定除了某些自用通道之外阻擋其他所有連線,以達成防堵不良連線的機制。
今日大部分的操作系统都包含图形用户界面(GUI)。有幾類較舊的操作系统將圖形化使用者介面與核心緊密結合,例如最早的Windows與Mac OS實作產品。此種手法可提供較快速的圖形回應能力,且實作時不需切割模組因而較為省工,但是會有強烈副作用,例如圖形系統崩潰將導致整個系統崩潰,例如藍白當機畫面。許多近代的操作系统已模組化,將圖形介面的子系統與核心分開(已知Linux與Mac OS X原先就是如此設計,而某些擴充版本的Windows終於也採用此手法)。
許多操作系统允許使用者安裝或創造任何他們喜歡的图形用户界面[7]。大部分的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位等術語有時指匯流排寬度,有時指指令寬度(在定長指令集中),而在作業系統理論中主要是指記憶體定址的寬度。如果記憶體的定址寬度是16位,那麼每一個記憶體地址可以用16個二進位位來表示,也就是說可以在64KB的範圍內定址。同樣道理32位的寬度對應4GB的定址範圍,64位的寬度對應16 Exabyte的定址範圍。記憶體定址範圍並非僅僅是對作業系統而言的,其他類型的軟件的設計有時也會被定址範圍而影響。但是在作業系統的設計與實現中,定址範圍卻有着更為重要的意義。
在早期的16位作業系統中,由於64KB的定址範圍太小,大都都採用「段」加「線性地址」的二維平面地址空間的設計。分配記憶體時通常需要考慮「段置換」的問題,同時,應用程序所能夠使用的地址空間也往往有比較小的上限。
在32位作業系統中,4GB的定址範圍對於一般應用程序來說是綽綽有餘的,因而,通常使用一維的線性地址空間,而不使用「段」。
注释
参考文献
参閱
外部連結
Wikiwand in your browser!
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.