2.2 操做系統基本原理算法
操做系統的主要功能是進行處理機與進程管理、存儲管理、設備管理、文件管理和做業管理的工做,本節討論操做系統是如何完成這些功能的。編程
2.2.1 進程管理數組
處理機是計算機系統的核心資源。操做系統的功能之一就是處理機管理。隨着計算機的迅速發展,處理機管理顯得更爲重要,這主要因爲計算機的速度愈來愈快,處理機的充分利用有利於系統效率的大大提升;處理機管理是整個操做系統的重心所在,其管理的好壞直接影響到整個系統的運行效率;並且操做系統中併發活動的管理和控制是在處理機管理下實現的,處理機管理集中了操做系統中最複雜的部分,它設計的好壞關係到整個系統的成敗。網絡
進程是處理機管理中最基本的、最重要的概念。進程是系統併發執行的體現。因爲在多道程序系統中,衆多的計算機用戶都以各類各樣的任務,隨時隨地爭奪使用處理機。爲了動態地看待操做系統,則以進程做爲獨立運行的基本單位,以進程做爲分配資源的基本單位, 從進程的角度來研究操做系統。所以,處理機管理也被稱爲進程管理。處理機管理的功能就是組織和協調用戶對處理機的爭奪使用,把處理機分配給進程,對進程進行管理和控制,最大限度也發揮處理機的做用。數據結構
1.進程的概念架構
用靜態的觀點看,操做系統是一組程序和表格的集合。用動態的觀點看,操做系統是進程的動態和併發執行的。而進程的概念其實是程序這一律念發展的產物。所以,能夠從分析程序的基本特徵入手,引出「進程」的概念。併發
順序程序是指程序中若干操做必須按照某種前後次序來執行,而且每次操做前和操做後的數據、狀態之間都有必定的關係。在早期的程序設計中,程序通常都是按順序執行的。異步
在多道程序系統中,程序的運行環境發生了很大的變化。主要體如今:函數
(1) 資源共享。爲了提升資源的利用率,計算機系統中的資源再也不由一道程序專用, 而是由多道程序共同使用。工具
(2) 程序的併發執行或並行執行。邏輯上講容許多道不一樣用戶的程序並行運行;容許一個用戶程序內部完成不一樣操做的程序段之間並行運行;容許操做系統內部不一樣的程序之間並行運行。物理上講:內存儲器中保存多個程序,I/O 設備被多個程序交替地共享使用;在多處理機系統的情形下,表現爲多個程序在各自的處理機上運行,執行時間是重疊的。單處理機系統時,程序的執行表現爲多道程序交替地在處理機上相互空插運行。
實際上,在多道程序系統中,程序的並行執行和資源共享之間是相輔相成的。一方面, 只有容許程序並行執行,纔可能存在資源共享的問題;另外一方面,只有有效地實現資源共享, 纔可能使得程序並行執行。
這樣,可加強計算機系統的處理能力和提升機器的利用率。併發操做其實是這樣的:大多數程序段只要求操做在時間上是有序的,也就是有些操做必須在其餘操做以前,這是有序的, 但其中有些操做卻能夠同時進行。
2.進程的狀態轉換
由進程運行的間斷性,決定了進程至少具備如下三種狀態:
(1) 就緒狀態。當進程已分配了除 CPU 之外的全部必要的資源後,只要能再得到處理機,便能當即執行,把這時的進程狀態稱爲就緒狀態。在一個系統中,能夠有多個進程同時處於就緒狀態,一般把它們排成一個隊列,稱爲就緒隊列。
(2) 執行狀態指進程已得到處理機,其程序正在執行。在單處理機系統中,只能有一個進程處於執行狀態。
(3) 阻塞狀態指進程因發生某事件(如請求 I/O、申請緩衝空間等)而暫停執行時的狀態,亦即進程的執行受到阻塞,故稱這種暫停狀態爲阻塞狀態,有時也稱爲「等待」狀態, 或「睡眠」狀態。一般將處於阻塞狀態的進程排成一個隊列,稱爲阻塞隊列。
進程的狀態隨着自身的推動和外界的變化而變化。例如,就緒狀態的進程被進程調度程序選中進入執行狀態;執行狀態的進程因等待某一事件的發生轉入等待狀態;等待狀態的進程所等待事件來到便進入就緒狀態。進程的狀態能夠動態地相互轉換,但阻塞狀態的進程不能直接進入執行狀態,就緒狀態的進程不能直接進入阻塞狀態。在任什麼時候刻,任何進程都處於且只能處於這其中一種狀態。進程狀態的變化狀況以下:
(1) 運行態→等待態:一個進程運行中啓動了外圍設備,它就變成等待外圍設備傳輸信息的狀態;進程在運行中申請資源(主存儲空間及外圍設備因得不到知足)時,變成等待資源狀態,進程在運行中出現了故障(程序出錯或主存儲器讀寫錯誤等),變成等待干預狀態。
(2) 等待態→就緒態:外圍設備工做結束後等待外圍設備傳輸信息的進程結束等待; 等待的資源能獲得知足時(另外一個進程歸還了資源),則等待資源者就結束等待;故障排隊後讓等待干預的進程結束等待,任何一個結束等待的進程必須先變成就緒狀態,待分配處處理器後才能運行。
(3) 運行態→就緒態:進程用完了一個使用處理器的時間後強迫該進程暫時讓出處理器,當有更優先權的進程要運行時也迫使正在運行的進程讓出處理器。因爲自身或外界緣由成爲等待狀態的進程讓出處理器時,它的狀態就變成就緒狀態。
(4) 就緒態→運行態:等待分配處理器的進程,系統按一種選定的策略從處於就緒狀態的進程中選擇一個進程,讓它佔用處理器,那個被選中的進程就變成了運行態。
圖 2-2 所示爲進程的三種基本狀態及各狀態之間的轉換。
3.關於掛起狀態
在很多系統中,進程只有如圖 2-2 所示的三種狀態。但在另外一些系統中,又增長了一些新狀態,其中最重要的是掛起狀態。引入掛起狀態的緣由有:
(1) 對換的須要。爲了緩和內存緊張的狀況,而將內存中處於阻塞狀態的進程換至外存上,使進程又處於一種有別於阻塞狀態的新狀態。由於即便該進程所期待的事件發生,該進程仍不具有執行條件而不能進入就緒隊列,稱這種狀態爲掛起狀態。
(2) 終端用戶的請求。當終端用戶在本身的程序運行期間,發現有可疑問題時,每每但願使本身的進程暫停下來。也就是說,使正在執行的進程暫停執行,如果就緒進程,則不接受調度以便研究其執行狀況或對程序進行修改。把這種靜止狀態也稱爲掛起狀態。
(3) 父進程請求。父進程常但願掛起本身的子進程,以便考查和修改子進程,或者協調各子進程間的活動。
(4) 負荷調節的須要。當實時系統中的工做負荷較重,有可能影響到對實時任務的控制時,可由系統把一些不重要的進程掛起,以保證系統正常運行。
(5) 操做系統的須要。操做系統但願掛起某些進程,以便檢查運行中資源的使用狀況及進行記帳。
綜上所述,不難了解掛起狀態具備如下三個屬性。
(1) 被掛起的進程,原來可能處於就緒狀態,此時進程(被掛起)的狀態稱爲掛起就緒;若被掛起的進程原來處於阻塞狀態,此時的狀態稱爲掛起阻塞。不論哪一種狀態,該進程都是不可能被調度而執行的。
(2) 處於掛起阻塞狀態的進程,其阻塞條件與掛起條件無關;當進程所期待的事件出現後,進程雖再也不被阻塞,但仍不能運行,這時,應將該進程從靜止阻塞狀態轉換爲掛起就緒狀態。
(3) 進程能夠由其自身掛起,也可由用戶或操做系統等將之掛起。其目的都在於阻止進程繼續運行,被掛起的進程只能用顯式方式來激活,以便從掛起狀態中解脫出來。
如圖 2-3 所示爲具備掛起操做的進程狀態的演變狀況。
4.進程互斥與同步進程互斥
定義爲:一組併發進程中一個或多個程序段,因共享某一共有資源而致使必須以一個不容許交叉執行的單位執行。也就是說互斥是要保證臨界資源在某一時刻只被一個進程訪問。
進程同步定義爲:把異步環境下的一組併發進程因直接制約而互相發送消息而進行互相合做、互相等待,使得各進程按必定的速度執行的過程稱爲進程同步。也就是說進程之間是異步執行的,同步便是使各進程按必定的制約順序和速度執行。
希賽教育專家提示:簡單一點來講,互斥是資源的競爭關係,而同步是進程間的協做關係。
系統中有些資源能夠供多個進程同時使用,有些資源則一次僅容許一個進程使用,將一次僅容許一個進程使用的資源稱爲臨界資源,不少物理設備如打印機、磁帶機等都屬於臨界資源,某些軟件的變量、數據、表格也不容許兩個進程同時使用,因此也是臨界資源。
進程在併發執行中能夠共享系統中的資源。可是臨界資源的訪問則必須互斥進行,即各 進程對臨界資源進行操做的那段程序的執行也必須是互斥的,只有這樣才能保證對臨界資源 的互斥訪問。把一個進程訪問臨界資源的那段程序代碼稱爲臨界區,有了臨界區的概念,進 程間的互斥就能夠描述爲:禁止兩個或兩個以上的進程同時進入訪問同一臨界資源的臨界區。爲此,必須有專門的同步機構來協調它們,協調準則以下:
(1) 空閒讓進。無進程處於臨界區時,如有進程要求進入臨界區則當即容許其進入;
(2) 忙則等待。當已有進程進入其臨界區時,其餘試圖進入各自臨界區的進程必須等待,以保證諸進程互斥地進入臨界區;
(3) 有限等待。有若干進程要求進入臨界區時,應在有限時間內使一進程進入臨界區,即它們不該相互等待而誰也不進入臨界區;
(4) 讓權等待。對於等待進入臨界區的進程必須釋放其佔有的 CPU。信號量能夠有效地實現進程的同步和互斥。在操做系統中,信號量是一個整數。當信號量大於等於 0 時, 表明可供併發進程使用的資源實體數,當信號量小於零時則表示正在等待使用臨界區的進程數。創建一個信號量必須說明所建信號量表明的意義和設置初值,以及創建相應的數據結構, 以便指向那些等待使用該臨界區的進程。
對信號量只能施加特殊的操做:P 操做和 V 操做。P 操做和 V 操做都是不可分割的原子操做,也稱爲原語。所以,P 原語和 V 原語執行期間不容許中斷髮生。
P(sem)操做的過程是將信號量 sem 值減 l,若 sem 的值成負數,則調用 P 操做的進程暫停執行,直到另外一個進程對同一信號量作 V 操做。V(sem)操做的過程是將信號量sem 值加 1,若 sem 的值小於等於 0,從相應隊列(與 sem 有關的隊列)中選一個進程, 喚醒它。
通常 P 操做與 V 操做的定義以下所述。
P 操做:
P(sem){
sem = sem - 1;
if(sem < 0)進程進入等待狀態; else 繼續進行;}
V 操做:
V(sem){
sem = sem + 1;
if(sem ≤ 0)喚醒隊列中的一個等待進程; else 繼續進行;}
爲了保護共享資源(如公共變量),使它們不被多個進程同時訪問,就要阻止這些進程同時執行訪問這些資源(臨界資源)的代碼段(臨界區);進程互斥不容許兩個以上共享臨界資源的併發進程同時進入臨界區。利用 P、V 原語和信號量能夠方便地解決併發進程對臨界區的進程互斥問題。
設信號量 mutex 是用於互斥的信號量,初值爲 1,表示沒有併發進程使用該臨界區。因而各併發進程的臨界區可改寫成下列形式的代碼段:
P(mutex);
臨界區
V(mutex);
要用 P,V 操做實現進程同步,須要引進私用信號量。私用信號量只與制約進程和被制約進程有關,而不是與整組併發進程相關。與此相對,進程互斥使用的信號量爲公用信號量。首先爲各併發進程設置私用信號量,而後爲私用信號量賦初值,最後利用 P,V 原語和私用信號量規定各進程的執行順序。
經典同步問題的例子是「生產者-消費者」問題。這要求存後再取,取後再存,即有兩個制約關係,爲此,須要兩個信號量,表示緩衝區中的空單元數和非空單元數,記爲 Bufempty 和 Buffull,它們的初值分別是 1 和 0,相應的程序段形式是:
生產者
loop
生產一產品 next;
P(Bufempty);
next 產品存緩衝區;
V(Buffull);
endloop
消費者
loop
P(Buffulll);
V(Bufempty);
從緩衝區中取產品;使用產品
endloop
5.前趨圖
前趨圖是一個由結點和有向邊構成的有向無循環圖。該圖一般用於表現事務之間前後順序的制約關係。圖中的每一個結點能夠表示一個語句、一個程序段或是一個進程,結點間的有向邊表示兩個結點之間存在的前趨關係。
例:在計算機中,常常採用流水線方式執行指令,每一條指令均可以分解爲取指、分析和執行三步。取指操做爲 Ai,分析操做爲 Bi 和執行操做爲 Ci(i=1,2,3)。如圖 2-4 所示爲三個任務各程序段併發執行的前驅圖。
圖中 A1 沒有前趨結點,稱爲開始結點,它不受任何制約,能夠直接執行;而 B1 與 A2 只能在 A1 執行完成以後才能開始,而 B2 必須在 B1 與 A2 完成以後才能開始;C3 沒有後繼結點,稱爲終止結點。
在前趨圖中,執行前後順序的制約關係可分爲兩種:直接制約和間接制約。
直接制約一般是指一個操做中,多個步驟之間的制約關係,也能夠說是「同步的進程之間的制約關係」。如圖 2-4 所示,A一、B一、C1 是一條指令的取指、分析、執行的三個步驟, 因此它們之間的關係是直接制約。
間接制約一般是指多個操做之間相同步驟的制約關係,也能夠說是「互斥的進程之間的制約關係」。如圖 2-4 所示,A一、A二、A3 之間就存在間接制約的關係。
前趨圖的應用普遍,在項目開發中,可用前趨圖來分析哪些活動能夠並行完成。同時項目管理工具:Pert 圖,單(雙)代號網絡圖等都融入了前趨圖的思想。
6.進程調度與死鎖
進程調度即處理器調度(又稱上下文轉換),它的主要功能是肯定在何時分配處理器,並肯定分給哪個進程,即讓正在執行的進程改變狀態並轉入就緒隊列的隊尾,再由調度原語將就緒隊列的隊首進程取出,投入執行。
引發進程調度的緣由有如下幾類:
(1) 正在執行的進程執行完畢。
(2) 執行中的進程本身調用阻塞原語將本身阻塞起來進入睡眠狀態。
(3) 執行中的進程調用了 P 原語操做,從而因資源不足而阻塞;或調用 V 原語操做激活了等待資源的進程隊列。
(4) 在分時系統中,當一進程用完一個時間片。
(5) 就緒隊列中某進程的優先級變得高於當前執行進程的優先級,也將引發進程調度。進程調度的方式有兩類:剝奪方式與非剝奪方式。所謂非剝奪方式是指,一旦某個做業
或進程佔用了處理器,別的進程就不能把處理器從這個進程手中奪走,直到該進程本身因調用原語操做而進入阻塞狀態,或時間片用完而讓出處理機;剝奪方式是指,當就緒隊列中有進程的優先級高於當前執行進程的優先級時,便當即發生進程調度,轉讓處理機。
進程調度的算法是服務於系統目標的策略,對於不一樣的系統與系統目標,常採用不一樣的調度算法:
(1) 先來先服務(First Come and First Serverd,FCFS)調度算法,又稱先進先出(First In and First Out,FIFO)。就緒隊列按先來後到原則排隊。
(2) 優先數調度。優先數反映了進程優先級,就緒隊列按優先數排隊。有兩種肯定優先級的方法,即靜態優先級和動態優先級。靜態優先級是指進程的優先級在進程開始執行前肯定,執行過程當中不變,而動態優先級則能夠在進程執行過程當中改變。
(3) 輪轉法(Round Robin)。就緒隊列按 FCFS 方式排隊。每一個進程執行一次佔有處理器時間都不超過規定的時間單位(時間片)若超過,則自行釋放本身所佔有的 CPU 而排到就緒隊列的末尾,等待下一次調度。同時,進程調度程序又去調度當前就緒隊列中的第一個進程。
進程管理是操做系統的核心,在進程管理的實現中,若是設計不當,會出現一種尷尬的局面——死鎖。
當若干個進程互相競爭對方已佔有的資源,無限期地等待,不能向前推動時會形成「死鎖」。例如,P1 進程佔有資源 R1,P2 進程佔有資源 R2,這時,P1 又須要資源 R2,P2 也須要資源 R1,它們在等待對方佔有的資源時,又不會釋放本身佔有的資源,於是使雙方都進入了無限等待狀態。
死鎖是系統的一種出錯狀態,它不只會浪費大量的系統資源,甚至還會致使整個系統的崩潰,因此死鎖是應該儘可能預防和避免的。
(1) 死鎖條件。產生死鎖的主要緣由是供共享的系統資源不足,資源分配策略和進程的推動順序不當。系統資源既多是可重複使用的永久性資源,也多是消耗性的臨時資源。產生死鎖的必要條件是:互斥條件、保持和等待條件、不剝奪條件和環路等待條件。
(2) 解決死鎖的策略。處於死鎖狀態的進程不能繼續執行但又佔用了系統資源,從而阻礙其餘做業的執行。
解決死鎖有兩種策略:一種是在死鎖發生前採用的預防和避免策略;另外一種是在死鎖發生後採用的檢測與恢復策略。
死鎖的預防主要是經過打破死鎖產生的 4 個必要條件之一來保證不會產生死鎖。採用的死鎖預防策略一般有資源的靜態分配法或有序分配法,它們分別打破了資源動態分配條件和循環等待條件,所以不會發生死鎖。但這樣作會大大下降系統資源的利用率和進程之間的並行程度。
死鎖避免策略,則是在系統進行資源分配時,先執行一個死鎖避免算法(典型的如銀行家算法),以保證本次分配不會致使死鎖發生。因爲資源分配很頻繁,所以死鎖避免策略要耗費大量的 CPU 和時間。
希賽教育專家提示:實際上,系統出現死鎖的機率很小,故從系統所花的代價上看,採用死鎖發生後的檢測與恢復策略要比採用死鎖發生前的預防與避免策略代價小一些。
2.2.2 存儲管理
存儲器是計算機系統中最重要的資源之一。由於任何程序和數據以及各類控制用的數據結構都必須佔有必定的存儲空間,所以,存儲管理直接影響系統性能。
存儲器由內存和外存組成。內存是由系統實際提供的存儲單元(常指字節)組成的一個連續地址空間,處理器可直接存取。外存(輔存)是指軟盤、硬盤、光盤和磁帶等一些外部存儲部件,經常使用來存放暫不執行的程序和數據。處理器不能直接訪問外存,需經過啓動 I/O(Input/Output,輸入/輸出)設備才能進行內存、外存交換,其訪問速度慢,但價格便宜, 經常使用做內存的後援設備。
內存大小由系統硬件決定,存儲容量受到實際存儲單元的限制。虛擬存儲器(簡稱虛存) 不考慮實際內存的大小和數據存取的實際地址,只考慮相互有關的數據之間的相對位置,其容量由計算機地址的位數決定。
系統中內存的使用通常分紅兩部分,一部分爲系統空間,存放操做系統自己及相關的系統程序;另外一部分爲用戶空間,存放用戶的程序和數據。
存儲管理主要是指對內存儲器的管理,負責對內存的分配和回收、內存的保護和內存的擴充。存儲管理的目的是儘可能提升內存的使用效率。存儲管理的機制經歷了屢次變遷,由以前的單一連續區管理到分區存儲管理再發展爲段頁式管理。目前前兩種技術已逐步被淘汰, 下面咱們將詳細解讀段頁式存儲管理。
1.頁式存儲管理
分頁的基本思想是把程序的邏輯空間和內存的物理空間按照一樣的大小劃分紅若干頁面,並以頁面爲單位進行分配。在頁式存儲管理中,系統中虛地址是一個有序對(頁號,位移)。系統爲每個進程創建一個頁表,其內容包括進程的邏輯頁號與物理頁號的對應關係、狀態等。
頁式系統的動態地址轉換是這樣進行的:當進程運行時,其頁表的首地址已在系統的動態地址轉換機構中的基本地址寄存器中。執行的指令訪問虛存地址(p,d)時,首先根據頁號 p 查頁表,由狀態可知,這個頁是否已經調入內存。若已調入內存,則獲得該頁的內存位置 p',而後,與頁內相對位移 d 組合,獲得物理地址 r。若是該頁還沒有調入內存,則產生缺頁中斷,以裝入所需的頁,如圖 2-5 所示。
頁式虛擬存儲管理是在頁式存儲管理的基礎上實現虛擬存儲器的。首先把做業信息做爲副本存放在磁盤上,做業執行時,把做業信息的部分頁面裝入內存儲器,做業執行時若所訪問的頁面已在內存中,則按頁式存儲管理方式進行地址轉換,獲得欲訪問的內存絕對地址, 若欲訪問的頁面不在內存中,則產生一個「缺頁中斷」,由操做系統把當前所需的頁面裝入內存儲器中。
爲此,在裝入做業時,就應在該做業的頁表中指出哪些頁已在內存儲器中,哪些頁還沒有裝入內存。可用一個標誌位指示對應頁是否在內存儲器,可假設標誌位爲 1 表示該頁在
內存,而標誌位爲 0 表示該頁還沒有裝入內存。爲了能方便地從磁盤上找到做業信息的副本, 故在頁表中還可指出每一頁副本在磁盤上的位置。
當要裝入一個當前須要的頁面時,若是內存儲器中無空閒塊,則可選擇一個已在內存儲器中的頁面,把它暫時調出內存。若在執行中該頁面被修改過,則把該頁信息從新寫回到磁盤上,不然沒必要從新寫回磁盤。當一頁被暫時調出內存後,讓出的內存空間用來存放當前須要使用的頁面。之後再使用被調出的頁面時,可用一樣的方法調出另外一個頁面而將其再裝入內存。頁面被調出或裝入以後都要對頁表中的相應表目作修改。
當內存中無空閒塊時,爲了裝入一個頁面而必須按某種算法從已在內存的頁中選擇一頁, 將它暫時調出內存,讓出內存空間以存放所需裝入的頁面,這個工做稱爲「頁面調度」。如何選擇調出的頁面是很重要的,若是採用了一個不合適的算法,就會出現這樣的現象:剛被調出的頁面又當即要用,於是又要把它裝入,而裝入不久又被選中調出,調出不久又被裝入, 如此反覆,使調度很是頻繁。這種現象稱爲「抖動」。一個好的調度算法應減小或避免抖動現象。經常使用的頁面調度算法有:
(1) 最優(OPT)算法。選擇再也不使用或最遠的未來才被使用的頁,這是理想的算法 ,可是難以實現,經常使用於淘汰算法的比較。
(2) 隨機(RAND)算法。隨機地選擇被淘汰的頁,開銷小,可是可能選中當即就要訪問的頁。
(3) 先進先出算法。選擇在內存駐留時間最長的頁彷佛合理,但可能淘汰掉頻繁使用的頁。另外,使用 FIFO 算法時,在未給予進程分配足夠的頁面數時,有時會出現給予進程的頁面數增多,缺頁次數反而增長的異常現象。FIFO 算法簡單,易實現。能夠把裝入內存儲器的那些頁的頁號按進入的前後順序排成隊列,每次老是調出隊首的頁,當裝入一個新頁後,把新頁的頁號排到隊尾。
(4) 最近最少使用(Least Recently Used,LRU)算法。選擇離當前時間最近的一段時間內使用得最少的頁。這個算法的主要出發點是,若是某個頁被訪問了,則它可能立刻就要被訪問;反之,若是某個頁長時間未被訪問,則它在最近一段時間也不會被訪問。
2.段式存儲管理
段式存儲管理與頁式存儲管理類似。分段的基本思想是把用戶做業按邏輯意義上有完整意義的段來劃分,並以段爲單位做爲內外存交換的空間尺度。
一個做業是由若干個具備邏輯意義的段(如主程序、子程序、數據段等)組成。分段系統中,允許程序(做業)佔據內存中許多分離的分區。每一個分區存儲一個程序分段。這樣, 每一個做業須要幾對界限地址寄存器,斷定訪問地址是否越界也就更困難了。在分段存儲系統中經常利用存儲保護鍵實現存儲保護。分段系統中虛地址是一個有序對(段號,位移)。系
統爲每一個做業創建一個段表,其內容包括段號、段長、內存起始地址和狀態等。狀態指出這個段是否已調入內存,即內存起始地址指出這個段,狀態指出這個段的訪問權限。
分段系統的動態地址轉換是這樣進行的:進程執行時,其段表的首地址已在基本地址寄存器中,執行的指令訪問虛存(s,d)(取指令或取操做數)時,首先根據段號 s 查段表,若段已經調入內存,則獲得該段的內存起始地址,而後與段內相對地址(段內偏移量 d)相加,獲得實地址。若是該段還沒有調入內存,則產生缺段中斷,以裝入所須要的段。段式存儲與頁式存儲的地址轉換方式相似,參看圖 1-6。
段式虛擬存儲管理仍然以段式存儲管理爲基礎,爲用戶提供比內存實際容量大的虛擬空間。段式虛擬存儲管理把做業中的各個分段信息都保留在磁盤上,看成業能夠投入執行時, 作以下操做:
(1) 首先把當前須要的一段或幾段裝入內存。
(2) 做業執行時,若是要訪問的段已經在內存,則按照「段式存儲管理」中的方式進行地址轉換;若是要訪問的段不在內存中,則產生一個「缺段中斷」,由操做系統把當前須要的段裝入內存。
所以,在段表中應增設段是否在內存的標誌以及各段在磁盤上的位置,已在內存中的段仍要指出該段在內存中的起始地址和佔用內存區長度。
做業執行要訪問的段時,由硬件的地址轉換機構查段表。若該段在內存中,則當即把邏輯地址轉換成絕對地址;若該段不在內存中,則造成「缺段中斷」,由操做系統處理這個中斷。
處理的辦法是,查內存分配表,找出一個足夠大的連續區以容納該分段,若是找不到足夠大的連續區則檢查空閒區的總和,若空閒區總和能知足該段要求,那麼進行適當移動將分散的空閒區集中;若空閒區總和不能知足該段要求,可把內存中的一段或幾段調出,而後把當前要訪問的段裝入內存中。段被移動、調出和裝入後都要對段表中的相應表目作修改。新的段被裝入後應讓做業從新執行被中斷的指令,這時就能找到要訪問的段,也能夠繼續執行下去。
3.段頁式存儲管理
段頁式管理是段式和頁式兩種管理方法結合的產物,綜合了段式組織與頁式組織的特色, 根據程序模塊分段,段內再分頁,內存被分劃成定長的頁。段頁式系統中虛地址形式是(段號、頁號、頁內偏移),如圖 2-6 所示。系統爲每一個進程創建一個段表,爲每一個段創建一個 頁表。段頁式管理採用段式分配、頁式使用的方法,便於動態鏈接和存儲的動態分配。這種存儲管理能提升內存空間的利用率。
段式虛擬管理仍是以段爲單位分配內存空間,整段的調出、裝入,有時還要移動,這些都增長了系統的開銷。若是按段頁式存儲管理的方式,把每一段再分紅若干頁面,那麼,每一段沒必要佔用連續的存儲空間;甚至當內存塊不夠時,可只將一段中的部分頁面裝入內存, 這種管理方式稱爲「段頁式虛擬存儲管理」。
段頁式虛擬存儲管理爲每個裝入內存的做業創建一張段表,還要爲每一段創建頁表。段表中指出該段的頁表存放位置及長度,頁表中應指出該段的各頁在磁盤上的位置以及頁是否在內存中,若在內存中則填上佔用的內存塊號。做業執行時按段號查段表,找到相應的頁表再根據頁號查頁表,由標誌位斷定該頁是否已在內存,如果,則進行地址轉換;不然進行頁面調度。地址轉換過程如圖 2-7 所示。
段頁式虛擬存儲管理結合了段式和頁式的優勢,但增長了設置表格(段表、頁表)和查表等開銷,段頁式虛擬存儲器通常只在大型計算機系統中使用。
2.2.3 設備管理
在計算機系統中,除了處理器和內存以外,其餘的大部分硬設備稱爲外部設備。它包括輸入/輸出設備,輔存設備及終端設備等。這些設備種類繁多,特性各異,操做方式的差別很大,從而使操做系統的設備管理變得十分繁雜。在架構師考試中,設備管理須要掌握的知識內容較少,主要爲兩個方面:
1.數據傳輸控制方式
設備管理的主要任務之一是控制設備和內存或 CPU 之間的數據傳送,本節介紹幾種經常使用的數據傳送控制方式。
選擇和衡量控制方式的原則以下:
(1) 數據傳送速度足夠高,能知足用戶的須要但又不丟失數據。
(2) 系統開銷小,所需的處理控制程序少。
(3) 能充分發揮硬件資源的能力,使得 I/O 設備儘可能處於使用狀態中,而 CPU 等待時間少。
外圍設備和內存之間經常使用的數據傳送控制方式主要有如下幾種:
(1) 程序控制方式。處理器啓動數據傳輸,而後等設備完成。
(2) 中斷方式。程序控制方式不能實現併發。中斷方式的數據傳輸過程是這樣的,進程啓動數據傳輸(如讀)後,該進程放棄處理器,當數據傳輸完成,設備控制器產生中斷請求,中斷處理程序對數據傳輸工做處理以後,讓相應進程成爲就緒狀態。之後,該進程就能夠獲得所須要的數據。
(3) 直接存儲訪問(Direct Memory Access,DMA)方式。指外部設備和內存之間開闢直接的數據交換通路。除了控制狀態寄存器和數據緩衝寄存器外,DMA 控制器中還包括傳輸字節計數器、內存地址寄存器等。DMA 方式採用竊取(或挪用)處理器的工做週期和控制總線而實現輔助存儲器和內存之間的數據交換。有的 DMA 方式也採用總線浮起方式傳輸大批量數據。
(4) 通道方式。通道又稱爲輸入/輸出處理器(Input/Output Processor,IOP),能夠獨立完成系統交付的輸入/輸出任務,經過執行自身的輸入/輸出專用程序(稱通道程序)進行內存和外設之間的數據傳輸。主要有 3 種通道:字節多路通道、選擇通道和成組多路通道。
2.虛設備與 SPOOLING 技術
採用假脫機技術,能夠將低速的獨佔設備改形成一種可共享的設備,並且一臺物理設備能夠對應若干臺虛擬的同類設備。假脫機(Simultaneous Peripheral Operation On Line, SPOOLING)的意思是外部設備同時聯機操做,又稱爲假脫機輸入/輸出操做,採用一組程序或進程模擬一臺輸入/輸出處理器。
SPOOLING 系統的組成如圖 2-8 所示。該技術利用了專門的外圍控制機將低速 I/O 設備上的數據傳送到高速設備上,或者相反。可是當引入多道程序後,徹底能夠利用其中的一道程序來模擬脫機輸入時的外圍控制機的功能,把低速的 I/O 設備上的數據傳送到高速磁盤上;再利用另外一道程序來模擬脫機輸出時外圍控制機的功能,把高速磁盤上的數據傳送到低速的 I/O 設備上。這樣即可以在主機的控制下實現脫機輸入、輸出的功能。此時的外圍操做與 CPU 對數據的處理同時進行。
採用假脫機技術,能夠將低速的獨佔設備改形成一種可共享的設備,並且一臺物理設備能夠對應若干臺虛擬的同類設備。SPOOLING 系統必須有高速、大容量而且可隨機存取的外存(例如,磁盤或磁鼓)支持。
希賽教育專家提示:在現代計算機系統中,還能夠用一臺設備來模擬自身。例如,常見的多窗口技術,即在一個終端上開多個窗口,每一個窗口能夠獨立地進行顯示,以監視用戶不一樣任務的執行狀況。這是經過縮小顯示區域、平鋪或重疊顯示來模擬多個顯示器的。
2.2.4 文件管理
操做系統對計算機的管理包括兩個方面:硬件資源和軟件資源。硬件資源的管理包括CPU 的管理、存儲器的管理、設備管理等,主要解決硬件資源的有效和合理利用問題。
軟件資源包括各類系統程序、各類應用程序、各類用戶程序,也包括大量的文檔材料、庫函數等。每一種軟件資源自己都是具備必定邏輯意義的相關信息的集合,在操做系統中它們以文件形式存儲。
計算機系統的重要做用之一是能快速處理大量信息,所以數據的組織、存取和保護成爲一個極重要的內容。文件系統是操做系統中組織、存取和保護數據的一個重要部分。
文件管理的功能包括:創建、修改、刪除文件;按文件名訪問文件;決定文件信息的存放位置、存放形式及存取權限;管理文件間的聯繫及提供對文件的共享、保護和保密等。容許多個用戶協同工做又不引發混亂。文件的共享是指一個文件可讓多個用戶共同使用,它能夠減小用戶的重複性勞動,節省文件的存儲空間,減小輸入/輸出文件的次數等。文件的保護主要是爲防止因爲錯誤操做而對文件形成的破壞。文件的保密是爲了防止未經受權的用戶對文件進行訪問。
文件的保護、保密其實是用戶對文件的存取權限控制問題。通常爲文件的存取設置兩級控制:第 1 級是訪問者的識別,即規定哪些人能夠訪問;第 2 級是存取權限的識別,即有權參與訪問者可對文件執行何種操做。
1.文件的邏輯結構
文件的結構是指文件的組織形式,從用戶角度所看到的文件組織形式,稱爲文件的邏輯結構。
文件的邏輯組織是爲了方便用戶使用。通常文件的邏輯結構能夠分爲兩種:無結構的字符流文件和有結構的記錄文件。記錄文件由記錄組成,即文件內的信息劃分紅多個記錄,以記錄爲單位組織和使用信息。
記錄文件有順序文件、索引順序文件、索引文件和直接文件。
(1) 順序文件。大多數文件是順序文件。順序文件的記錄定長,記錄中的數據項的類型長度與次序固定,通常還有一個能夠惟一標識記錄的數據項,稱爲鍵(key),記錄是按鍵值的約定次序組織的。順序文件經常使用於批處理應用,對於查詢或更新某個記錄的處理性能不太好。
(2) 索引順序文件。索引順序文件是基於鍵的約定次序組織的,並且維護鍵的索引和溢出區域。鍵的索引也能夠是多級索引。索引順序文件既適用於交互方式應用,也適用於批處理方式應用。
(3) 索引文件。索引文件是基於記錄的一個鍵數據項組織的。許多應用需按照別的數據項訪問文件,爲此,常採用索引文件方法,即對主文件中的記錄按須要的數據項(一個或幾個)建索引,索引文件自己是順序文件組織。
(4) 直接文件。直接文件又稱哈希(Hash)文件。記錄以它們在直接訪問存儲設備上的物理地址直接(隨機地)訪問。直接文件經常使用 於須要高速訪問文件並且每次僅訪問一條記錄的應用中。
2.文件的物理結構
文件的物理結構是指文件在存儲設備上的存放方法。文件的物理結構側重於提升存儲器的利用效率和下降存取時間。文件的存儲設備一般劃分爲大小相同的物理塊,物理塊是分配和傳輸信息的基本單位。文件的物理結構涉及文件存儲設備的組塊策略和文件分配策略,決定文件信息在存儲設備上的存儲位置。經常使用的文件分配策略有:
(1) 順序分配(連續分配)。這是最簡單的分配方法。在文件創建時預先分配一組連續的物理塊,而後,按照邏輯文件中的信息(或記錄)順序,依次把信息(或記錄)按順序存儲到物理塊中。這樣,只需知道文件在文件存儲設備上的起始位置和文件長度,就能進行存取,這種分配方法適合於順序存取,在連續存取相鄰信息時,存取速度快。其缺點是在文件創建時必須指定文件的信息長度,之後不能動態增長,通常不宜用於須要常常修改的文件。
(2) 連接分配(串聯分配)。這是按單個物理塊逐個進行的。每一個物理塊中(通常是最後一個單元)設有一個指針,指向其後續鏈接的下一個物理塊的地址,這樣,全部的物理塊都被連接起來,造成一個連接隊列。在創建連接文件時,不須要指定文件的長度,在文件的說明信息中,只需指出該文件的第一個物理塊塊號,並且連接文件的文件長度能夠動態地增加。只調整物理塊間的指針就能夠插入或刪除一個信息塊。
連接分配的優勢是能夠解決存儲器的碎片問題,提升存儲空間利用率。因爲連接文件只能按照隊列中的連接指針順序查找,所以搜索效率低,通常只適用於順序訪問,不適用於隨機存取。
(3) 索引分配。這是另外一種對文件存儲不連續分配的方法。採用索引分配方法的系統,爲每個文件創建一張索引表,索引表中每一表項指出文件信息所在的邏輯塊號和與之對應的物理塊號。
索引分配既能夠知足文件動態增加的要求,又能夠方便而迅速地實現隨機存取。對一些大的文件,當索引表的大小超過一個物理塊時,會發生索引表的分配問題。通常採用多級(間接索引)技術,這時在由索引表指出的物理塊中存放的不是文件存放處而是存放文件信息的物理塊地址。這樣,若是一個物理塊能存儲 n 個地址,則一級間接索引將使可尋址的文件長度變成 n2 塊,對於更大的文件能夠採用二級甚至三級間接索引(例如,UNIX 操做系統採用三級索引結構,如圖 2-9 所示)。
索引文件的優勢是既適用於順序存取,又適用於隨機存取。缺點是索引表增長了存儲 空間的開銷。另外,在存取文件時須要訪問兩次磁盤,一次是訪問索引表,另外一次是根據索引表提供的物理塊號訪問文件信息。爲了提升效率,一種改進的方法是,在對某個文件進行操做以前,預先把索引表調入內存。這樣,文件的存取就能直接從內存的索引表中肯定相應的物理塊號,從而只須要訪問一次磁盤。
3.文件存儲設備管理
文件存儲設備管理,就是操做系統要有效地進行存儲空間的管理。因爲文件存儲設備是分紅許多大小相同的物理塊,並以塊爲單位交換信息,所以,文件存儲設備的管理實質上是對空閒塊的組織和管理問題。它包括空閒塊的組織,空閒塊的分配與空閒塊的回收等問題。有 3 種不一樣的空閒塊管理方法,它們分別是索引法、連接法和位示圖法。
(1) 索引法。索引法把空閒塊做爲文件並採用索引技術。爲了有效,索引對應於一個 或由幾個空閒塊構成的空閒區。這樣,磁盤上每個空閒塊區都對應於索引表中一個條目, 這個方法能有效地支持每一種文件分配方法。
(2) 連接法。連接法使用鏈表把空閒塊組織在一塊兒,當申請者須要空閒塊時,分配程 序從鏈首開始摘取所需的空閒塊。反之,管理程序把回收的空閒塊逐個掛入隊尾,這個方法適用於每一種文件分配方法。空閒塊的連接方法能夠按釋放的前後順序連接,也能夠按空閒塊區的大小順序連接。後者有利於得到連續的空閒塊的請求,但在分配請求和回收空閒塊時系統開銷多一點。
(3) 位示圖法。該方法是在外存上創建一張位示圖(Bitmap),記錄文件存儲器的使 用狀況。每一位僅對應文件存儲器上的一個物理塊,取值 0 和 1 分別表示空閒和佔用。文件
存儲器上的物理塊依次編號爲:0、一、2、…。假如系統中字長爲 32 位,有 4096 個物理塊,那麼在位示圖中的第 1 個字對應文件存儲器上的 0、一、2、…、31 號物理塊;第 2 個字對應文件存儲器上的 3二、3三、34、…、63 號物理塊;第 128 字對應文件存儲器上的 406四、4065、…、4095 號物理塊。這樣位示圖的大小爲 32 字。
位示圖是利用二進制的一位來表示磁盤中一個盤塊的使用狀況,如圖 2-10 所示。當其值爲「0」時,表示對應的盤塊空閒;爲「1」時表示已分配。由全部盤塊對應的位構成一個集合,稱爲位示圖。位示圖也可描述爲一個二維數組 map:Varmap:array[1.…m,1.…n]of bit;
4.樹型目錄結構
在計算機的文件系統中,通常採用樹型目錄結構。在樹型目錄結構中,樹的根結點爲根目錄,數據文件做爲樹葉,其餘全部目錄均做爲樹的結點。
根目錄隱含於一個硬盤的一個分區中,根目錄在最頂層。它包含的子目錄是一級子目錄。每個一級子目錄又能夠包含若干二級子目錄,…,這樣的組織結構就叫做目錄樹。
當前盤和當前目錄是系統默認的操做對象。若是用戶沒有指明操做對象,系統就將用戶命令指向當前盤和當前目錄。
路徑是指從根目錄或者當前目錄開始到訪問對象(目錄或者文件),在目錄樹中路經的全部目錄的序列。例如「c:\dos\lmouse\mouse」就是 Windows 系統中的一條路徑。在樹型目錄結構中,從根目錄到任何數據文件之間,只有一條惟一的通路,從樹根開始,把所有目錄文件名與數據文件名,依次用「/」(UNIX/Linux 系統)或「\」(Windows 系統)鏈接起來,構成該數據文件的路徑名,且每一個數據文件的路徑名是惟一的。這樣,即可以解決文件重名問題。
從樹根開始的路徑爲絕對路徑,若是文件系統有不少級時,使用不是很方便,因此引入相對路徑,即從當前目錄開始,再逐級經過中間的目錄文件,最後到達所要訪問的數據文件。絕對路徑給出文件或目錄位置的徹底描述,一般由層次結構的頂端開始(根目錄),通常第一個字符是「/」(UNIX/Linux 系統)或者是盤符(Windows 系統)。相對路徑一般由目錄結構中的當前位置開始,通常都比絕對路徑要短。
父目錄是指當前路徑的上一層目錄。每一個目錄下都有表明當前目錄的「.」文件和表明當前目錄父目錄的「..」文件,相對路徑名通常就是從「..」開始的。
2.2.5 做業管理
從用戶的角度看,做業是系統爲完成一個用戶的計算任務(或一次事務處理)所作的工做總和。例如,對於用戶編制的源程序,需通過對源程序的編譯、鏈接編輯或鏈接裝入及運行產生計算結果。這其中的每個步驟,常稱爲做業步,做業步的順序執行即完成了一個做業。
從系統的角度看,做業則是一個比程序更廣的概念。它由程序、數據和做業說明書組成。系統經過做業說明書控制文件形式的程序和數據,使之執行和操做。並且,在批處理系統中, 做業是佔據內存的基本單位。
用戶的做業能夠經過直接的方式,由用戶本身按照做業步順序操做;也能夠經過間接的方式,由用戶率先編寫的做業步依次執行的說明,一次交給操做系統,由系統按照說明依次處理。前者稱爲聯機方式,後者稱爲脫機方式。
1.做業狀態及其轉換
一個做業從交給計算機系統到執行結束退出系統,通常都要經歷提交、後備、執行和完成 4 個狀態。其狀態轉換如圖 2-11 所示。
(1) 提交狀態。做業由輸入設備進入外存儲器(也稱輸入井)的過程稱爲提交狀態。處於提交狀態的做業,其信息正在進入系統。
(2) 後備狀態。看成業的所有信息進入外存後,系統就爲該做業創建一個做業控制塊(Job Control Block,JCB)。系統經過 JCB 感知做業的存在。JCB 主要內容包括做業名、做業狀態、資源要求、做業控制方式、做業類型及做業優先權等。
(3) 執行狀態。一個後備做業被做業調度程序選中而分配了必要的資源並進入了內存,做業調度程序同時爲其創建了相應的進程後,該做業就由後備狀態變成了執行狀態。
(4) 完成狀態。看成業正常運行結束,它所佔用的資源還沒有所有被系統回收時的狀態爲完成狀態。
2.用戶接口
用戶接口也稱爲用戶界面,其含義有兩種,一種是指用戶與操做系統交互的途徑和通道, 即操做系統的接口;另外一種是指這種交互環境的控制方式,即操做環境。
(1) 操做系統的接口。操做系統的接口又可分紅命令接口和程序接口。命令接口包含鍵盤命令和做業控制命令;程序接口又稱爲編程接口或系統調用,程序經編程接口請求系統服務,即經過系統調用程序與操做系統通訊。系統調用是操做系統提供給編程人員的惟一接口。系統調用對用戶屏蔽了操做系統的具體動做而只提供有關功能。系統調用大體分爲設備管理、文件管理、進程控制、進程通訊和存儲管理等。
(2) 操做環境。操做環境支持命令接口和程序接口,提供友好的、易用的操做平臺。操做系統的交互界面已經從早期的命令驅動方式,發展到菜單驅動方式、圖符驅動方式和視窗操做環境。