作業系統原理學習(三)
阿新 • • 發佈:2019-01-07
一、作業系統概述
1.1 作業系統的基本概念
在資訊化時代,軟體被稱為計算機系統的靈魂。而作為軟體核心的作業系統,已經與現代計算機系統密不可分、融為一體。計算機系統自下而上可粗分為四個部分:硬體、操作系 統、應用程式和使用者(這裡的劃分與計算機組成原理的分層不同)。作業系統管理各種計算機硬體,為應用程式提供基礎,並充當計算機硬體與使用者之間的中介。
硬體,如中央處理器、記憶體、輸入/輸出裝置等,提供了基本的計算資源。應用程式, 如字處理程式、電子製表軟體、編譯器、網路瀏覽器等,規定了按何種方式使用這些資源來解決使用者的計算問題。作業系統控制和協調各使用者的應用程式對硬體的分配與使用。
在計算機系統的執行過程中,作業系統提供了正確使用這些資源的方法。
綜上所述,作業系統(Operating System, OS)是指控制和管理整個計算機系統的硬體和軟體資源,併合理地組織排程計算機的工作和資源的分配,以提供給使用者和其他軟體方便的介面和環境的程式集合。 計算機作業系統是隨著計算機研究和應用的發展逐步形成並發展起來的,它是計算機系統中最基本的系統軟體。
1.2 作業系統的特徵
作業系統是一種系統軟體,但與其他的系統軟體和應用軟體有很大的不同,它有自己的特殊性即基本特徵。作業系統的基本特徵包括併發、共享、虛擬和非同步。這些概念對理解和掌握作業系統的核心至關重要,將一直貫穿於各個章節中。
併發(Concurrence)
併發是指兩個或多個事件在同一時間間隔內發生。作業系統的併發性是指計算機系統中同時存在多個執行著的程式,因此它具有處理和排程多個程式同時執行的能力。在作業系統 中,引入程序的目的是使程式能併發執行。注意同一時間間隔(併發)和同一時刻(並行)的區別
注意,並行性是指系統具有可以同時進行運算或操作的特性,在同一時刻完成兩種或兩種以上的工作。並行性需要有相關硬體的支援,如多流水線或多處理機硬體環境。
共享(Sharing)
資源共享即共享,是指系統中的資源可供記憶體中多個併發執行的程序共同使用。共享可分為以下兩種資源共享方式:1) 互斥共享方式
系統中的某些資源,如印表機、磁帶機,雖然它們可以提供給多個程序使用,但為使所列印或記錄的結果不致造成混淆,應規定在一段時間內只允許一個程序訪問該資源。為此,當程序A訪問某資源時,必須先提出請求,如果此時該資源空閒,系統便可將之分配給程序A使用,此後若再有其他程序也要訪問該資源時(只要A未用完)則必須等待。僅當程序A訪問完並釋放該資源後,才允許另一程序對該資源進行訪問。我們把這種資源共享方式稱為互斥式共享,而把在一段時間內只允許一個程序訪問的資源
2) 同時訪問方式
系統中還有另一類資源,允許在一段時間內由多個程序“同時”對它們進行訪問。這裡所謂的“同時”往往是巨集觀上的,而在微觀上,這些程序可能是交替地對該資源進行訪問即 “分時共享”。典型的可供多個程序“同時”訪問的資源是磁碟裝置,一些用重入碼編寫的檔案也可以被“同時”共享,即若干個使用者同時訪問該檔案。併發和共享是作業系統兩個最基本的特徵,這兩者之間又是互為存在條件的:
- 資源共享是以程式的併發為條件的,若系統不允許程式併發執行,則自然不存在資源共享問題;
- 若系統不能對資源共享實施有效的管理,也必將影響到程式的併發執行,甚至根本無法併發執行。
虛擬(Virtual)
虛擬是指把一個物理上的實體變為若干個邏輯上的對應物。物理實體(前者)是實的,即實際存在的;而後者是虛的,是使用者感覺上的事物。用於實現虛擬的技術,稱為虛擬技術。在作業系統中利用了多種虛擬技術,分別用來實現虛擬處理器、虛擬記憶體和虛擬外部裝置等。在虛擬處理器技術中,是通過多道程式設計技術,讓多道程式併發執行的方法,來分時使用一個處理器的。此時,雖然只有一個處理器,但它能同時為多個使用者服務,使每個終端使用者都感覺有一箇中央處理器(CPU)在專門為它服務。利用多道程式設計技術,把一個物理上的CPU虛擬為多個邏輯上的CPU,稱為虛擬處理器。
類似地,可以通過虛擬儲存器技術,將一臺機器的物理儲存器變為虛擬儲存器,以便從邏輯上來擴充儲存器的容量。當然,這時使用者所感覺到的記憶體容量是虛的。我們把使用者所感覺到的儲存器(實際是不存在的)稱為虛擬儲存器。
還可以通過虛擬裝置技術,將一臺物理I/O裝置虛擬為多臺邏輯上的I/O裝置,並允許每個使用者佔用一臺邏輯上的I/O裝置,這樣便可以使原來僅允許在一段時間內由一個使用者訪問的裝置(即臨界資源),變為在一段時間內允許多個使用者同時訪問的共享裝置。
因此,作業系統的虛擬技術可歸納為:時分複用技術,如處理器的分時共享;空分複用技術,如虛擬儲存器(注:學到後續內容再慢慢領悟)。
非同步(Asynchronism)
在多道程式環境下,允許多個程式併發執行,但由於資源有限,程序的執行不是一貫到底,而是走走停停,以不可預知的速度向前推進,這就是程序的非同步性。非同步性使得作業系統執行在一種隨機的環境下,可能導致程序產生與時間有關的錯誤 (就像對全域性變數的訪問順序不當會導致程式出錯一樣)。但是隻要執行環境相同,作業系統必須保證多次執行程序,都獲得相同的結果。
1.3 作業系統的目標和功能
為了給多道程式提供良好的執行環境,作業系統應具有以下幾方面的功能:處理機管理、 儲存器管理、裝置管理和檔案管理。為了方便使用者使用作業系統,還必須向用戶提供介面。同時作業系統可用來擴充機器,以提供更方便的服務、更高的資源利用率。
作業系統作為計算機系統資源的管理者
1) 處理機管理
在多道程式環境下,處理機的分配和執行都以程序(或執行緒)為基本單位,因而對處理機的管理可歸結為對程序的管理。併發時在計算機內同時執行多個程序,所以,程序何時建立、何時撤銷、如何管理、如何避免衝突、.合理共享就是程序管理的最主要的任務。程序管理的主要功能有:程序控制、程序同步、程序通訊、死鎖處理、處理機排程等。2) 儲存器管理
儲存器管理是為了給多道程式的執行提供良好的環境,方便使用者使用以及提高記憶體的利用率,主要包括記憶體分配、地址對映、記憶體保護與共享和記憶體擴充等功能。3) 檔案管理
計算機中的資訊都是以檔案的形式存在的,作業系統中負責檔案管理的部分稱為檔案系統。檔案管理包括檔案儲存空間的管理、目錄管理及檔案讀寫管理和保護等。4) 裝置管理
裝置管理的主要任務是完成使用者的I/O請求,方便使用者使用各種裝置,並提高裝置的利用率,主要包括緩衝管理、裝置分配、裝置處理和虛擬裝置等功能。作業系統作為使用者與計算機硬體系統之間的介面
為方便使用者使用計算機,作業系統還提供了使用者介面。作業系統提供的介面主要分為兩類•• 一類是命令介面,使用者利用這些操作命令來組織和控制作業的執行;另一類是程式介面,程式設計人員可以使用它們來請求作業系統服務。1) 命令介面
使用命令介面進行作業控制的主要方式有兩種,即聯機控制方式和離線控制方式。按作業控制方式的不同,可以將命令介面分為聯機命令介面和離線命令介面。聯機命令介面又稱互動式命令介面,適用於分時或實時系統的介面。它由一組鍵盤操作命令組成。使用者通過控制檯或終端輸入操作命令,向系統提出各種服務要求。使用者每輸入完一條命令,控制權就轉入作業系統的命令解釋程式,然後由命令解釋程式對輸入的命令解釋並執行,完成指定的功能。之後,控制權又轉回到控制檯或終端,此時使用者又可以輸入下一條命令。
離線命令介面又稱批處理命令介面,即適用於批處理系統,它由一組作業控制命令(或稱作業控制語句)組成。離線使用者不能直接干預作業的執行,應事先用相應的作業控制命令寫成一份作業操作說明書,連同作業一起提交給系統。當系統排程到該作業時,由系統中的命令解釋程式對作業說明書上的命令或作業控制語句遂條解釋執行,從而間接地控制作業的執行。
2) 程式介面
程式介面由一組系統呼叫命令(簡稱系統呼叫,也稱廣義指令)組成。使用者通過在程式中使用這些系統呼叫命令來請求作業系統為其提供服務。使用者在程式中可以直接使用這組系統呼叫命令向系統提出各種服務要求,如使用各種外部裝置,進行有關磁碟檔案的操作,申請分配和回收記憶體以及其他各種控制要求。而當前最為流行的是圖形使用者介面(GUI)即圖形介面,使用者通過滑鼠和鍵盤,在圖形介面上單擊或使用快捷鍵就能很方便地使用作業系統。有些系統提供了上述三種介面,但GUI 最終是通過呼叫程式介面實現的,嚴格地說它不屬於作業系統的一部分。
作業系統用做擴充機器
沒有任何軟體支援的計算機稱為裸機,它僅構成計算機系統的物質基礎,而實際呈現在使用者面前的計算機系統是經過若干層軟體改造的計算機。裸機在最裡層,它的外面是作業系統,由作業系統提供的資源管理功能和方便使用者的各種服務功能,將裸機改造成功能更強、 使用更方便的機器,通常把覆蓋了軟體的機器稱為擴充機器,又稱之為虛擬機器。1.4 作業系統的發展與分類
手工操作階段(此階段無作業系統)
使用者在計算機上算題的所有工作都要人工干預,如程式的裝入、執行、結果的輸出等。隨著計算機硬體的發展,人機矛盾(速度和資源利用)越來越大,必須尋求新的解決辦法。手工操作階段有兩個突出的缺點:
- 使用者獨佔全機。不會出現因資源已被其他使用者佔用而等待的現象,但資源利用率低。
- CPU等待手工操作,CPU的利用不充分。
唯一的解決辦法就是用高速的機器代替相對較慢的手工操作來對作業進行控制。
批處理階段(作業系統開始出現)
為了解決人機矛盾及CPU和I/O裝置之間速度不匹配的矛盾,出現了批處理系統。它按發展歷程又分為單道批處理系統、多道批處理系統(多道程式設計技術出現以後)。1) 單道批處理系統
系統對作業的處理是成批進行的,但記憶體中始終保持一道作業。該系統是在解決人機矛盾和CPU與I/O裝置速率不匹配的矛盾中形成的。單道批處理系統的主要特徵如下:- 自動性。在順利的情況下,在磁帶上的一批作業能自動地逐個依次執行,而無需人工干預。 '
- 順序性。磁帶上的各道作業是順序地進入記憶體,各道作業的完成順序與它們進入記憶體的順序,在正常情況下應完全相同,亦即先調入記憶體的作業先完成。
- 單道性。記憶體中僅有一道程式執行,即監督程式每次從磁帶上只調入一道程式進入記憶體執行,當該程式完成或發生異常情況時,才換入其後繼程式進入記憶體執行。
此時面臨的問題是:每次主機記憶體中僅存放一道作業,每當它執行期間(注意這裡是“執行時”,並不是“完成後”)發出輸入/輸出請求後,高速的CPU便處於等待低速的I/O完成狀態。為了進一步提高資源的利用率和系統的吞吐量,引入了多道程式技術。
2) 多道批處理系統
多道程式設計技術允許多個程式同時進入記憶體並執行。即同時把多個程式放入記憶體,並允許它們交替在CPU中執行,它們共享系統中的各種硬、軟體資源。當一道程式因I/O請求而暫停執行時,CPU便立即轉去執行另一道程式。它沒有用某些機制提高某一技術方面的瓶頸問題,而是讓系統的各個組成部分都儘量去“忙”,花費很少時間去切換任務,達到了系統各部件之間的並行工作,使其整體在單位時間內的效率翻倍。多道程式設計的特點有:
- 多道:計算機記憶體中同時存放多道相互獨立的程式。
- 巨集觀上並行:同時進入系統的多道程式都處於執行過程中,即它們先後開始了各自的執行,但都未執行完畢。
- 微觀上序列:記憶體中的多道程式輪流佔有CPU,交替執行。
多道程式設計技術的實現需要解決下列問題:
- 如何分配處理器。
- 多道程式的記憶體分配問題。
- I/O裝置如何分配。
- 如何組織和存放大量的程式和資料,以便於使用者使用和保證其安全性與一致性。
在批處理系統中釆用多道程式設計技術,就形成了多道批處理作業系統。該系統把使用者提交的作業成批地送入計算機記憶體,然後由作業排程程式自動地選擇作業執行。
優點是資源利用率高,多道程式共享計算機資源,從而使各種資源得到充分利用;系統吞吐量大,CPU和其他資源保持“忙碌”狀態。缺點是使用者響應的時間較長。不提供人機互動能力,使用者既不能瞭解自己程式的執行情況,也不能控制計算機。
分時作業系統
在作業系統中釆用分時技術就形成了分時系統。所謂分時技術就是把處理器的執行時間分成很短的時間片,按時間片輪流把處理器分配給各聯機作業使用。若某個作業在分配給它的時間片內不能完成其計算,則該作業暫時停止執行,把處理器讓給其他作業使用,等待下一輪再繼續執行。由於計算機速度很快,作業執行輪轉得很快,給每個使用者的感覺好像是自己獨佔一臺計算機。分時作業系統是多個使用者通過終端同時共享一臺主機,這些終端連線在主機上,使用者可以同時與主機進行互動操作而互不干擾。所以,實現分時系統最關鍵的問題是如何使使用者能與自己的作業進行互動,即當用戶在自己的終端上鍵入命令時,系統應能及時接收並及時處理該命令,再將結果返回使用者。分時系統也是支援多道程式設計的系統,但它不同於多道批處理系統。
多道批處理是實現作業自動控制而無需人工干預的系統,而分時系統是實現人機互動的系統,這使得分時系統具有與批處理系統不同的特徵,其主要特徵如下:
- 同時性。同時性也稱多路性,指允許多個終端使用者同時使用一臺計算機,即一臺計算機與若干臺終端相連線,終端上的這些使用者可以同時或基本同時使用計算機。
- 互動性。使用者能夠方便地與系統進行人-機對話,即使用者通過終端釆用人4^1對話的方式直接控制程式執行,與同程式進行互動。
- 獨立性。系統中多個使用者可以彼此獨立地進行操作,互不干擾,單個使用者感覺不到別人也在使用這臺計算機,好像只有自己單獨使用這臺計算機一樣。
- 及時性。使用者請求能在很短時間內獲得響應。分時系統釆用時間片輪轉方式使一臺計算機同時為多個終端服務,使使用者能夠對系統的及時響應感到滿意。
雖然分時作業系統比較好地解決了人機互動問題,但是在一些應用場合,需要系統能對外部的資訊在規定的時間(比時間片的時間還短)內作出處理(比如飛機訂票系統或導彈制導系統)。因此,實時系統應運而生。
實時作業系統
為了能在某個時間限制內完成某些緊急任務而不需時間片排隊,誕生了實時作業系統。這裡的時間限制可以分為兩種情況:如果某個動作必須絕對地在規定的時刻(或規定的時間範圍)發生,則稱為硬實時系統。例如,飛行器的飛行自動控制系統,這類系統必須提供絕對保證,讓某個特定的動作在規定的時間內完成。如果能夠接受偶爾違反時間規定,並且不會引起任何永久性的損害,則稱為軟實時系統,如飛機訂票系統、銀行管理系統。在實時作業系統的控制下,計算機系統接收到外部訊號後及時進行處理,並且要在嚴格的時限內處理完接收的事件。實時橾作系統的主要特點是及時性和可靠性。
網路作業系統和分散式計算機系統
網路作業系統把計算機網路中的各臺計算機有機地結合起來,提供一種統一、經濟而有效的使用各臺計算機的方法,實現各個計算機之間的互相傳送資料。網路作業系統最主要的特點是網路中各種資源的共享以及各臺計算機之間的通訊。分散式計算機系統是由多臺計算機組成並滿足下列條件的系統:系統中任意兩臺計算機通過通訊方式交換資訊;系統中的每一臺計算機都具有同等的地位,即沒有主機也沒有從機; 每臺計算機上的資源為所有使用者共享;系統中的任意若千臺計算機都可以構成一個子系統,並且還能重構;任何工作都可以分佈在幾臺計算機上,由它們並行工作、協同完成。用於管理分散式計算機系統的作業系統稱為分散式計算機系統。該系統的主要特點是:分佈性和並行性。分散式作業系統與網路作業系統本質上的不同之處在於分散式作業系統中,若干臺計算機相互協同完成同一任務。
個人計算機作業系統
個人計算機作業系統是目前使用最廣泛的作業系統,廣泛應用於文書處理、電子表格、 遊戲等。常見的有Windows、Linux和Macintosh等,作業系統的發展歷程如圖1-1所示。圖1-1 作業系統的發展歷程
此外還有嵌入式作業系統、伺服器作業系統、多處理器作業系統等。
1.5 作業系統的執行機制
計算機系統中,通常CPU執行兩種不同性質的程式:一種是作業系統核心程式;另一種是使用者自程式設計序或系統外層的應用程式。對作業系統而言,這兩種程式的作用不同,前者是後者的管理者,因此“管理程式”要執行一些特權指令,而“被管理程式”出於安全考慮不能執行這些指令。所謂特權指令,是指計算機中不允許使用者直接使用的指令,如I/O指令、 置中斷指令,存取用於記憶體保護的暫存器、送程式狀態字到程式狀態字暫存器等指令。作業系統在具體實現上劃分了使用者態(目態)和核心態(管態),以嚴格區分兩類程式。在軟體工程思想和結構程式設計方法的影響下誕生的現代作業系統,幾乎都是層次式的結構。作業系統的各項功能分別被設定在不同的層次上。一些與硬體關聯較緊密的模組,諸如時鐘管理、中斷處理、裝置驅動等處於最底層。其次是執行頻率較髙的程式,諸如程序管理、儲存器管理和裝置管理等。這兩部分內容構成了作業系統的核心。這部分內容的指令操作工作在核心態。
核心是計算機上配置的底層軟體,是計算機功能的延伸。不同系統對核心的定義稍有區別,大多數作業系統核心包括四個方面的內容。
1) 時鐘管理
在計算機的各種部件中,時鐘是最關鍵的裝置。時鐘的第一功能是計時,作業系統需要通過時鐘管理,向用戶提供標準的系統時間。另外,通過時鐘中斷的管理,可以實現程序的切換。諸如,在分時作業系統中,釆用時間片輪轉排程的實現;在實時系統中,按截止時間控制執行的實現;在批處理系統中,通過時鐘管理來衡量一個作業的執行程度等。因此,系統管理的方方面面無不依賴於時鐘。2) 中斷機制
引入中斷技術的初衷是提高多道程式執行環境中CPU的利用率,而且主要是針對外部裝置的。後來逐步得到發展,形成了多種型別,成為作業系統各項操作的基礎。例如,鍵盤或滑鼠資訊的輸入、程序的管理和排程、系統功能的呼叫、裝置驅動、檔案訪問等,無不依賴於中斷機制。可以說,現代作業系統是靠中斷驅動的軟體。中斷機制中,只有一小部分功能屬於核心,負責保護和恢復中斷現場的資訊,轉移控制權到相關的處理程式。這樣可以減少中斷的處理時間,提高系統的並行處理能力。
3) 原語
按層次結構設計的作業系統,底層必然是一些可被呼叫的公用小程式,它們各自完成一個規定的操作。其特點是:- 它們處於作業系統的最底層,是最接近硬體的部分。
- 這些程式的執行具有原子性——其操作只能一氣呵成(這主要是從系統的安全性和便於管理考慮的)。
- 這些程式的執行時間都較短,而且呼叫頻繁。
通常把具有這些特點的程式稱為原語(Atomic Operation)。定義原語的直接方法是關閉中斷,讓它的所有動作不可分割地進行完再開啟中斷。
系統中的裝置驅動、CPU切換、程序通訊等功能中的部分操作都可以定義為原語,使它們成為核心的組成部分。
4) 系統控制的資料結構及處理
系統中用來登記狀態資訊的資料結構很多,比如作業控制塊、程序控制塊(PCB)、裝置控制塊、各類連結串列、訊息佇列、緩衝區、空閒區登記表、記憶體分配表等。為了實現有效的管理,系統需要一些基本的操作,常見的操作有以下三種:- 程序管理:程序狀態管理、程序排程和分派、建立與撤銷程序控制塊等。
- 儲存器管理:儲存器的空間分配和回收、記憶體資訊保護程式、程式碼對換程式等。
- 裝置管理:緩衝區管理、裝置分配和回收等。
從上述內容可以瞭解,核心態指令實際上包括系統呼叫類指令和一些針對時鐘、中斷和原語的操作指令。
1.6 中斷和異常的概念
在作業系統中引入核心態和使用者態這兩種工作狀態後,就需要考慮這兩種狀態之間如何切換。作業系統核心工作在核心態,而使用者程式工作在使用者態。但系統不允許使用者程式實現核心態的功能,而它們又必須使用這些功能。因此,需要在核心態建立一些“門”,實現從使用者態進入核心態。在實際作業系統中,CPU執行上層程式時唯一能進入這些“門”的途徑就是通過中斷或異常。當中斷或異常發生時,執行使用者態的CPU會立即進入核心態,這是通過硬體實現的(例如,用一個特殊暫存器的一位來表示CPU所處的工作狀態,0表示核心態,1表示使用者態。若要進入核心態,只需將該位置0即可)。中斷是作業系統中非常重要的一個概念,對一個執行在計算機上的實用作業系統而言,缺少了中斷機制,將是不可想象的。中斷(Interruption),也稱外中斷,指來自CPU執行指令以外的事件的發生,如裝置發出的I/O結束中斷,表示裝置輸入/輸出處理已經完成,希望處理機能夠向裝置發下一個輸入 / 輸出請求,同時讓完成輸入/輸出後的程式繼續執行。時鐘中斷,表示一個固定的時間片已到,讓處理機處理計時、啟動定時執行的任務等。這一類中斷通常是與當前程式執行無關的事件,即它們與當前處理機執行的程式無關。
異常(Exception),也稱內中斷、例外或陷入(Trap),指源自CPU執行指令內部的事件,如程式的非法操作碼、 地址越界、算術溢位、虛存系統的缺頁以及專門的陷入指令等引起的事件。對異常的處理一般要依賴於當前程式的執行現場,而且異常不能被遮蔽,一旦出現應立即處理。關於內中斷和外中斷的聯絡與區別如圖1-2所示。
圖1-2 內中斷和外中斷的聯絡與區別
1.7 系統呼叫
所謂系統呼叫就是使用者在程式中呼叫作業系統所提供的一些子功能,系統呼叫可以被看做特殊的公共子程式。系統中的各種共享資源都由作業系統統一掌管,因此在使用者程式中,凡是與資源有關的操作(如儲存分配、進行I/0傳輸以及管理檔案等),都必須通過系統呼叫方式向作業系統提出服務請求,並由作業系統代為完成。通常,一個作業系統提供的系統呼叫命令有幾十乃至上百條之多。這些系統呼叫按功能大致可分為如下幾類:
- 裝置管理。完成裝置的請求或釋放,以及裝置啟動等功能。
- 檔案管理。完成檔案的讀、寫、建立及刪除等功能。
- 程序控制。完成程序的建立、撤銷、阻塞及喚醒等功能。
- 程序通訊。完成程序之間的訊息傳遞或訊號傳遞等功能。
- 記憶體管理。完成記憶體的分配、回收以及獲取作業佔用記憶體區大小及始址等功能。
顯然,系統呼叫執行在系統的核心態。通過系統呼叫的方式來使用系統功能,可以保證系統的穩定性和安全性,防止使用者隨意更改或訪問系統的資料或命令。系統呼叫命令是由作業系統提供的一個或多個子程式模組實現的。
這樣,作業系統的執行環境可以理解為:使用者通過作業系統執行上層程式(如系統提供的命令解釋程式或使用者自程式設計序),而這個上層程式的執行依賴於作業系統的底層管理程式提供服務支援,當需要管理程式服務時,系統則通過硬體中斷機制進入核心態,執行管理程式;也可能是程式執行出現異常情況,被動地需要管理程式的服務,這時就通過異常處理來進入核心態。當管理程式執行結束時,使用者程式需要繼續執行,則通過相應的儲存的程式現場退出中斷處理程式或異常處理程式,返回斷點處繼續執行。
在作業系統這一層面上,我們關心的是系統核心態和使用者態的軟體實現和切換,對於硬體層面的具體理解,可以結合“計算機組成原理”課程中有關中斷的內容進行學習。
下面列舉一些由使用者態轉向核心態的例子:
- 使用者程式要求作業系統的服務,即系統呼叫。
- 發生一次中斷。
- 使用者程式中產生了一個錯誤狀態。
- 使用者程式中企圖執行一條特權指令。
- 從核心態轉向使用者態由一條指令實現,這條指令也是特權命令。一般是中斷返回指令。
注意:由使用者態進入核心態,不僅僅是狀態需要切換。而且,所使用的堆疊也可能需要由使用者堆疊切換為系統堆疊,但這個系統堆疊也是屬於該程序的。
1.8 作業系統的體系結構:大核心和微核心
作業系統的體系結構是一個開放的問題。正如上文所述,作業系統在核心態為應用程式提供公共的服務,那麼作業系統在核心態應該提供什麼服務、怎樣提供服務?有關這個問題的回答形成了兩種主要的體系結構:大核心和微核心。大核心系統將作業系統的主要功能模組都作為一個緊密聯絡的整體執行在核心態,從而為應用提供高效能的系統服務。因為各管理模組之間共享資訊,能有效利用相互之間的有效特性,所以具有無可比擬的效能優勢。
但隨著體系結構和應用需求的不斷髮展,需要作業系統提供的服務越來越多,而且介面形式越來越複雜,作業系統的設計規模也急劇增長,作業系統也面臨著“軟體危機”困境。為此,作業系統設計人員試圖按照複雜性、時間常數、抽象級別等因素,將作業系統核心分成基本程序管理、虛存、I/O與裝置管理、IPC、檔案系統等幾個層次,繼而定義層次之間的服務結構,提高作業系統核心設計上的模組化。但是由於層次之間的互動關係錯綜複雜,定義清晰的層次間介面非常困難,複雜的互動關係也使得層次之間的界限極其模糊。
為解決作業系統的核心程式碼難以維護的問題,於是提出了微核心的體系結構。它將核心中最基本的功能(如程序管理等)保留在核心,而將那些不需要在核心態執行的功能移到使用者態執行,從而降低了核心的設計複雜性。而那些移出核心的作業系統程式碼根據分層的原則被劃分成若干服務程式,它們的執行相互獨立,互動則都藉助於微核心進行通訊。
微核心結構有效地分離了核心與服務、服務與服務,使得它們之間的介面更加清晰,維護的代價大大降低,各部分可以獨立地優化和演進,從而保證了作業系統的可靠性。
微核心結構的最大問題是效能問題,因為需要頻繁地在核心態和使用者態之間進行切換,作業系統的執行開銷偏大。因此有的作業系統將那些頻繁使用的系統服務又移回核心,從而保證系統性能。但是有相當多的實驗資料表明,體系結構不是引起效能下降的主要因素,體系結構帶來的效能提升足以彌補切換開銷帶來的缺陷。為減少切換開銷,也有人提出將系統服務作為執行庫連結到使用者程式的一種解決方案,這樣的體系結構稱為庫作業系統。
1.9 關於作業系統概念的一些疑點和難點
並行性與併發性的區別和聯絡
並行性和併發性是既相似又有區別的兩個概念。並行性是指兩個或多個事件在同一時刻發生。併發性是指兩個或多個事件在同一時間間隔內發生。在多道程式環境下,併發性是指在一段時間內,巨集觀上有多個程式在同時執行,但在單處理器系統中每一時刻卻僅能有一道程式執行,故微觀上這些程式只能是分時地交替執行。倘若在計算機系統中有多個處理器(CPU),則這些可以併發執行的程式便被分配到多個處理器上,實現並行執行,即利用每個處理器來處理一個可併發執行的程式。
特權指令與非特權指令
所謂特權指令是指有特殊許可權的指令,由於這類指令的許可權最大,如果使用不當,將導致整個系統崩潰。比如:清記憶體、置時鐘、分配系統資源、修改虛存的段表或頁表、修改使用者的訪問許可權等。如果所有的程式都能使用這些指令,那麼你的系統一天宕機幾回就不足為奇了。為了保證系統安全,這類指令只能用於作業系統或其他系統軟體,不直接提供給使用者使用。因此,特權指令必須在核心態執行。實際上,CPU在核心態下可以執行指令系統的全集。形象地說,特權指令就是那些兒童不宜的東西,而非特權指令則是老少皆宜。為了防止使用者程式中使用特權指令,使用者態下只能使用非特權指令,核心態下可以使用全部指令。當在使用者態下使用特權指令時,將產生中斷以阻止使用者使用特權指令。所以把使用者程式放在使用者態下執行,而作業系統中必須使用特權指令的那部分程式在核心態下執行,保證了計算機系統的安全可靠。從使用者態轉換為核心態的唯一途徑是中斷或異常。
訪管指令與訪管中斷
訪管指令是一條可以在使用者態下執行的指令。在使用者程式中,因要求作業系統提供服務而有意識地使用訪管指令,從而產生一箇中斷事件(自願中斷),將作業系統轉換為核心態,稱為訪管中斷。訪管中斷由訪管指令產生,程式設計師使用訪管指令向作業系統請求服務。為什麼要在程式中引入訪管指令呢?這是因為使用者程式只能在使用者態下執行,如果使用者程式想要完成在使用者態下無法完成的工作,該怎麼辦?解決這個問題要靠訪管指令。訪管指令本身不是特權指令,其基本功能是讓程式擁有“自願進管”的手段,從而引起訪管中斷。
當處於使用者態的使用者程式使用訪管指令時,系統根據訪管指令的運算元執行訪管中斷處理程式,訪管中斷處理程式將按系統呼叫的運算元和引數轉到相應的例行子程式。完成服務功能後,退出中斷,返回到使用者程式斷點繼續執行。