操作系统笔记2
?
l? 進(jìn)程
l? 并發(fā):多個程序在一段時間內(nèi)同時發(fā)生
l? 進(jìn)程是什么?與程序區(qū)別
進(jìn)程就是用于描述、控制程序在內(nèi)存中并發(fā)運(yùn)行的一個東東
程序的一次執(zhí)行
是一個程序與其數(shù)據(jù)一道通過處理機(jī)的執(zhí)行所發(fā)生的活動
進(jìn)程是進(jìn)程實(shí)體的運(yùn)行過程,是系統(tǒng)進(jìn)行資源分配和調(diào)度的一個獨(dú)立單位。
? 動與靜:
l? 進(jìn)程是動態(tài)的,程序是靜態(tài)的:程序是有序代碼的集合;進(jìn)程是程序的執(zhí)行。
? 永久與暫時:
l? 進(jìn)程是暫時的,程序是永久的:進(jìn)程是一個狀態(tài)變化的過程,程序可長久保存。
? 結(jié)構(gòu):
l? 進(jìn)程的組成包括程序、數(shù)據(jù)和進(jìn)程控制塊(進(jìn)程各種控制信息)。
? 進(jìn)程與程序的對應(yīng)關(guān)系:
l? 都可1對n。通過多次執(zhí)行,一個程序可對應(yīng)多個進(jìn)程;通過調(diào)用關(guān)系,一個進(jìn)程可包括多個程序。
?
l? 進(jìn)程的基本狀態(tài)
(1)就緒狀態(tài)(Ready)
????? 進(jìn)程獲得除CPU之外的所有必需資源,一旦得到CPU控制權(quán),可立即運(yùn)行。
(2)運(yùn)行狀態(tài)(Running)
????? 進(jìn)程已獲得所有運(yùn)行必需的資源,正在處理機(jī)上執(zhí)行。
(3)阻塞狀態(tài)(Blocked)
????? 正在執(zhí)行的進(jìn)程由于發(fā)生某事件(請求I/O、申請緩沖、時間片到)而暫時無法執(zhí)行時,便放棄CPU后暫停
?
?
l? 進(jìn)程控制塊PCB.
進(jìn)程實(shí)體:代碼段+數(shù)據(jù)段+PCB
Pcb存放進(jìn)程的管理和控制信息的數(shù)據(jù)結(jié)構(gòu)
?
進(jìn)程控制塊中的信息(pcb內(nèi)):
進(jìn)程標(biāo)識符信息
處理機(jī)狀態(tài)信息
進(jìn)程調(diào)度信息
進(jìn)程控制信息
l? 進(jìn)程的創(chuàng)建、阻塞、終止過程
創(chuàng)建過程:
(1) 申請空白PCB
(2) 為新進(jìn)程分配資源
??????????? 主要是內(nèi)存資源的處理
(3) 初始化進(jìn)程控制塊
??????????? 標(biāo)識符(包括父進(jìn)程的)、程序計(jì)數(shù)器指向程序入口地址,就緒態(tài)、優(yōu)先級等信息的填寫。
(4) 將新進(jìn)程插入就緒隊(duì)列
阻塞過程:
(1)將PCB中的狀態(tài)改為阻塞
(2)該P(yáng)CB加入到阻塞隊(duì)列中
(3)轉(zhuǎn)進(jìn)程調(diào)度,將處理機(jī)分配給另一進(jìn)程
(4)進(jìn)行進(jìn)程切換,即根據(jù)兩切換進(jìn)程的PCB,保護(hù)與重新設(shè)置處理機(jī)狀態(tài)
(阻塞原因了解:)
請求系統(tǒng)服務(wù)的滿足情況
啟動某種需等待(I/O)操作
合作需要的新數(shù)據(jù)尚未到達(dá)
執(zhí)行某功能的進(jìn)程暫時無新工作可做(如發(fā)送數(shù)據(jù)進(jìn)程)
?
終止過程:
?
(1) 根據(jù)進(jìn)程標(biāo)示符,檢索出該進(jìn)程PCB,讀其狀態(tài)。
????? *IF 執(zhí)行態(tài),立即終止該進(jìn)程,置調(diào)度標(biāo)志為真,指示重新進(jìn)行調(diào)度。
????? *IF 有子孫進(jìn)程,亦應(yīng)予以終止,以防成為不可控進(jìn)程。
(2) 歸還全部資源至其父進(jìn)程或系統(tǒng)。
(3) 將該進(jìn)程PCB從所在隊(duì)列或鏈表中移出。
?
?
l? 進(jìn)程同步問題:源于進(jìn)程的相互制約關(guān)系:資源共享,有序合作
l? 同步的概念:并發(fā)執(zhí)行的諸進(jìn)程之間能有效地共享資源和相互合作,從而使程序的執(zhí)行具有可再現(xiàn)性。
l? 控制同步的四大原則
空閑讓進(jìn):資源使用最基本原則
忙則等待:保證互斥
有限等待:合適時被喚醒防止死等
讓權(quán)等待:能主動釋放CPU防止忙等
?
l? 臨界資源、臨界區(qū)
一次僅允許一個進(jìn)程使用的資源
每個進(jìn)程中訪問臨界資源的那段代碼叫臨界區(qū)。
為了正確同步,對臨界區(qū)的代碼要增加控制
l? 信號量機(jī)制
最初的信號量機(jī)制,兩個原子操作對一個共享整型量進(jìn)行操作。
信號量定義為一個整型量;
根據(jù)初始情況賦相應(yīng)的值;
僅能通過兩個原子操作來訪問。
?
l? 信號量操作原語wait、signal
P操作? wait(S):
????????????? While S<=0 do no-op;
????????????? S:=S-1;
V操作? signal(S):??? ?
????????????? S:=S+1;
?
?
互斥:在操作系統(tǒng)中,當(dāng)一個進(jìn)程進(jìn)入臨界區(qū)使用臨界資源時,另一個進(jìn)程必須等待,直到占用臨界資源的進(jìn)程退出臨界區(qū),我們稱進(jìn)程之間的這種相互制約關(guān)系為“互斥”。
同步:多個相互合作的進(jìn)程,在一些關(guān)鍵點(diǎn)上可能需要互相等待或互相交換信息,這種相互制約關(guān)系稱為進(jìn)程同步關(guān)系。可理解為“有序”。
l? 典型同步題目:
l? 生產(chǎn)者-消費(fèi)者 互斥-同步
一群生產(chǎn)者進(jìn)程生產(chǎn)產(chǎn)品供給消費(fèi)者進(jìn)程消費(fèi),在兩者之間設(shè)置具有n個緩沖區(qū)的緩沖池,生產(chǎn)者進(jìn)程所生產(chǎn)的產(chǎn)品放入一個緩沖區(qū)中,消費(fèi)者進(jìn)程可從一個緩沖區(qū)中取走產(chǎn)品去消費(fèi)。
生產(chǎn)者和消費(fèi)者都以異步方式運(yùn)行,但它們之間必須保持同步:沒有產(chǎn)品不能取,沒有空間不能放。也不能同時對一個空間進(jìn)行取和放
type? item=……;表示一個產(chǎn)品
Var? n, integer;緩沖區(qū)大小
counter:0, 1, …, n; 緩沖區(qū)內(nèi)產(chǎn)品計(jì)數(shù)的變量
var? buffer: array[0, 1, …, n-1] of? item;該數(shù)組代表具有n個緩沖區(qū)的緩沖池
in, out: 0, 1, …, n-1指示生產(chǎn)者和消費(fèi)者放或取的下一個緩沖區(qū)位置指針,初值均為0。
in加1表示為in:=(in+1)mod n
out加1表示為out:=(out+1)mod n
當(dāng)(in+1)mod n=out時表示緩沖池滿
in=out表示緩沖池空
Producer:?
? repeat
???? …
???? 生產(chǎn) an item in nextp;?
???? …
???? while counter= n
???????? do no-op;
???? buffer[in]:=nextp;
???? in:=in+1 mod n;
???? counter:=counter+1;
? until false;
Consumer:
? repeat
???? while counter= 0
???????? do no-op;
???? nextc:=buffer[out];
???? out:=out+1 mod n;
???? counter:=counter-1;
???? …
???? 消費(fèi)產(chǎn)品item in nextc;
? until false;
?
取、用類,計(jì)數(shù)控制+互斥
l? 哲學(xué)家進(jìn)餐 互斥
?
計(jì)數(shù)類、死鎖相關(guān)
?
l? 讀者-寫者
?
l? 有條件的互斥 類似典型題目:單行路,同方向的不互斥;異向互斥
Writer :
repeat
?? wait(wmutex);
?? 寫入文件;
?? signal(wmutex);
until? false;
?
?
?
l? 信號量規(guī)律:
l? 分析同步關(guān)系、設(shè)置信號量初值、PV操作順序
1.?? P、V操作成對出現(xiàn)
2.?? 多個進(jìn)程對互斥同步,PV操作成對出現(xiàn)的同進(jìn)程中,初值為1
3.?? 多個進(jìn)程的有序同步,PV操作成對出現(xiàn)在不同進(jìn)程中,有V操作的進(jìn)程可通過控制先于有P操作的進(jìn)程執(zhí)行。初值根據(jù)應(yīng)用情況設(shè)置。
?
l? 一閱覽室最多容納100人,讀者進(jìn)入和離開都要在登記表上登記,每次只允許一個人登記。如何編寫進(jìn)程間的同步關(guān)系。
l? 資源:空數(shù)N,登記表S
l? 信號量n=N,mutex=1
l? 進(jìn)程:讀者進(jìn)程
u wait(n)
u wait(mutex)
l? 進(jìn)入
u signal(mutex)
l? 閱讀后離開
u signal(n)
?
l? 有一只鐵籠子,每次只能放入一只動物,獵手向籠中放入老虎,農(nóng)民向籠中放入豬,動物園等待取籠中的老虎,飯店等待取籠中的豬,試用信號量機(jī)制實(shí)現(xiàn)獵手、農(nóng)民、動物園、飯店之間同步執(zhí)行的程序。(解釋其中的信號量含義,并給出合適的初值。)
?
l? 設(shè)有一自助餐廳,可容納10名顧客就餐,餐廳滿時顧客需在門外排隊(duì)等候;顧客若能進(jìn)入則自取食物后到款臺付款;收款員負(fù)責(zé)在收款臺等待顧客付款,付款完畢顧客自行就餐后離開。分析該問題中的同步關(guān)系,試寫出顧客進(jìn)程和收款員進(jìn)程信號量機(jī)制下的同步算法,注意寫明信號量的初值和作用。
?
l? 【分析】顧客存在爭搶進(jìn)店的競爭關(guān)系,設(shè)置一個資源信號量r,初值為10;
收款員與顧客間存在雙向有序合作關(guān)系,收款員需等待顧客付款,顧客需等待收款員確認(rèn)付款完畢,需設(shè)置兩個同步信號量money,ok,初值均為0.
【算法偽代碼如下】
semaphore r=10,money=0,ok=0;
l? 顧客:
l? void custom(){
u while(true){
l? wait(r);
u //資源信號量操作成對正確
l? enter;
l? take something;
l? signal(money);
l? pay money;
l? wait(ok);??
l? signal(r);
l? leave;
u }}?
l? 售貨員:
l? void seller(){
u while(true){
n? wait(money);
u //同步信號操作配對正確
n? accept money,give changes
n? signal(ok);
u //同步信號操作配對正確
u }}?
l? CPU調(diào)度
l? 三級調(diào)度
高級調(diào)度:主要在早期批處理階段,處理在外存上的作業(yè)
低級調(diào)度: 決定內(nèi)存就緒隊(duì)列中的哪個進(jìn)程獲得處理機(jī),進(jìn)行分配工作。是最基本的一種調(diào)度
中級調(diào)度:提高內(nèi)存利用率和系統(tǒng)吞吐量。根據(jù)條件將一些進(jìn)程調(diào)出或再調(diào)入內(nèi)存
l? 調(diào)度時機(jī)\搶占\算法計(jì)算
?
?
l? 調(diào)度程序的運(yùn)行時機(jī):
程序正常完成
IO\PV阻塞
時間片到
新任務(wù)產(chǎn)生
調(diào)度算法
基本調(diào)度算法:
a)?? 先來先服務(wù)調(diào)度算法FCFS,不利于短作業(yè)
b)?? 短作業(yè)(進(jìn)程)優(yōu)先調(diào)度算法SJF/SPF,降低作業(yè)的平均等待時間,提高系統(tǒng)吞吐量。
c)?? 高優(yōu)先權(quán)優(yōu)先調(diào)度算法HPF,
d)?? 高響應(yīng)比優(yōu)先調(diào)度算法HRRN,
e)?? 基于時間片的輪轉(zhuǎn)調(diào)度算法RR,
f)?? 多級反饋隊(duì)列算法FB
* 實(shí)時調(diào)度
?
?
?
?
l? 某系統(tǒng)的進(jìn)程請求如右圖,畫出RR調(diào)度下的調(diào)度過程圖。并計(jì)算平均周轉(zhuǎn)時間。設(shè)時間片為2。
| 進(jìn)程名 | 開始時刻 | 執(zhí)行時間 |
| A | 0 | 3 |
| B | 2 | 3 |
| C | 3 | 4 |
| D | 4 | 7 |
?
?
?
?
?
?
?
?
?
l? 死鎖的相關(guān)概念與認(rèn)識
1.?? 四個必要條件
u 互斥條件:進(jìn)程對所分配到的資源進(jìn)行排他性使用
u 請求和保持條件:進(jìn)程已經(jīng)保持了至少一個資源,又提出新的資源請求,而新請求資源被其他進(jìn)程占有只能造成自身進(jìn)程阻塞,但對自己已獲得的其他資源保持不放,必然影響其他進(jìn)程。
u 不剝奪條件:進(jìn)程已獲得的資源未使用完之前不能被剝奪,只能在使用完時由自己釋放。
u 環(huán)路等待條件
?
2.?? 處理死鎖的各種方法
①?? 預(yù)防死鎖
v 設(shè)置限制條件,破壞四個必要條件的一個或幾個,預(yù)防發(fā)生死鎖。
v 較易實(shí)現(xiàn)。限制條件的嚴(yán)格也會導(dǎo)致系統(tǒng)資源利用率和系統(tǒng)吞吐量降低。
②?? 避免死鎖
v 不須事先限制,破壞四個必要條件,而是在資源的動態(tài)分配過程中,用某種方法去防止系統(tǒng)進(jìn)入不安全狀態(tài),從而避免發(fā)生死鎖。
v 這種事先加以較弱限制的方法,實(shí)現(xiàn)上有一定難度,但可獲較高的資源利用率及系統(tǒng)吞吐量,目前在較完善的系統(tǒng)中,常用此方法來避免發(fā)生死鎖。
③?? 檢測死鎖。
v 允許系統(tǒng)運(yùn)行過程中發(fā)生死鎖,但通過系統(tǒng)檢測機(jī)構(gòu)可及時的檢測出,能精確確定與死鎖有關(guān)的進(jìn)程和資源;然后采取適當(dāng)?shù)拇胧?/span>,從系統(tǒng)中將已發(fā)生的死鎖清除掉。
④?? 解除死鎖。
v 與死鎖檢測配套的一種措施。
v 常用的實(shí)施方法:撤銷或掛起一些進(jìn)程,以便回收一些資源并將他們分配給已阻塞進(jìn)程,使之轉(zhuǎn)為就緒以繼續(xù)運(yùn)行。
v? 死鎖的檢測與解除措施,有可能使系統(tǒng)獲得較好的資源利用率和吞吐量(死鎖幾率不一定很高),但在實(shí)現(xiàn)上難度也最大。
?
l? 避免死鎖的銀行家算法(相對預(yù)防死鎖,是一種軟限制。)
?
?
?
下面出現(xiàn)P1請求資源的操作,具體請求向量為Request1(1,0,2),利用銀行家算法進(jìn)行檢查該操作是否是安全可行的:
1)兩個基本判斷
??????????? Request1(1,0,2)<=Need1(1,2,2)
??????????? Request1(1,0,2)<=Available1(3,3,2)
2)先假設(shè)為P1分配資源,并修改Available,Allocation1和Need1向量。
?
?
?
向量Available
最大需求、已獲得的、還需要的
最大需求矩陣Max
已分配矩陣Allocation
還需求的矩陣Need
1.?? 安全狀態(tài)
2.?? 算法、計(jì)算
a)?? 系統(tǒng)中有m個進(jìn)程,出現(xiàn)死鎖時死鎖進(jìn)程的個數(shù)k:?? 2≤k≤m
b)?? 某類資源m個,n個進(jìn)程都需要此種資源a個,如何不死鎖:n*(a-1)+1≤m
?
l? 存儲器管理
l? 連續(xù)分配
1.?? 單一連續(xù)、固定分區(qū)
2.?? 動態(tài)分區(qū)分配
3.?? 可重定位動態(tài)分區(qū)(有緊湊功能)
l? 離散分配
1.?? 分頁,地址轉(zhuǎn)換過程,計(jì)算
?
內(nèi)存劃分成多個小單元,每個單元K大小,稱(物理)塊。作業(yè)也按K單位大小劃分成片,稱為頁面。
①??? ?物理劃分塊的大小 = 邏輯劃分的頁的大小
②???
內(nèi)存位數(shù)=頁面大小(位數(shù))+頁表項(xiàng)(塊號位數(shù))
大小:內(nèi)存=頁面大小x頁面?zhèn)€數(shù)
?
2.?? 分段
虛擬
概念:虛擬、局部性
先進(jìn)先出置換算法(FIFO)Belady現(xiàn)象(出現(xiàn)分配的頁面數(shù)增多,缺頁率反而提高的異常現(xiàn)象)的原因:FIFO算法的置換特征與進(jìn)程訪問內(nèi)存的動態(tài)特征矛盾,即被置換的頁面并不是進(jìn)程不會訪問的
1.?? 置換調(diào)度算法:最近最久未使用(LRU)置換算法, 最近未使用算法CLOCK:
2.?? 缺頁次數(shù)(掉入次數(shù))
u 缺頁率=缺頁次數(shù)/總的頁面數(shù)
l? 例
l? 分頁系統(tǒng),主存容量64K,頁面大小1K。
l? 一個4K大的作業(yè),0-3頁分別分配到物理塊2、4、6、7中。
1.?? 該作業(yè)的邏輯地址格式如何?
2.?? 十進(jìn)制的邏輯地址1023(B)轉(zhuǎn)換為物理地址
3.?? 畫出地址變換過程。
答:
即頁號與頁內(nèi)地址位數(shù)大小
該作業(yè)的4個頁面編號需要2位;每頁1K大小,即1K條指令編號需10位
?
l? 邏輯地址1023
1023/1K=0 余 1023
0頁對應(yīng)物理塊2,所以物理地址是
2 * 1K + 1023 = 2048+1023=3071
?
?
?
l? 例
l? 虛擬內(nèi)存管理中的LRU頁面置換算法
l? 設(shè)頁面走向如下,分配給該作業(yè)3個內(nèi)存塊,畫出置換過程圖,并計(jì)算缺頁率。
4? 5? 8? 1? 3? 4? 4? 6? 5? 1? 2? 7? 6? 1? 3
文件管理
l? 文件的結(jié)構(gòu)
l? 邏輯結(jié)構(gòu):
u 有結(jié)構(gòu)文件:順序,鏈接,索引
l? 物理結(jié)構(gòu): 已分配空間的記錄
u 連續(xù)、鏈接、索引、混合索引分配方式
l? FAT表計(jì)算,索引文件大小的計(jì)算,UNIX下的混合索引
l? 空閑空間管理
l? 表、盤區(qū)\盤塊鏈、成組鏈接、位示圖
l? 目錄、共享
l? 例:FAT與索引的計(jì)算
l? FAT表的計(jì)算
1.?? 物理空間容量/盤塊大小 = FAT表項(xiàng)個數(shù)
2.?? 個數(shù)決定位數(shù),決定每項(xiàng)大小
3.?? 個數(shù)*每項(xiàng)大小
l? 索引結(jié)點(diǎn)
1.?? 盤塊大小/盤塊號大小 = 可記錄的盤塊個數(shù)
2.?? 單索引下,一個索引結(jié)點(diǎn)能記錄N個盤塊,則文件最大長度為:N*盤塊大小
?
l? 例:混合索引分配方式的計(jì)算
l? FCB有13個地址項(xiàng),0-9為直接地址,10為一次間接地址,11為二次間接地址,12為三次間接地址。若盤塊大小為512B,盤塊號需3B記錄,每個盤塊最多存放170個盤塊地址。
l? 該文件系統(tǒng)文件最大允許多長?
u 10+170+170*170+170*170*170 = 4942080塊
u = 4942080*512B = 2471040 KB
l? 將文件字節(jié)偏移量15000轉(zhuǎn)換為物理塊號和塊內(nèi)偏移。
u 15000/512 = 29 余152。10=<29<=10+170.
u 所以文件使用的第29塊盤塊號,記錄在FCB中的10項(xiàng),即一次間接地址的索引盤塊中。從10項(xiàng)記錄的地址找到索引表,第19項(xiàng)即是要找的物理塊。
?
l? 若FCB已存在內(nèi)存,其他信息均在外存,訪問該文件某位置的內(nèi)容,最少/最多需要幾次訪問磁盤?
最少需訪問磁盤的情況是直接尋址,直接讀FCB中記錄的地址,訪問磁盤1次即可
最多需訪問磁盤的情況是三次間接尋址的過程,需讀三次間接索引塊中的內(nèi)容,然后讀它里面記錄的二次接索引塊中的內(nèi)容,再一次的,最后才能獲得文件信息的實(shí)際地址。姑,最多情況需4次訪問磁盤。
?
l? 外存空間的管理
空閑空間的三種分配方式:連續(xù)、鏈接、索引
空閑空間的管理
1.?? 空閑表/鏈、位示土圖、成組鏈接
2.?? 成組鏈接
?
?
l? 例:某系統(tǒng)采用成組鏈接法管理磁盤空閑空間,目前狀態(tài)如下圖,問:
l? 還有多少空閑盤塊?
l? 若從當(dāng)前狀態(tài)下,系統(tǒng)分配3個盤塊給某文件后,又刪除另一文件,回收了第700,711,703,788,701這5個盤塊。則磁盤空間的狀態(tài)圖中的鏈接情況又如何?
l? 空閑盤塊成組鏈接示意圖
?
?
l? 設(shè)備管理
l? I\0 系統(tǒng)的組成
CPU\通道\控制器\設(shè)備
l? 磁盤緩沖管理的作用、方式
l? 虛擬:spooling
l? I\O軟件層次
中斷處理程序\設(shè)備驅(qū)動程序\設(shè)備獨(dú)立性程序\用戶應(yīng)用程序
l? 磁盤調(diào)度
電梯調(diào)度算法等p233
?
轉(zhuǎn)載于:https://www.cnblogs.com/-dabai/p/10085468.html
總結(jié)
- 上一篇: vue脚手架中使用axios
- 下一篇: JAVA获取系统相关的信息