作業系統

當前位置 /首頁/計算機/作業系統/列表

作業系統讀書工程報告範文

篇一:作業系統讀書工程報告

作業系統讀書工程報告範文

一、基本理論闡述

1.程序

定義:程序是一個具有一定獨立功能的程式關於某個資料集合的一次執行活動。它是操作系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。

基本介紹:多道程式在執行時,需要共享系統資源,從而導致各程式在執行過程中出現相互制約的關係,程式的執行表現出間斷性的特徵。這些特徵都是在程式的執行過程中發生的,是動態的過程,而傳統的程式本身是一組指令的集合,是一個靜態的概念,無法描述程式在記憶體中的執行情況,即我們無法從程式的字面上看出它何時執行,何時停頓,也無法看出它與其它執行程式的關係,因此,程式這個靜態概念已不能如實反映程式併發執行過程的特徵。為了深刻描述程式動態執行過程的性質,人們引入“程序(Process)”概念。

程序的概念:第一,程序是一個實體。每一個程序都有它自己的地址空間,一般情況下,包括文字區域(text region)、資料區域(data region)和堆疊(stack region)。文字區域儲存處理器執行的程式碼;資料區域儲存變數和程序執行期間使用的動態分配的記憶體;堆疊區域儲存著活動過程呼叫的指令和本地變數。第二,程序是一個“執行中的程式”。程式是一個沒有生命的實體,只有處理器賦予程式生命時,它才能成為一個活動的實體,我們稱其為程序。

主要特徵:

動態性:程序的實質是程式在多道程式系統中的一次執行過程,程序是動態產生,動態消亡的。

併發性:任何程序都可以同其他程序一起併發執行

獨立性:程序是一個能獨立執行的基本單位,同時也是系統分配資源和排程的獨立單位;

非同步性:由於程序間的相互制約,使程序具有執行的間斷性,即程序按各自獨立的、不可預知的速度向前推進

結構特徵:程序由程式、資料和程序控制塊三部分組成。

狀態分類:

1)就緒狀態(Ready):程序已獲得除處理器外的所需資源,等待分配處理器資源;只要分配了處理器程序就可執行。就緒程序可以按多個優先順序來劃分佇列。例如,當一個程序由於時間片用完而進入就緒狀態時,排入低優先順序佇列;當程序由I/O操作完成而進入就緒狀態時,排入高優先順序佇列。

2)執行狀態(Running):程序佔用處理器資源;處於此狀態的程序的數目小於等於處理器的數目。在沒有其他程序可以執行時(如所有程序都在阻塞狀態),通常會自動執行系統的空閒程序。

3)阻塞狀態(Blocked):由於程序等待某種條件(如I/O操作或程序同步),在條件滿足之前無法繼續執行。該事件發生前即使把處理機分配給該程序,也無法執行。

程序控制的基本事件:

程序的建立

1.引起建立程序的事件

2在多道程式環境中,只有(作為)程序(時)才能在系統中執行。因此,為使程式能執行,就必須為它建立程序。導致一個程序去建立另一個程序的典型事件,可以有以下四類:

1) 使用者登入。

在分時系統中,使用者在終端鍵入登入命令後,如果是合法使用者,系統將為該終端建立一個程序,並把它插入到就緒佇列中。

2) 作業排程。

在批處理系統中,當作業排程程式按照一定的演算法排程到某作業時,便將該作業裝入到記憶體,為它分配必要的資源,並立即為它建立程序,再插入到就緒佇列中。

3) 提供服務。

當執行中的使用者程式提出某種請求後,系統將專門建立一個程序來提供使用者所需要的服務,例如,使用者程式要求進行檔案列印,作業系統將為它建立一個列印程序,這樣,不僅可以使列印程序與該使用者程序併發執行,而且還便於計算出為完成列印任務所花費的時間。

4) 應用請求。

在上述三種情況中,都是由系統核心為它建立一個新程序,而這一類事件則是基於應用程序的需求,由它建立一個新的程序,以便使新程序以併發的執行方式完成特定任務。

2.程序的建立過程

一旦作業系統發現了要求建立新程序的事件後,便呼叫程序建立原語Creat()按下述步驟建立一個新程序。

1) 申請空白PCB。為新程序申請獲得唯一的數字識別符號,並從PCB集合中索取一個空白PCB。

2) 為新程序分配資源。為新程序的程式和資料以及使用者棧分配必要的記憶體空間。顯然,此時作業系統必須知道新程序所需要的.記憶體大小。

3) 初始化程序控制塊。PCB的初始化包括:①初始化標識資訊。將系統分配的識別符號和父程序識別符號,填入新的PCB中;②初始化處理機狀態資訊。使程式計數器指向程式的入口地址,使棧指標指向棧頂;③初始化處理機控制資訊。將程序的狀態設定為就緒狀態或靜止就緒狀態,對於優先順序,通常是將它設定為最低優先順序,除非使用者以顯式的方式提出高優先順序要求。

4) 將新程序插入就緒佇列。如果程序就緒佇列能夠接納新程序,便將新程序插入到就緒佇列中。

程序終止

1.引起程序終止的事件

1)正常結束。

在任何計算機系統中,都應該有一個表示程序已經執行完成的指示。例如,在批處理系統中,通常在程式的最後安排一條Hold指令或終止的系統呼叫。當程式執行到Hold指令時,將產生一箇中斷,去通知OS本程序已經完成。

2)異常結束。

在程序執行期間,由於出現某些錯誤和故障而迫使程序終止。這類異常事件很多,常見的有:越界錯誤,保護錯,非法指令,特權指令錯,執行超時,等待超時,算術運算錯,I/O故障。

3)外界干預。

外界干預並非指在本程序執行中出現了異常事件,而是指程序應外界的請求而終止執行。這些干預有:操作員或作業系統干預,父程序請求,父程序終止。

2. 程序的終止過程

如果系統發生了上述要求終止程序的某事件後,OS便呼叫程序終止原語,按下述過程去終止指定的程序。

1)根據被終止程序的識別符號,從PCB集合中檢索出該程序的PCB,從中讀出該程序狀態。

2)若被終止程序正處於執行狀態,應立即終止該程序的執行,並置排程標誌為真。用於指示該程序被終止後應重新進行排程。

3)若該程序還有子孫程序,還應將其所有子孫程序予以終止,以防他們成為不可控的程序。

4)將被終止的程序所擁有的全部資源,或者歸還給其父程序,或者歸還給系統。

5)將被終止程序(它的PCB)從所在佇列(或連結串列)中移出,等待其它程式來蒐集資訊。

程序的阻塞和喚醒

1.引起程序阻塞和喚醒的事件

1)請求系統服務。

當正在執行的程序請求作業系統提供服務時,由於某種原因,作業系統並不立即滿足該程序的要求時,該程序只能轉變為阻塞狀態來等待,一旦要求得到滿足後,程序被喚醒。

2)啟動某種操作。

當程序啟動某種操作後,如果該程序必須在該操作完成之後才能繼續執行,則必須先使該程序阻塞,以等待該操作完成,該操作完成後,將該程序喚醒。

3)新資料尚未到達。

對於相互合作的程序,如果其中一個程序需要先獲得另一(合作)程序提供的資料才能執行以對資料進行處理,則是要其所需資料尚未到達,該程序只有(等待)阻塞,等到資料到達後,該程序被喚醒。

4)無新工作可做。

系統往往設定一些具有某特定功能的系統程序,每當這種程序完成任務後,便把自己阻塞起來以等待新任務到來,新任務到達後,該程序被喚醒。

2.程序阻塞過程

正在執行的程序,當發現上述某事件後,由於無法繼續執行,於是程序便通過呼叫阻塞原語block把自己阻塞。可見,程序的阻塞是程序自身的一種主動行為。進入block過程後,由於此時該程序還處於執行狀態,所以應先立即停止執行,把程序控制塊中的現行狀態由執行改為阻塞,並將PCB插入阻塞佇列。如果系統中設定了因不同事件而阻塞的多個阻塞佇列,則應將本程序插入到具有相同事件的阻塞(等待)佇列。最後,轉排程程式進行重新排程,將處理機分配給另一就緒程序,並進行切換,亦即,保留被阻塞程序的處理機狀態(在PCB中),再按新程序的PCB中的處理機狀態設定CPU環境。

3. 程序喚醒過程

當被阻塞的程序所期待的事件出現時,如I/O完成或者其所期待的資料已經到達,則由有關程序(比如,用完並釋放了該I/O裝置的程序)呼叫喚醒原語wakeup(),將等待該事件的程序喚醒。喚醒原語執行的過程是:首先把被阻塞的程序從等待該事件的阻塞佇列中移出,將其PCB中的現行狀態由阻塞改為就緒,然後再將該PCB插入到就緒佇列中。

二、當前理論或實踐應用現狀

1.執行緒、SMP 和微核心

在許多作業系統中,傳統的程序概念被分為兩部分:一部分負責管理資源所有權;另一部分負責指令流的執行。一個單獨的程序可包含多個執行緒。使用多執行緒的組織方法對程式的結構化和效能方面都有很大的幫助。SMP是一個擁有多處理器的計算機系統,其中的每一個處理器都可以執行所有應用程式和系統程式碼。SMP的組織方法增強了系統的效能和可靠性。SMP通常和多執行緒機制一起使用,即使沒有多執行緒機制也能很大幅度的提高系統性能。微核心是作業系統為了減少執行在核心模式的程式碼量的一種設計方式,並且分析了這種方法的優點。

2.併發:互斥和同步

相交程序之間的關係主要有兩種:同步與互斥。所謂互斥是指散步在不同程序之間的若干程式片斷,當某個程序執行其中一個程式片段時,其它程序就不能執行它們之中的任一程式片段,只能等到該程序執行完這個程式片段後才可以執行。

篇二:作業系統讀書工程報告

一、 基本理論闡述

在作業系統中排程實質上是一種資源的分配,因而排程演算法是指:根據系統的資源分配策略所規定的資源分配演算法。對於不同的作業系統和系統目標,通常採用不同的排程演算法,例如,在批處理系統中,為了照顧為數眾多的短作業,應採用短作業優先的排程演算法;又如在分時系統中,為了保證系統具有合理的相應時間,應採用輪轉法進行排程。目前存在的多種排程演算法中,有的使用於作業排程,也有的適用於程序排程;但也有些演算法既可適用於作業排程又適用於程序排程。

1.先來先服務(FCFS)

先來先服務(FCFS, First Come First Serve)是最簡單的排程演算法,按先後順序進行排程。

1.1 FCFS演算法

按照作業提交或程序變為就緒狀態的先後次序,分派CPU; 當前作業或程序佔用CPU,直到執行完或阻塞,才出讓CPU(非搶佔方式)。 在作業或程序喚醒後(如I/O完成),並不立即恢復執行,通常等到當前作業或程序出讓CPU。最簡單的演算法。

1.2 FCFS的特點

比較有利於長作業,而不利於短作業。 有利於CPU繁忙的作業,而不利於I/O繁忙的作業。

2.短作業優先

短作業優先(SJF, Shortest Job First)又稱為“短程序優先”SPN(Shortest Process Next);這是對FCFS演算法的改進,其目標是減少平均週轉時間。

對預計執行時間短的作業(程序)優先分派處理機。通常後來的短作業不搶先正在執行的作業。

2.1 SJF的特點

(1) 優點:

比FCFS改善平均週轉時間和平均帶權週轉時間,縮短作業的等待時間;

提高系統的吞吐量;

(2) 缺點:

對長作業非常不利,可能長時間得不到執行; 未能依據作業的緊迫程度來劃分執行的優先順序;

難以準確估計作業(程序)的執行時間,從而影響排程效能。

2.2 SJF的變型

“最短剩餘時間優先”SRT(Shortest Remaining Time)(允許比當前程序剩餘時間更短的程序來搶佔)

“最高響應比優先”HRRN(Highest Response Ratio Next)(響應比R = (等待時間 + 要求執行時間) / 要求執行時間,是FCFS和SJF的折衷)

3優先順序法

優先順序演算法(Priority Sched uling)是多級佇列演算法的改進,平衡各程序對響應時間的要求。適用於作業排程和程序排程,可分成搶先式和非搶先式。 3.1靜態優先順序

作業排程中的靜態優先順序大多按以下原則確定:

由使用者自己根據作業的緊急程度輸入一個適當的優先順序。 由系統或操作員根據作業型別指定優先順序。 系統根據作業要求資源情況確定優先順序。 程序的靜態優先順序的確定原則: 按程序的型別給予不同的優先順序。

將作業的情態優先順序作為它所屬程序的優先順序。

3.2動態優先順序

程序的動態優先順序一般根據以下原則確定: 根據程序佔用有CPU時間的長短來決定。 根據就緒程序等待CPU的時間長短來決定。

4高響應比優先

最高響應比優先法(HRN,Highest Response_ratio Next)是對FCFS方式和SJF方式的一種綜合平衡。FCFS方式只考慮每個作業的等待時間而未考慮執行時間的長短,而SJF方式只考慮執行時間而未考慮等待時間的長短。因此,這兩種排程演算法在某些極端情況下會帶來某些不便。HRN排程策略同時考慮每個作業的等待時間長短和估計需要的執行時間長短,從中選出響應比最高的作業投入執行。

響應比R定義如下: R =(W+T)/T = 1+W/T

其中T為該作業估計需要的執行時間,W為作業在後備狀態佇列中的等待時間。每當要進行作業排程時,系統計算每個作業的響應比,選擇其中R最大者投入執行。這樣,即使是長作業,隨著它等待時間的增加,W / T也就隨著增加,也就有機會獲得排程執行。這種演算法是介於FCFS和SJF之間的一種折中演算法。由於長作業也有機會投入執行,在同一時間內處理的作業數顯然要少於SJF法,從而採用HRN方式時其吞吐量將小於採用SJF 法時的吞吐量。另外,由於每次排程前要計算響應比,系統開銷也要相應增加。

5時間片輪轉

輪轉法(Round Robin)是讓每個程序在就緒佇列中的等待時間與享受服務的時間成正比例。

將系統中所有的就緒程序按照FCFS原則,排成一個佇列。每次排程時將CPU分派給隊首程序,讓其執行一個時間片。時間片的長度從幾個ms到幾百ms。在一個時間片結束時,發生時鐘中斷。排程程式據此暫停當前程序的執行,將其送到就緒佇列的末尾,並通過上下文切換執行當前的隊首程序。程序可以未使用完一個時間片,就出讓CPU(如阻塞)。

長度的確定

時間片長度變化的影響:過長->退化為FCFS演算法,程序在一個時間片內都執行完,響應時間長。過短->使用者的一次請求需要多個時間片才能處理完,上下文切換次數增加,響應時間長。對響應時間的要求:T(響應時間)=N(程序數目)*q(時間片)。

就緒程序的數目:數目越多,時間片越小

系統的處理能力:應當使使用者輸入通常在一個時間片內能處理完,否則使響應時間,平均週轉時間和平均帶權週轉時間延長。

6多級反饋佇列

6.1 多級反饋佇列的原理:

1、設有N個佇列(Q1,),其中各個佇列對於處理機的優先順序是不一樣的,也就是說位於各個佇列中的作業(程序)的優先順序也是不一樣的。一般來說,優先順序Priority(Q1) > Priority(Q2) > ... > Priority(QN)。怎麼講,位於Q1中的任何一個作業(程序)都要比Q2中的任何一個作業(程序)相對於CPU的優先順序要高(也就是說,Q1中的作業一定要比Q2中的作業先被處理機排程),依次類推其它的佇列。

2、對於某個特定的佇列來說,裡面是遵循時間片輪轉法。也就是說,位於佇列Q2中有N個作業,它們的執行時間是通過Q2這個佇列所設定的時間片來確定的(為了便於理解,我們也可以認為特定佇列中的作業的優先順序是按照FCFS來排程的)。

3、各個佇列的時間片是一樣的嗎?不一樣,這就是該演算法設計的精妙之處。各個佇列的時間片是隨著優先順序的增加而減少的,也就是說,優先順序越高的佇列中它的時間片就越短。同時,為了便於那些超大作業的完成,最後一個佇列QN(優先順序最低的佇列)的時間片一般很大(不需要考慮這個問題)。 6.2多級反饋佇列排程演算法描述:

1、程序在進入待排程的佇列等待時,首先進入優先順序最高的Q1等待。

2、首先排程優先順序高的佇列中的程序。若高優先順序中佇列中已沒有排程的程序,則排程次優先順序佇列中的程序。例如:Q1,Q2,Q3三個佇列,只有在Q1中沒有程序等待時才去排程Q2,同理,只有Q1,Q2都為空時才會去排程Q3。

3、對於同一個佇列中的各個程序,按照時間片輪轉法排程。比如Q1佇列的時間片為N,那麼Q1中的作業在經歷了N個時間片後若還沒有完成,則進入Q2佇列等待,若Q2的時間片用完後作業還不能完成,一直進入下一級佇列,直至完成。

4、在低優先順序的佇列中的程序在執行時,又有新到達的作業,那麼在執行完這個時間片後,CPU馬上分配給新到達的作業(搶佔式)。

二、 當前應用現狀

linux核心的三種排程方法:

1,SCHED_OTHER 分時排程策略,

2,SCHED_FIFO實時排程策略,先到先服務3,SCHED_RR實時排程策略,時間片輪轉

實時程序將得到優先呼叫,實時程序根據實時優先順序決定排程權值,分時程序則通過nice和counter值決定權值,nice越小,counter越大,被排程的概率越大,也就是曾經使用了cpu最少的程序將會得到優先排程。

SHCED_RR和SCHED_FIFO的不同:

當採用SHCED_RR策略的程序的時間片用完,系統將重新分配時間片,並置於就緒佇列尾。放在佇列尾保證了所有具有相同優先順序的RR任務的排程公平。

SCHED_FIFO一旦佔用cpu則一直執行。一直執行直到有更高優先順序任務到達或自己放棄。

如果有相同優先順序的實時程序(根據優先順序計算的排程權值是一樣的)已經準備好,FIFO時必須等待該程序主動放棄後才可以執行這個優先順序相同的任務。而RR可以讓每個任務都執行一段時間。

相同點:

RR和FIFO都只用於實時任務。