(1)進程的概念(Dijkstra)html
進程是可併發執行的程序在某個數據集合上的一次計算活動,也是操做系統進行資源分配和調度的基本單位。算法
(2)進程與程序的聯繫與區別數據結構
① 程序是指令的有序集合,其自己沒有任何運行的含義,是一個靜態的概念。而進程是程序在處理機上的一次執行過程,它是一個動態的概念。多線程
② 程序能夠做爲一種軟件資料長期存在,而進程是有必定生命期的。程序是永久的,進程是暫時的。併發
注:程序可看做一個菜譜,而進程則是按照菜譜進行烹調的過程。性能
③ 進程和程序組成不一樣:進程是由程序、數據和進程控制塊三部分組成的。url
④ 進程與程序的對應關係:經過屢次執行,一個程序可對應多個進程;經過調用關係,一個進程可包括多個程序。操作系統
(3)進程的特徵線程
動態性:進程是程序的執行,同時進程有生命週期。設計
併發性:多個進程可同存於內存中,能在一段時間內同時執行。
獨立性:資源分配和調度的基本單位。
制約性:併發進程間存在制約關係,形成程序執行速度不可預測性,必須對進程的併發執行次序、相對執行速度加以協調。
結構特徵:進程由程序塊 、數據塊、進程控制塊三部分組成。
進程的三種基本狀態:
(1)運行態(running)
當進程獲得處理機,其執行程序正在處理機上運行時的狀態稱爲運行狀態。
在單CPU系統中,任什麼時候刻最多隻有一個進程處於運行狀態。在多CPU系統中,處於運行狀態的進程數最多爲處理機的數目。
(2)就緒狀態(ready)
當一個進程已經準備就緒,一旦獲得CPU,就可當即運行,這時進程所處的狀態稱爲就緒狀態。系統中有一個就緒進程隊列,處於就緒狀態進程按某種調度策略存在於該隊列中。
(3)等待態(阻塞態)(Wait / Blocked )
若一個進程正等待着某一事件發生(如等待輸入輸出操做的完成)而暫時中止執行的狀態稱爲等待狀態。 處於等待狀態的進程不具有運行的條件,即便給它CPU,也沒法執行。系統中有幾個等待進程隊列(按等待的事件組成相應的等待隊列)。
運行到等待:等待某事件的發生(如等待I/O完成)
等待到就緒:事件已經發生(如I/O完成)
運行到就緒:時間片到(例如,兩節課時間到,下課)或出現更高優先級進程,當前進程被迫讓出處理器。
就緒到運行:當處理機空閉時,由調度(分派)程序從就緒進程隊列中選擇一個進程佔用CPU。
上述三種狀態是進程最基本的狀態,在實際的操做系統實現中,進程遠不止這三種狀態。
因爲系統不斷建立進程,系統資源特別是主存已不能知足進程運行要求,此時必須將某些進程掛起(suspend),置於磁盤對換區,釋放其所佔資源,暫時不啓用低級調度,起到平滑負載的目的。
進程內容及其狀態集合稱爲進程映像。包括:
進程控制塊:每一個進程有一進程控制塊,用來存儲進程的標識信息、現場信息和控制信息。
程序塊:
核心棧:每一個進程捆綁一個核心棧,進程在覈心態工做時,用來保存中斷/異常現場等。
數據塊:存放程序私有數據,用戶棧也在數據塊中開闢。
進程上下文
操做系統中把進程物理實體和支持進程運行的環境合稱爲進程上下文。
進程在其當前上下文中運行,當系統調度新進程佔有處理器時,新老進程隨之發生上下文切換。即保存老進程狀態而裝入被保護了的新進程的狀態,以便新進程運行
進程上下文組成
用戶級上下文:由正文(程序)、數據、共享存儲區、用戶棧組成,佔用進程的虛地址空間。
存器上下文:由程序狀態字寄存器、指令計數器、棧指針、控制寄存器、通用寄存器等組成。
系統級上下文:由進程控制塊、主存管理信息(頁表或段表)、核心棧等組成。
進程控制塊(Process Control Block,PCB)
每一個進程有且僅有一個進程控制塊
PCB是操做系統用於記錄和刻劃進程狀態及有關信息的數據結構,是操做系統掌握進程的惟一資料結構。
系統利用PCB來控制和管理進程,因此PCB是系統感知進程存在的惟一標誌
進程與PCB是一一對應的,在建立進程時,創建PCB,並伴隨進程運行的全過程,直到進程撤消而撤消。PCB就象咱們的戶口。
PCB的內容
①標識信息
進程標識ID:惟一,一般是一個整數
進程組標識ID
用戶進程名
用戶組名
②現場信息
寄存器內容(通用寄存器內容、控制寄存器內容、棧指針等)
③控制信息
進程調度信息:如進程狀態、等待時間、等待緣由、進程優先級、隊列指針等
進程組成信息:如正文段指針、數據段指針、進程族系信息
進程間通訊信息:如消息隊列指針、所使用的信號量和鎖
進程段、頁表指針、進程映像在輔存地址
CPU的佔用和使用信息:如時間片剩餘量、已佔用CPU時間、已執行時間總和、定時器信息、記帳信息
進程特權信息:如主存訪問權限、處理器特權
資源清單:所需所有資源、已分得資源
進程隊列及其管理
處於同一狀態的全部PCB組織在一塊兒的數據結構稱爲進程隊列。例如運行隊列、就緒隊列、等待隊列。
同一狀態進程的PCB既可按先來先到的原則排成隊列;也可按優先數或其它原則排成隊列。
通用隊列組織方式:
線性方式
連接方式
索引方式
(1)線性方式
OS根據進程的最大數目,靜態分配主存中某塊空間,全部進程的PCB都組織在一個線性表中。
優勢:簡單易行;
缺點:限定了系統中進程最大數,
常常要掃描整個線性表,調度效率較低。
(2)連接方式
相同狀態的進程PCB經過連接指針連接成一個隊列。
不一樣狀態的進程可排成不一樣的隊列,如運行隊列、就緒隊列、等待隊列。等待隊列按等待緣由不一樣可排成多個等待隊列。
(3)索引方式
對具備相同狀態的進程,分別設置各自的PCB索引表,如就緒索引表、等待索引表,記錄PCB在PCB表中的地址.
進程切換
一個進程讓出處理器,由另外一個進程佔用處理器的過程稱爲進程切換。
進程的切換使系統中的各進程均有機會佔用CPU。
進程切換的步驟
保存被中斷進程的處理器現場信息
修改被中斷進程的進程控制塊的有關信息,如進程狀態等
把被中斷進程的進程控制塊加入有關隊列
選擇下一個佔有處理器運行的進程
修改被選中進程的進程控制塊的有關信息
根據被選中進程設置操做系統用到的地址轉換和存儲保護信息
根據被選中進程恢復處理器現場
進程的控制和管理
進程是有生命週期的:產生、運行、暫停、終止。進程生命週期的動態變化過程由進程管理程序來控制。
進程的控制和管理包括:
進程建立
進程撤消
進程阻塞
進程喚醒
進程掛起
進程激活
這些控制和管理功能由操做系統中的原語實現。
原語是在覈心態執行、完成系統特定功能的不可分割的過程。
原語的特色是執行過程當中不容許被中斷,是一個不可分割的基本單位,原語的執行是順序的而不多是併發的。
1.進程建立
進程建立相似於人出生後要到派出所報戶口。
進程建立過程:
(1)在進程列表中增長一項,從PCB池中申請一個空閒PCB,爲新進程分配唯一的進程標識符;
(2)爲新進程的進程映像分配地址空間。進程管理程序肯定加載到進程地址空間中的程序;
(3)爲新進程分配除主存空間外的其餘各類所需資源;
(4)初始化PCB,如進程標識符、處理器初始狀態、進程優先級等;
(5)把新進程狀態置爲就緒態,並移入就緒進程隊列;
(6)通知操做系統的某些模塊,如記帳程序、性能監控程序。
2.進程撤銷
進程完成其任務或出現嚴重錯誤後,操做系統調用進程撤消原語撤消進程。至關於一我的死亡後,家人要去派出所消戶口。
進程撤銷過程:
(1)根據撤銷進程標識號,從相應隊列中找到並移出它;
(2)將該進程擁有的資源歸還給父進程或操做系統;
(3)若該進程擁有子進程,先撤銷它的全部子進程,以防它們脫離控制;
(4)回收PCB,並歸還到PCB池。
3.進程阻塞和喚醒
當一個處在運行狀態的進程,因等待某個事件的發生(如等待打印機)而不能繼續運行時,進程將調用阻塞原語來阻塞本身,進程的狀態由運行態轉換爲等待態(阻塞態)。
當等待事件完成時,會產生一箇中斷,激活操做系統,在系統控制下將被阻塞的進程喚醒,這個進程將由阻塞狀態轉換成就緒狀態。
進程阻塞步驟:
(1)中止進程執行,保存現場信息到PCB
(2)修改進程PCB有關內容,如進程狀態由運行態改成等待態等,並把修改狀態後的進程移入相應事件的等待隊列中;
(3)轉入進程調度程序去調度其餘進程運行。
進程喚醒步驟:
(1)從相應的等待隊列中移出進程;
(2)修改進程PCB的有關信息,如進程狀態改成就緒態,並移入就緒隊列;
(3)若被喚醒進程比當前運行進程優先級高,從新設置調度標誌。
線程及其實現
1、引入多線程的動機
引入進程的目的是爲了使多個程序併發執行,以改善資源使用率、提升系統效率。
再引入線程,則是爲了減小程序併發執行時所付出的時空開銷,使得併發粒度更細、併發性更好。
進程的兩項功能
1. 進程是資源分配和保護基本單位。
2.進程同時又是一個可獨立調度和分派的基本單位。
進程做爲一個資源擁有者,在建立、撤消、切換中,系統必須爲之付出較大時空開銷。因此係統中進程的數量不宜過多,進程切換的頻率不宜太高,但這也就限制了併發程度的進一步提升。
爲解決此問題,人們想到將進程的上述兩個功能分開,即對做爲調度和分派的基本單位,不一樣時做爲獨立分配資源的單位;對擁有資源的單位,不對之進行頻繁切換,線程於是產生。
多線程環境中進程的定義
進程是操做系統中除處理器外進行的資源分配和保護的基本單位,它有一個獨立的虛擬地址空間,用來容納進程映像(如與進程關聯的程序與數據),並以進程爲單位對各類資源實施保護,如受保護地訪問處理器、文件、外部設備及其餘進程(進程間通訊)。
1.多線程環境中的線程概念
線程是操做系統進程中可以併發執行的實體,是處理器調度和分派的基本單位。
每一個進程內可包含多個可併發執行的線程。
線程本身基本不擁有系統資源,只擁有少許必不可少的資源:程序計數器、一組寄存器、棧。
同屬一個進程的線程共享進程所擁有的主存空間和資源。
2.引入線程的好處
建立一個新線程花費時間少(結束亦如此)
兩個線程的切換花費時間少
由於同一進程內的線程共享內存和文件,所以它們之間相互通訊無須調用內核
3. 線程與進程的比較
線程具備進程的許多特徵,故又稱輕型進程,傳統進程稱重型進程。
在引入線程的OS中,每一進程都擁有多個線程,至少一個。
(1)調度
在傳統OS中,擁有資源、獨立調度和分派的基本單位都是進程,在引入線程的系統中,線程是調度和分派的基本單位,而進程是擁有資源的基本單位。
在同一個進程內線程切換不會產生進程切換,由一個進程內的線程切換到另外一個進程內的線程時,將會引發進程切換。
(2)併發性
在引入線程的系統中,進程之間可併發,同一進程內的各線程之間也能併發執行。於是系統具備更好的併發性。
(3)擁有資源
不管是傳統OS,仍是引入線程的OS,進程都是擁有資源的獨立單位,線程通常不擁有系統資源,但它能夠訪問隸屬進程的資源。即一個進程的全部資源可供進程內的全部線程共享。
(4)系統開銷
進程的建立和撤消的開銷要遠大於線程建立和撤消的開銷,進程切換時,當前進程的CPU環境要保存,新進程的CPU環境要設置,線程切換時只須保存和設置少許寄存器,並不涉及存儲管理方面的操做,可見,進程切換的開銷遠大於線程切換的開銷。
同時,同一進程內的各線程因爲它們擁有相同的地址空間,它們之間的同步和通訊的實現也變得比較容易。
線程的實現
多線程的實現分爲三類:
用戶級線程(User Level Thread,ULT):對於這種線程的建立、撤消、和切換,由用戶程序來實現,內核並不知道用戶級線程的存在。
內核級線程(Kernel Level Thread ,KLT):它們是依賴於內核的,即不管是用戶進程中的線程,仍是系統進程中的線程,它們的建立、撤消、切換都由內核實現。
混合式線程:同時支持ULT和KLT兩種線程。
1.用戶級線程(ULT)
由應用程序完成全部線程的管理
經過用戶空間中的線程庫來完成
內核並不知道線程的存在。
線程庫
提供線程運行管理系統:
建立、撤消線程
在線程之間傳遞消息和數據
調度線程執行
保護和恢復線程上下文
用戶級線程的優勢和缺點
優勢:
線程切換不調用核心
調度是應用程序特定的:能夠按須要選擇好的算法
ULT可運行在任何操做系統上(只須要線程庫),能夠在一個不支持線程的OS上實現
缺點:
因爲大多數系統調用是阻塞的,所以一個用戶級線程的阻塞會引發整個進程的阻塞。
核心只將處理器分配給進程,同一進程中的兩個線程不能同時運行於兩個處理器上
2.核心級線程(KLT)
全部線程管理由核心完成
沒有線程庫,但核心提供線程API來使用線程
核心維護進程和線程的上下文
線程之間的切換須要核心支持
以線程爲基礎進行調度
核心級線程的優勢和缺點
優勢:
對多處理器,核心能夠同時調度同一進程的多個線程
阻塞是在線程一級完成
缺點:
在同一進程內的線程切換調用內核,系統開銷較大
3.混合式線程
既支持用戶級線程,又支持內核級線程。
例子:Solaris
處理器調度
處理機是計算機系統中的重要資源。
處理機調度算法對整個計算機系統的綜合性能指標有重要影響。
可把處理機調度分紅三個層次:
高級調度
中級調度
低級調度
1.高級調度
也稱爲做業調度或長程調度。
做業調度的主要功能是根據做業調度算法選擇外存上處於後備隊列中的某些做業調入內存,併爲他們分配必要的資源、建立做業相應的進程,在做業完成後還要作結束階段的善後工做。
2.低級調度
也稱進程/線程調度、短程調度。
進程調度的主要功能是根據必定的調度算法從就緒隊列中選中一個進程/內核級線程得到處理器,讓它使用。
低級調度是操做系統最核心部分,執行十分頻繁,其調度策略的好壞直接影響整個系統的性能。
低級調度的調度方式:
(1)非剝奪式(非搶先式)
調度程序一旦把cpu分配給某一進程/線程後,便讓他一直運行下去,直到進程完成或發生某事件不能運行時,纔將cpu分配給其餘進程。
這種調度方式一般用於批處理系統中。
優勢:簡單,系統開銷小
缺點:難以知足緊急任務的要求,實時系統不宜採用
(2)剝奪式(搶先式)
當一個進程/線程正在處理器上執行時,調度程序可根據某種原則剝奪cpu分配給其餘進程/線程。
這種調度方式一般用於分時系統和實時系統中。
剝奪的原則:
優先權原則
短做業(進程)優先原則
時間片原則
3.中級調度
又稱平衡調度,中程調度
涉及進程在內外存間的交換,當主存資源緊缺時將暫不運行的進程從內存調至外存,此時這個進程處於「掛起」狀態;當進程又具有運行條件且主存資源有空閒時,再將進城從外存調至內存。
中級調度的主要目的是提升內存利用率和系統吞吐量。
低級調度是各種操做系統必備的,在純粹的分時系統或實時系統中,一般不需高級調度。通常系統都有高級調度和低級調度;功能完善的系統引入了中級調度。
選擇調度算法的原則
l .資源利用率(特別是CPU利用率)
CPU利用率=CPU有效工做時間/CPU總的運行時間,
CPU總的運行時間=CPU有效工做時間+CPU空閒等待時間。
2.吞吐率
單位時間內處理的做業數。
評價批處理系統性能的另外一個重要指標。
3.公平性
確保每一個用戶每一個進程得到合理的CPU份額或其餘資源份額,不會出現餓死狀況。
4.響應時間
交互式進程從提交一個請求(命令)到接收到響應之間的時間間隔稱響應時間。
響應時間包括:請求傳送到CPU時間、CPU處理請求的時間、響應回送到終端顯示器的時間。
使交互式用戶的響應時間儘量短,或儘快處理實時任務,這是分時系統和實時系統衡量調度性能的一個重要指標。
5.週轉時間
批處理用戶從做業提交給系統開始,到做業完成爲止的時間間隔稱做業週轉時間。
包括四部分時間:在外存後備隊列上等待做業調度的時間,相應進程在就緒隊列中等待進程調度的時間,進程在cpu上執行的時間、進程等待I/O操做完成的時間。
應使做業週轉時間或平均做業週轉時間儘量短,這是批處理系統衡量調度性能的一個重要指標。
6.週轉時間ti
做業i提交給系統的時刻是ts,完成時刻是tf,該做業的週轉時間ti爲:ti = tf – ts。
週轉時間=做業等待時間+做業運行時間。
爲了提升系統的性能,要讓若干個用戶的平均做業週轉時間和平均帶權週轉時間最小。
平均做業週轉時間 T
T = (Σti) / n
帶權週轉時間 wi
若是做業i的週轉時間爲ti,所需運行時間爲tk,則
wi=ti /tk
平均做業帶權週轉時間 W
W = (Σwi) / n
做業與進程的關係
1. 做業的基本概念
(1)做業(job)
用戶提交給操做系統計算的一個獨立任務。
(2)做業步(job step)
一個做業可劃分紅若干加工步驟,稱爲一個做業步。
典型的做業控制過程:
「編譯」、「連接」 「裝入」、「運行」
(3)做業控制塊( Job Control Block ,JCB)
爲有效地管理做業,必須爲進入系統的每一個做業創建做業控制塊。JCB是在批做業進入系統時,由Spooling系統創建的,它是做業存在於系統的標誌,做業撤離時,JCB也被撤銷。
JCB保存有系統對於做業進行管理所須要的所有信息。
批處理做業的組織和管理
一個做業從進入系統到運行結束經歷四個不一樣的狀態:
輸入狀態:
後備狀態:
執行狀態:
完成狀態:
做業是任務實體,進程是完成任務的執行實體;沒有做業任務,進程無事可幹,沒有進程,做業任務無法完成。
做業概念更多地用在批處理操做系統,而進程則能夠用在各類多道程序設計系統。
處理器調度算法
1、先來先服務(First Come First Served,FCFS )
最簡單的調度算法,便可用於做業調度,也可用於進程調度。
按做業(進程)來到的前後次序進行調度。
優勢:易於實現
缺點:調度程序每次選擇的做業是等待時間最久的,而無論做業的運行時間的長短,此算法效率低;
有利於長做業,不利於短做業
2、最短做業(進程)優先算法
SJF:Shortest Job First
SPF:Shortest Process First
可用於做業調度和進程調度。
估計做業(進程)的CPU運行時間,選取估計時間最短的做業(進程)投入運行。
優勢:
(1)易於實現。
(2)在通常狀況下這種調度算法比先來先服務調度算法的調度性能比FCFS好。
缺點:
(1)做業(進程)的執行時間是用戶估計的,不必定準確,因此實現時不必定真正作到短做業優先調度。
(2)對長做業不利
若系統不斷接受新做業,就有可能使長做業長時間得不到調度。出現飢餓現象
(3)缺乏剝奪機制,對分時、實時系統仍不理想
3、響應比最高者優先算法
(HRRF:Highest Response Ratio First)
FCFS與SJF是片面的調度算法。FCFS只考慮做業等候時間而忽視了做業的計算時問,SJF只考慮用戶估計的做業計算時間而忽視了做業等待時間。
HRRF是介乎這二者之間的折衷算法,既考慮做業等待時間,又考慮做業的運行時間,既照顧短做業又不使長做業的等待時間過長,改進了調度性能。
響應比R = 做業週轉時間 / 做業處理時間
=(做業處理時間+做業等待時間)/ 做業處理時間
= 1 +(做業等待時間 / 做業處理時間)
響應比最高者優先算法:每次調度時,計算全部做業的響應比,選擇響應比最高的調度。
短做業容易獲得較高響應比,
長做業等待時間足夠長後,也將得到足夠高的響應比,飢餓現象不會發生。
計算響應比致使必定的時間開銷,此算法性能介於FCFS和SJF之間。
4、優先級調度算法
爲做業或進程肯定優先級,選擇優先級最高的做業或進程調度。
1.兩種方式
非剝奪式:某一進程被調度運行後,除非因爲它自身的緣由不能運行,不然一直運行下去。
剝奪式:當有比正在運行的進程優先級更高的進程就緒時,系統可強行剝奪正在運行進程的CPU,提供給具備更高優先級的進程使用。
採用這種調度算法的關鍵是如何肯定進程的優先級、一個進程的優先級肯定以後是固定的,仍是隨着該進程運行的狀況的變化而變化。
2.優先級類型
(1)靜態優先級
在進程建立時肯定優先級,在進程運行時保持不變。
肯定優先級方法:
系統肯定(內部優先級) :考慮進程運行時間、使用資源,進程類型。
用戶肯定(外部優先級) :考慮進程緊迫程度,計費與進程優先級有關。
(2)動態優先級
在進程建立時創立一個優先級,系統在運行的過程當中,根據系統的設計目標,不斷地調整進程的優先級,這種方法的優勢是能比較客觀地反映進程的實際狀況和保證達到系統設計目標。
如等待時間長優先級可改變 。
5、時間片輪轉調度算法(Round Robin,RR)
分時系統中經常使用時間片輪轉法。
把CPU劃分紅若干時間片,而且按順序分配給就緒隊列中的每個進程,進程輪流佔有CPU,當時間片用完時,即便進程未執行完畢,系統也剝奪該進程的CPU,將該進程排在就緒隊列末尾,等候下一輪調度。
1.時間片大小的肯定
時間片大小對系統性能有很大影響。時間片過小,會致使頻繁切換,增大系統開銷;時間片太大,輪轉一次時間加長,進程在一個時間片內完成,時間片輪轉算法退化爲FCFS算法,沒法知足交互式用戶需求。
肯定時間片長度要從進程數目、切換開銷、系統效率和響應時間等多方面加以考慮。
2.RR改進
RR因爲採用固定時間片和僅有一個就緒隊列,因此服務質量不夠理想,進一步改進沿兩個方向:
(1)將固定時間片改成可變時間片
引入可變時間片輪轉調度算法
(2)將單就緒隊列改成多就緒隊列
引入多級反饋隊列調度算法
6、多級反饋隊列調度算法
(MLFQ:Multi-level Feedback Queue)
設置多個就緒隊列,併爲各個隊列賦予不一樣的優先級,第一個隊列最高,第二個次之……;各個隊列時間片大小也不一樣,在優先級越高的隊列中,爲每一個進程分配的時間片越小。
處理器調度先從第一個就緒進程隊列中選取進程,同一隊列中的進程按FCFS算法進行排隊。只有在未選到時,才從較低級的就緒進程隊列中選取。
當新進程進入內存後,首先放在第一個隊列末尾,到輪到該進程執行時,如在該時間片完成,即可撤離系統;若未完成,則將該進程轉入第二個隊列末尾…
該算法具備較好的性能,能知足各種應用的須要。
分時交互型短做業:一般在第一隊列規定的時間片完成,可以使終端型用戶滿意。
短批處理做業:一般在第一隊列和第二隊列各執行一個時間片就能完成,週轉時間仍很短。
長批處理做業:它將一次在第1,2,3…n個隊列中運行。