1. 程式人生 > >[Operating System] 操作系統

[Operating System] 操作系統

一起 功能模塊 斷點 運行 種類型 回收 原子性 啟動 size

1.操作系統的概念

計算機系統自下而上可粗分為四個部分:硬件、操作系統、應用程序和用戶(這裏的劃分與計算機組成原理的分層不同)。操作系統管理各種計算機硬件,為應用程序提供基礎,並充當計算機硬件與用戶之間的中介。

操作系統(Operating System, OS)是指控制和管理整個計算機系統的硬件和軟件資源,並合理地組織調度計算機的工作和資源的分配,以提供給用戶和其他軟件方便的接口和環境的程序集合。計算機操作系統是隨著計算機研究和應用的發展逐步形成並發展起來的,它是計算機系統中最基本的系統軟件。

2.操作系統的特征

操作系統的基本特征包括並發、共享、虛擬和異步。

並發(Concurrence)

並發是指兩個或多個事件在同一時間間隔內發生。操作系統的並發性是指計算機系統中同時存在多個運行著的程序,因此它具有處理和調度多個程序同時執行的能力。在操作系統 中,引入進程的目的是使程序能並發執行。

註意同一時間間隔(並發)和同一時刻(並行)的區別。在多道程序環境下,一段時間內,宏觀上有多道程序在同時執行,而在每一時刻,單處理機環境下實際僅能有一道程序執行,故微觀上這些程序還是在分時地交替執行。橾作系統的並發性是通過分時得以實現的。註意,並行性是指系統具有可以同時進行運算或操作的特性,在同一時刻完成兩種或兩種以上的工作。並行性需要有相關硬件的支持,如多流水線或多處理機硬件環境。

共享(Sharing)

資源共享即共享,是指系統中的資源可供內存中多個並發執行的進程共同使用。共享可分為以下兩種資源共享方式:

1)互斥共享方式

系統中的某些資源,如打印機、磁帶機,雖然它們可以提供給多個進程使用,但為使所打印或記錄的結果不致造成混淆,應規定在一段時間內只允許一個進程訪問該資源。

為此,當進程A訪問某資源時,必須先提出請求,如果此時該資源空閑,系統便可將之分配給進程A使用,此後若再有其他進程也要訪問該資源時(只要A未用完)則必須等待。僅當進程A訪問完並釋放該資源後,才允許另一進程對該資源進行訪問。我們把這種資源共享方式稱為互斥式共享,而把在一段時間內只允許一個進程訪問的資源稱為臨界資源或獨占資源。計算機系統中的大多數物理設備,以及某些軟件中所用的棧、變量和表格,都屬於臨界資源,它們都要求被互斥地共享。

2)同時訪問方式

系統中還有另一類資源,允許在一段時間內由多個進程“同時”對它們進行訪問。這裏所謂的“同時”往往是宏觀上的,而在微觀上,這些進程可能是交替地對該資源進行訪問即 “分時共享”。典型的可供多個進程“同時”訪問的資源是磁盤設備,一些用重入碼編寫的文件也可以被“同時”共享,即若幹個用戶同時訪問該文件。

並發和共享是操作系統兩個最基本的特征,這兩者之間又是互為存在條件的:

資源共享是以程序的並發為條件的,若系統不允許程序並發執行,則自然不存在資源共享問題;

若系統不能對資源共享實施有效的管理,也必將影響到程序的並發執行,甚至根本無法並發執行。

虛擬(Virtual)

虛擬是指把一個物理上的實體變為若幹個邏輯上的對應物。物理實體(前者)是實的,即實際存在的;而後者是虛的,是用戶感覺上的事物。用於實現虛擬的技術,稱為虛擬技術。在操作系統中利用了多種虛擬技術,分別用來實現虛擬處理器、虛擬內存和虛擬外部設備

等。

在虛擬處理器技術中,是通過多道程序設計技術,讓多道程序並發執行的方法,來分時使用一個處理器的。此時,雖然只有一個處理器,但它能同時為多個用戶服務,使每個終端用戶都感覺有一個中央處理器(CPU)在專門為它服務。利用多道程序設計技術,把一個物理上的CPU虛擬為多個邏輯上的CPU,稱為虛擬處理器。

類似地,可以通過虛擬存儲器技術,將一臺機器的物理存儲器變為虛擬存儲器,以便從邏輯上來擴充存儲器的容量。當然,這時用戶所感覺到的內存容量是虛的。我們把用戶所感覺到的存儲器(實際是不存在的)稱為虛擬存儲器。還可以通過虛擬設備技術,將一臺物理I/O設備虛擬為多臺邏輯上的I/O設備,並允許每個用戶占用一臺邏輯上的I/O設備,這樣便可以使原來僅允許在一段時間內由一個用戶訪問的設備(即臨界資源),變為在一段時間內允許多個用戶同時訪問的共享設備。

因此,操作系統的虛擬技術可歸納為:時分復用技術,如處理器的分時共享;空分復用技術,如虛擬存儲器。

異步(Asynchronism)

在多道程序環境下,允許多個程序並發執行,但由於資源有限,進程的執行不是一貫到底,而是走走停停,以不可預知的速度向前推進,這就是進程的異步性。

異步性使得操作系統運行在一種隨機的環境下,可能導致進程產生與時間有關的錯誤 (就像對全局變量的訪問順序不當會導致程序出錯一樣)。但是只要運行環境相同,操作系統必須保證多次運行進程,都獲得相同的結果。

3.操作系統的功能和目標

為了給多道程序提供良好的運行環境,操作系統應具有以下幾方面的功能:處理機管理、 存儲器管理、設備管理和文件管理。為了方便用戶使用操作系統,還必須向用戶提供接口。同時操作系統可用來擴充機器,以提供更方便的服務、更高的資源利用率。

操作系統作為計算機系統資源的管理者

1)處理機管理

在多道程序環境下,處理機的分配和運行都以進程(或線程)為基本單位,因而對處理機的管理可歸結為對進程的管理。並發時在計算機內同時運行多個進程,所以,進程何時創建、何時撤銷、如何管理、如何避免沖突、合理共享就是進程管理的最主要的任務。進程管理的主要功能有:進程控制、進程同步、進程通信、死鎖處理、處理機調度等。

2)存儲器管理

存儲器管理是為了給多道程序的運行提供良好的環境,方便用戶使用以及提高內存的利用率,主要包括內存分配、地址映射、內存保護與共享和內存擴充等功能。

3)文件管理

計算機中的信息都是以文件的形式存在的,操作系統中負責文件管理的部分稱為文件系統。文件管理包括文件存儲空間的管理、目錄管理及文件讀寫管理和保護等。

4)設備管理

設備管理的主要任務是完成用戶的I/O請求,方便用戶使用各種設備,並提高設備的利用率,主要包括緩沖管理、設備分配、設備處理和虛擬設備等功能。

為方便用戶使用計算機,操作系統還提供了用戶接口。操作系統提供的接口主要分為兩類:

一類是命令接口,用戶利用這些操作命令來組織和控制作業的執行;另一類是程序接口,編程人員可以使用它們來請求操作系統服務。

1)命令接口

使用命令接口進行作業控制的主要方式有兩種,即聯機控制方式和脫機控制方式。按作業控制方式的不同,可以將命令接口分為聯機命令接口和脫機命令接口。

聯機命令接口又稱交互式命令接口,適用於分時或實時系統的接口。它由一組鍵盤操作命令組成。用戶通過控制臺或終端輸入操作命令,向系統提出各種服務要求。用戶每輸入完一條命令,控制權就轉入操作系統的命令解釋程序,然後由命令解釋程序對輸入的命令解釋並執行,完成指定的功能。之後,控制權又轉回到控制臺或終端,此時用戶又可以輸入下一條命令。

脫機命令接口又稱批處理命令接口,即適用於批處理系統,它由一組作業控制命令(或稱作業控制語句)組成。脫機用戶不能直接幹預作業的運行,應事先用相應的作業控制命令穹成一份作業操作說明書,連同作業一起提交給系統。當系統調度到該作業時,由系統中的命令解釋程序對作業說明書上的命令或作業控制語句遂條解釋執行,從而間接地控制作業的運行。

2)程序接口

程序接口由一組系統調用命會(簡稱系統調用,也稱廣義指令)組成。用戶通過在程序中使用這些系統調用命令來請求操作系統為其提供服務。用戶在程序中可以直接使用這組系統調用命令向系統提出各種服務要求,如使用各種外部設備,進行有關磁盤文件的操作,申請分配和回收內存以及其他各種控制要求。

而當前最為流行的是圖形用戶界面(GUI)即圖形接口,用戶通過鼠標和鍵盤,在圖形界面上單擊或使用快捷鍵就能很方便地使用操作系統。有些系統提供了上述三種接口,但 GUI 最終是通過調用程序接口實現的,嚴格地說它不屬於操作系統的一部分。

4.操作系統的運行機制

計算機系統中,通常CPU執行兩種不同性質的程序:一種是操作系統內核程序;另一種是用戶自編程序或系統外層的應用程序。對操作系統而言,這兩種程序的作用不同,前者是後者的管理者,因此“管理程序”要執行一些特權指令,而“被管理程序”出於安全考慮不能執行這些指令。所謂特權指令,是指計算機中不允許用戶直接使用的指令,如I/O指令、 置中斷指令,存取用於內存保護的寄存器、送程序狀態字到程序狀態字寄存器等指令。操作系統在具體實現上劃分了用戶態(目態)和核心態(管態),以嚴格區分兩類程序。

在軟件工程思想和結構程序設計方法的影響下誕生的現代操作系統,幾乎都是層次式的結構。操作系統的各項功能分別被設置在不同的層次上。一些與硬件關聯較緊密的模塊,諸如時鐘管理、中斷處理、設備驅動等處於最底層。其次是運行頻率較髙的程序,諸如進程管理、存儲器管理和設備管理等。這兩部分內容構成了操作系統的內核。這部分內容的指令操作工作在核心態。

內核是計算機上配置的底層軟件,是計算機功能的延伸。不同系統對內核的定義稍有區別,大多數操作系統內核包括四個方面的內容。

1)時鐘管理

在計算機的各種部件中,時鐘是最關鍵的設備。時鐘的第一功能是計時,操作系統需要通過時鐘管理,向用戶提供標準的系統時間。另外,通過時鐘中斷的管理,可以實現進程的切換。諸如,在分時操作系統中,釆用時間片輪轉調度的實現;在實時系統中,按截止時間控制運行的實現;在批處理系統中,通過時鐘管理來衡量一個作業的運行程度等。因此,系統管理的方方面面無不依賴於時鐘。

2)中斷機制

引入中斷技術的初衷是提高多道程序運行環境中CPU的利用率,而且主要是針對外部設備的。後來逐步得到發展,形成了多種類型,成為操作系統各項操作的基礎。例如,鍵盤或鼠標信息的輸入、進程的管理和調度、系統功能的調用、設備驅動、文件訪問等,無不依賴於中斷機制。可以說,現代操作系統是靠中斷驅動的軟件。

中斷機制中,只有一小部分功能屬於內核,負責保護和恢復中斷現場的信息,轉移控制權到相關的處理程序。這樣可以減少中斷的處理時間,提高系統的並行處理能力。

3)原語

按層次結構設計的操作系統,底層必然是一些可被調用的公用小程序,它們各自完成一個規定的操作。其特點是:

它們處於操作系統的最底層,是最接近硬件的部分。

這些程序的運行具有原子性——其操作只能一氣呵成(這主要是從系統的安全性和便於管理考慮的)。

這些程序的運行時間都較短,而且調用頻繁。

通常把具有這些特點的程序稱為原語(Atomic Operation)。定義原語的直接方法是關閉中斷,讓它的所有動作不可分割地進行完再打開中斷。

系統中的設備驅動、CPU切換、進程通信等功能中的部分操作都可以定義為原語,使它們成為內核的組成部分。

4)系統控制的數據結構及處理

系統中用來登記狀態信息的數據結構很多,比如作業控制塊、進程控制塊(PCB)、設備控制塊、各類鏈表、消息隊列、緩沖區、空閑區登記表、內存分配表等。為了實現有效的管理,系統需要一些基本的操作,常見的操作有以下三種:

進程管理:進程狀態管理、進程調度和分派、創建與撤銷進程控制塊等。

存儲器管理:存儲器的空間分配和回收、內存信息保護程序、代碼對換程序等。

設備管理:緩沖區管理、設備分配和回收等。

從上述內容可以了解,核心態指令實際上包括系統調用類指令和一些針對時鐘、中斷和原語的操作指令。

5.中斷和異常

在操作系統中引入核心態和用戶態這兩種工作狀態後,就需要考慮這兩種狀態之間如何切換。操作系統內核工作在核心態,而用戶程序工作在用戶態。但系統不允許用戶程序實現核心態的功能,而它們又必須使用這些功能。因此,需要在核心態建立一些“門”,實現從用戶態進入核心態。在實際操作系統中,CPU運行上層程序時唯一能進入這些“門”的途徑就是通過中斷或異常。當中斷或異常發生時,運行用戶態的CPU會立即進入核心態,這是通過硬件實現的(例如,用一個特殊寄存器的一位來表示CPU所處的工作狀態,0表示核心態,1表示用戶態。若要進入核心態,只需將該位置0即可)。中斷是操作系統中非常重要的一個概念,對一個運行在計算機上的實用操作系統而言,缺少了中斷機制,將是不可想象的。

中斷(Interruption),也稱外中斷,指來自CPU執行指令以外的事件的發生,如設備發出的I/O結束中斷,表示設備輸入/輸出處理已經完成,希望處理機能夠向設備發下一個輸入 / 輸出請求,同時讓完成輸入/輸出後的程序繼續運行。時鐘中斷,表示一個固定的時間片已到,讓處理機處理計時、啟動定時運行的任務等。這一類中斷通常是與當前程序運行無關的事件,即它們與當前處理機運行的程序無關。

異常(Exception),也稱內中斷、例外或陷入(Trap),指源自CPU執行指令內部的事件,如程序的非法操作碼、 地址越界、算術溢出、虛存系統的缺頁以及專門的陷入指令等引起的事件。對異常的處理一般要依賴於當前程序的運行現場,而且異常不能被屏蔽,一旦出現應立即處理。

6.系統調用

所謂系統調用就是用戶在程序中調用操作系統所提供的一些子功能,系統調用可以被看做特殊的公共子程序。系統中的各種共享資源都由操作系統統一掌管,因此在用戶程序中,凡是與資源有關的操作(如存儲分配、進行I/0傳輸以及管理文件等),都必須通過系統調用方式向操作系統提出服務請求,並由操作系統代為完成。通常,一個操作系統提供的系統調用命令有幾十乃至上百條之多。

這些系統調用按功能大致可分為如下幾類:

  • 設備管理。完成設備的請求或釋放,以及設備啟動等功能。
  • 文件管理。完成文件的讀、寫、創建及刪除等功能。
  • 進程控制。完成進程的創建、撤銷、阻塞及喚醒等功能。
  • 進程通信。完成進程之間的消息傳遞或信號傳遞等功能。
  • 內存管理。完成內存的分配、回收以及獲取作業占用內存區大小及始址等功能。

顯然,系統調用運行在系統的核心態。通過系統調用的方式來使用系統功能,可以保證系統的穩定性和安全性,防止用戶隨意更改或訪問系統的數據或命令。系統調用命令是由操作系統提供的一個或多個子程序模塊實現的。

這樣,操作系統的運行環境可以理解為:用戶通過操作系統運行上層程序(如系統提供的命令解釋程序或用戶自編程序),而這個上層程序的運行依賴於操作系統的底層管理程序提供服務支持,當需要管理程序服務時,系統則通過硬件中斷機制進入核心態,運行管理程序;也可能是程序運行出現異常情況,被動地需要管理程序的服務,這時就通過異常處理來進入核心態。當管理程序運行結束時,用戶程序需要繼續運行,則通過相應的保存的程序現場退出中斷處理程序或異常處理程序,返回斷點處繼續執行。

在操作系統這一層面上,我們關心的是系統核心態和用戶態的軟件實現和切換,對於硬件層面的具體理解,可以結合“計算機組成原理”課程中有關中斷的內容進行學習。

下面列舉一些由用戶態轉向核心態的例子:

  • 用戶程序要求操作系統的服務,即系統調用。
  • 發生一次中斷。
  • 用戶程序中產生了一個錯誤狀態。
  • 用戶程序中企圖執行一條特權指令。
  • 從核心態轉向用戶態由一條指令實現,這條指令也是特權命令。一般是中斷返回指令。

註意:由用戶態進入核心態,不僅僅是狀態需要切換。而且,所使用的堆棧也可能需要由用戶堆棧切換為系統堆棧,但這個系統堆棧也是屬於該進程的。

7.操作系統的體系結構:大內核和微內核

操作系統的體系結構是一個開放的問題。正如上文所述,操作系統在核心態為應用程序提供公共的服務,那麽操作系統在核心態應該提供什麽服務、怎樣提供服務?有關這個問題的回答形成了兩種主要的體系結構:大內核和微內核。

大內核系統將操作系統的主要功能模塊都作為一個緊密聯系的整體運行在核心態,從而為應用提供高性能的系統服務。因為各管理模塊之間共享信息,能有效利用相互之間的有效特性,所以具有無可比擬的性能優勢。

但隨著體系結構和應用需求的不斷發展,需要操作系統提供的服務越來越多,而且接口形式越來越復雜,操作系統的設計規模也急劇增長,操作系統也面臨著“軟件危機”困境。為此,操作系統設計人員試圖按照復雜性、時間常數、抽象級別等因素,將操作系統內核分成基本進程管理、虛存、I/O與設備管理、IPC、文件系統等幾個層次,繼而定義層次之間的服務結構,提高操作系統內核設計上的模塊化。但是由於層次之間的交互關系錯綜復雜,定義清晰的層次間接口非常困難,復雜的交互關系也使得層次之間的界限極其模糊。

為解決操作系統的內核代碼難以維護的問題,於是提出了微內核的體系結構。它將內核中最基本的功能(如進程管理等)保留在內核,而將那些不需要在核心態執行的功能移到用戶態執行,從而降低了內核的設計復雜性。而那些移出內核的操作系統代碼根據分層的原則被劃分成若幹服務程序,它們的執行相互獨立,交互則都借助於微內核進行通信。

微內核結構有效地分離了內核與服務、服務與服務,使得它們之間的接口更加清晰,維護的代價大大降低,各部分可以獨立地優化和演進,從而保證了操作系統的可靠性。

微內核結構的最大問題是性能問題,因為需要頻繁地在核心態和用戶態之間進行切換,操作系統的執行開銷偏大。因此有的操作系統將那些頻繁使用的系統服務又移回內核,從而保證系統性能。但是有相當多的實驗數據表明,體系結構不是引起性能下降的主要因素,體系結構帶來的性能提升足以彌補切換開銷帶來的缺陷。為減少切換開銷,也有人提出將系統服務作為運行庫鏈接到用戶程序的一種解決方案,這樣的體系結構稱為庫操作系統。

8.疑難點

並行性與並發性的區別和聯系

並行性和並發性是既相似又有區別的兩個概念。並行性是指兩個或多個事件在同一時刻發生。並發性是指兩個或多個事件在同一時間間隔內發生。

在多道程序環境下,並發性是指在一段時間內,宏觀上有多個程序在同時運行,但在單處理器系統中每一時刻卻僅能有一道程序執行,故微觀上這些程序只能是分時地交替執行。倘若在計算機系統中有多個處理器,則這些可以並發執行的程序便被分配到多個處理器上,實現並行執行,即利用每個處理器來處理一個可並發執行的程序。
特權指令與非特權指令

所謂特權指令是指有特殊權限的指令,由於這類指令的權限最大,如果使用不當,將導致整個系統崩潰。比如:清內存、置時鐘、分配系統資源、修改虛存的段表或頁表、修改用戶的訪問權限等。如果所有的程序都能使用這些指令,那麽你的系統一天死機《回就不足為奇了。為了保證系統安全,這類指令只能用於操作系統或其他系統軟件,不直接提供給用戶使用。因此,特權指令必須在核心態執行。實際上,CPU在核心態下可以執行指令系統的全集。形象地說,特權指令就是那些兒童不宜的東西,而非特權指令則是老少皆宜。

為了防止用戶程序中使用特權指令,用戶態下只能使用非特權指令,核心態下可以使用全部指令。當在用戶態下使用特權指令時,將產生中斷以阻止用戶使用特權指令。所以把用戶程序放在用戶態下運行,而操作系統中必須使用特權指令的那部分程序在核心態下運行,保證了計算機系統的安全可靠。從用戶態轉換為核心態的唯一途徑是中斷或異常。
訪管指令與訪管中斷

訪管指令是一條可以在用戶態下執行的指令。在用戶程序中,因要求操作系統提供服務而有意識地使用訪管指令,從而產生一個中斷事件(自願中斷),將操作系統轉換為核心態,稱為訪管中斷。訪管中斷由訪管指令產生,程序員使用訪管指令向操作系統請求服務。

為什麽要在程序中引入訪管指令呢?這是因為用戶程序只能在用戶態下運行,如果用戶程序想要完成在用戶態下無法完成的工作,該怎麽辦?解決這個問題要靠訪管指令。訪管指令本身不是特權指令,其基本功能是讓程序擁有“自願進管”的手段,從而引起訪管中斷。

當處於用戶態的用戶程序使用訪管指令時,系統根據訪管指令的操作數執行訪管中斷處理程序,訪管中斷處理程序將按系統調用的操作數和參數轉到相應的例行子程序。完成服務功能後,退出中斷,返回到用戶程序斷點繼續執行。

[Operating System] 操作系統