目錄
網(wǎng)站設(shè)計(jì)制作過程拒絕使用模板建站;使用PHP+MYSQL原生開發(fā)可交付網(wǎng)站源代碼;符合網(wǎng)站優(yōu)化排名的后臺(tái)管理系統(tǒng);成都網(wǎng)站設(shè)計(jì)、成都網(wǎng)站建設(shè)、外貿(mào)網(wǎng)站建設(shè)收費(fèi)合理;免費(fèi)進(jìn)行網(wǎng)站備案等企業(yè)網(wǎng)站建設(shè)一條龍服務(wù).我們是一家持續(xù)穩(wěn)定運(yùn)營了10年的創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司。課時(shí)五 死鎖(一)
1.死鎖的概念
2.死鎖的預(yù)防
課時(shí)六 死鎖(二)
1.死鎖的避免
2.死鎖的檢測與解除?
課時(shí)七 進(jìn)程同步(一)
1.同步與互斥的基本概念
2.進(jìn)程同步機(jī)制
課時(shí)八 進(jìn)程同步(二)
2.信號(hào)量的基本應(yīng)用
3.管程
課時(shí)九 進(jìn)程同步(三)
1.生產(chǎn)者消費(fèi)者問題
2.讀者寫者問題
3.哲學(xué)家進(jìn)餐問題
銀行家算法
2.死鎖的檢測與解除? 題 1.死鎖的避免是根據(jù)( )采取措施實(shí)現(xiàn)的。 A.配置足夠的系統(tǒng)資源 B.使進(jìn)程的推進(jìn)順序合理 C.破壞死鎖的四個(gè)必要條件之一 D. 防止系統(tǒng)進(jìn)入不安全狀態(tài) 答案:D 解析:死鎖避免是指在資源動(dòng)態(tài)分配過程中用某些算法加以限制,防止系統(tǒng)進(jìn)入 不安全狀態(tài)從而避免死鎖的發(fā)生。選項(xiàng) B是避免死鎖后的結(jié)果,而不是措施的原理。 題 2.某系統(tǒng)中有三個(gè)并發(fā)進(jìn)程都需要四個(gè)同類資源,則該系統(tǒng)必然不會(huì)發(fā)生死鎖的最少資源是( ) A.9? ? ? ? ?B. 10 ? ? ? ? ?C.11? ? ? ? ?D.12 答案:B 解析:資源數(shù)為 9時(shí),存在三個(gè)進(jìn)程都占有三個(gè)資源,為死鎖;資源數(shù)為10時(shí),必然存在一個(gè)進(jìn)程能拿到 個(gè)資源,然后可以順利執(zhí)行完其他進(jìn)程。 題 3.某系統(tǒng)中共有11臺(tái)磁帶機(jī),X個(gè)進(jìn)程共享此磁帶機(jī)設(shè)備,每個(gè)進(jìn)程最多請(qǐng)求使用 3臺(tái),則系統(tǒng)必然不會(huì)死鎖的大X值是( ) A.4? ? ? ? ?B. 5 ? ? ? ? ?C.6? ? ? ? ?D.7 答案:B 解析:考慮一下極端情況:每個(gè)進(jìn)程已經(jīng)分配了兩臺(tái)磁帶機(jī),那么其中任何一個(gè)進(jìn)程只要再分配一臺(tái)磁帶機(jī)即可滿足它的大需求,該進(jìn)程總能運(yùn)行下去直到結(jié)束,然后將磁帶機(jī)歸還給系統(tǒng)再次分配給其他進(jìn)程使用。因此,系統(tǒng)中只要滿足 2X+1=11?這個(gè)條件即可認(rèn)為系統(tǒng)不會(huì)死鎖,解得X=5 ,也就是說,系統(tǒng)中最多可以并發(fā) 5個(gè)這樣的進(jìn)程是不會(huì)死鎖的。 課時(shí)七 進(jìn)程同步(一) 1.同步與互斥的基本概念 題 1.下列對(duì)臨界區(qū)的論述中,正確的是( ) A.臨界區(qū)是指進(jìn)程中用于實(shí)現(xiàn)進(jìn)程互斥的那段代碼 B.臨界區(qū)是指進(jìn)程中用于實(shí)現(xiàn)進(jìn)程同步的那段代碼 C.臨界區(qū)是指進(jìn)程中用于實(shí)現(xiàn)進(jìn)程通信的那段代碼 D. 臨界區(qū)是指進(jìn)程中用于訪問臨界資源的那段代碼 答案:D 題 2.進(jìn)程之間存在著哪幾種制約關(guān)系?它們各由什么原因引起?下列活動(dòng)分別 屬于哪種制約關(guān)系? 1)若干位同學(xué)去圖書館借書; 2)兩隊(duì)舉行籃球比賽; 3)流水線生產(chǎn)的各道工序; 4)商品生產(chǎn)和社會(huì)消費(fèi)。 解析:進(jìn)程之間存在著直接相互制約和間接相互制約這兩種制約關(guān)系,其中直接相互制約(同步)是由進(jìn)程間的相互合作弓起的;而間接相互制約(互斥)則是由進(jìn)程間共享臨界資源引起的。 1)若干位同學(xué)去圖書館借書是 間接相互制約 ,其中 書是臨界資源 。 2)兩隊(duì)舉行籃球比賽是 間接相互制約 其中 籃球是臨界資源 3)流水線生產(chǎn)的各道工序是 直接相互制約 ,各道工序間須相互合作,每道工序 的開始都依賴于前一道工序的完成。 4)商品生產(chǎn)和社會(huì)消費(fèi)是 直接相互制約 的,兩者須相互合作。商品生產(chǎn)出來后 才可以被消費(fèi),商品被消費(fèi)后才須再生產(chǎn)。 2.進(jìn)程同步機(jī)制 題 2.進(jìn)程P0和P1的共享變量定義及其初值為:boolean flag[2];int turn=0; flag[0]=FALSE; flag[1]=FALSE; 若進(jìn)程P0和P1訪問臨界資源的類C代碼實(shí)現(xiàn) 如下:void P0()
{
while(TRUE){
flag[0]= TRUE;
turn=1;
while(flag[1]&&(turn==1));
臨界區(qū);
flag[0]= FALSE;
}
}
void P1()
{
while(TRUE){
flag[1]= TRUE;
turn=0;
while(flag[0]&&(turn==0));
臨界區(qū);
flag[1]= FALSE;
}
}
則并發(fā)執(zhí)行進(jìn)程P0和P1時(shí)發(fā)生的情況是( )
A.不能保證進(jìn)程互斥地進(jìn)入臨界區(qū),會(huì)出現(xiàn)“饑餓”現(xiàn)象
B.不能保證進(jìn)程互斥地進(jìn)入臨界區(qū),不會(huì)出現(xiàn)“饑餓”現(xiàn)象
C.能保證進(jìn)程互斥地進(jìn)入臨界區(qū),會(huì)出現(xiàn)“饑餓”現(xiàn)象
D.
能保證進(jìn)程互斥地進(jìn)入臨界區(qū),不會(huì)出現(xiàn)“饑餓”現(xiàn)象
答案:D
解析:算法實(shí)現(xiàn)互斥的主要思想在于設(shè)置一個(gè)turn變量,用于進(jìn)程間的互相謙讓。如果進(jìn)程P0試圖訪問臨界資源,flag[0]= TRUE,則表示希望訪問。此時(shí)如果進(jìn)程P1還未試圖訪問臨界資源,則 flag[1]在進(jìn)程上一次訪問完臨界資源并退出臨界區(qū)后已設(shè)置為 FALSE。因此進(jìn)程P0在執(zhí)行循環(huán)判斷條件時(shí),第一個(gè)條件不滿足,進(jìn)程P0可以正常進(jìn)入臨界區(qū),且滿足互斥條件。請(qǐng)注意兩個(gè)進(jìn)程同時(shí)試圖 訪問臨界資源的情況。
turn變量的含義:進(jìn)程在試圖訪問臨界資源時(shí),首先設(shè)置turn自己的 flag 變量為 TRUE,表示希望訪問;但又會(huì)設(shè)置turn變量為對(duì)方的進(jìn)程編號(hào),表示謙讓,若在turn變量不是進(jìn)程編號(hào)時(shí)就循環(huán)等待,則兩個(gè)進(jìn)程就會(huì)互相謙讓,由于turn變量會(huì)有一個(gè)最終值,因此先做出謙讓的進(jìn)程先進(jìn)入臨界區(qū),后做出謙讓的進(jìn)程則需要循環(huán)等待,不會(huì)造成“饑餓”現(xiàn)象。
課時(shí)八 進(jìn)程同步(二)
2.信號(hào)量的基本應(yīng)用
題 1.設(shè)與某資源關(guān)聯(lián)的信號(hào)量初值為 3,當(dāng)前值為 1。若M表示該資源的可用個(gè)數(shù),N示等待該資源的進(jìn)程數(shù),則M,N分別是( )
A.0,1? ? ? ? B.
1,0?
? ? ? C.1,2? ? ? ? D.2,0
答案:B
解析:信號(hào)量表示相關(guān)資源的當(dāng)前可用數(shù)量。當(dāng)信號(hào)量K>0時(shí),表示還有K個(gè) 相關(guān)資源可用,所以該資源的可用個(gè)數(shù)是 1。而當(dāng)信號(hào)量K<0時(shí),表示有 |K| 個(gè)進(jìn)程在等待該資源。由于資源有剩余,可見沒有其他進(jìn)程等待使用該資源,因此進(jìn)程數(shù)為 0。
題 2.對(duì)于兩個(gè)并發(fā)進(jìn)程,設(shè)互斥信號(hào)量為mutex(初值為 1),若mutex = -1,則 ( )
A.表示沒有進(jìn)程進(jìn)入臨界區(qū)
B.表示有一個(gè)進(jìn)程進(jìn)入臨界區(qū)
C.
表示有一個(gè)進(jìn)程進(jìn)入臨界區(qū),另一個(gè)進(jìn)程等待進(jìn)入
D.表示有兩個(gè)進(jìn)程進(jìn)入臨界區(qū)
答案:C
解析:當(dāng)有一個(gè)進(jìn)程進(jìn)入臨界區(qū)且有另一個(gè)進(jìn)程等待進(jìn)入臨界區(qū)時(shí),mutex = -1。?mutex小于0 時(shí),其絕對(duì)值等于等待進(jìn)入臨界區(qū)的進(jìn)程數(shù)。
題 3.下面是兩個(gè)并發(fā)執(zhí)行的進(jìn)程,它們能正確運(yùn)行嗎?若不能請(qǐng)舉例說明并改正。
int x;
process P1{
int y,z;
x=1;
y=0;
if(x>=1)
y=y+1;
z=y;
}
process P2{
int t,u;
x=0;
t=0;
if(x<=1)
t=t+2;
u=t;
}
解析:P1和P2兩個(gè)并發(fā)進(jìn)程的執(zhí)行結(jié)果是不確定的,它們都是對(duì)同一變量x 進(jìn)程操作,x?是一個(gè)臨界資源,而沒有進(jìn)行保護(hù)。例如:顯然,兩次執(zhí)行結(jié)果不同,所以這兩個(gè)并發(fā)進(jìn)程不能正確運(yùn)行。可將這個(gè)程序改為:
int x;
semaphore S=1;
process P1{
int y,z;
P(S);
x=1;
y=0;
if(x>=1)
y=y+1;
V(S);
z=y;
}
process P2{
int t,u;
P(S);
x=0;
t=0;
if(x<=1)
t=t+2;
V(S);
u=t;
}
3.管程
題 1.下述( )選項(xiàng)不是管程的組成部分。
A.局限于管程的共享數(shù)據(jù)結(jié)構(gòu)
B.對(duì)管程內(nèi)數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的一組過程
C.
管程外過程調(diào)用管程內(nèi)數(shù)據(jù)結(jié)構(gòu)的說明
D.對(duì)局限于管程的數(shù)據(jù)結(jié)構(gòu)設(shè)置初始值的語句
答案:C
解析:管程由局限于管程的共享變量說明、對(duì)管程內(nèi)的數(shù)據(jù)結(jié)構(gòu)進(jìn)行操作的一組過程及對(duì)局限于管程的數(shù)據(jù)設(shè)置初始值的語句組成。
課時(shí)九 進(jìn)程同步(三)
1.生產(chǎn)者消費(fèi)者問題
題 1.某工廠有兩個(gè)生產(chǎn)車間和一個(gè)裝配車間,兩個(gè)生產(chǎn)車間分別生產(chǎn)A,B兩種零件,裝配車間任務(wù)是把A,B兩種零件組裝成產(chǎn)品,兩個(gè)生產(chǎn)車間每生產(chǎn)一個(gè)零件后,都要分別把它們送到專配車間的貨架F1,F2上。F1 存放零件 A,F(xiàn)2存放零件 B,F(xiàn)1和F2的容量均可存放 10個(gè)零件。裝配工人每次從貨架上取一個(gè)零件 A和一個(gè)零件 B后組裝成產(chǎn)品。請(qǐng)用P,V操作進(jìn)行正確管理。
解析:本題是生產(chǎn)者-消費(fèi)者問題的變體,生產(chǎn)者“車間 A”和消費(fèi)者“裝配車間”共享緩沖區(qū)“貨架F1”;生產(chǎn)者“車間 B”和消費(fèi)者“裝配車間”共享緩沖區(qū)“貨架F2”。因此,可為它們?cè)O(shè)置 6個(gè)信號(hào)量:empty1 對(duì)應(yīng)貨架F1上的空閑空間,初值為10;full1? 對(duì)應(yīng)貨架F1上面的 A產(chǎn)品,初值為 0;empty2 對(duì)應(yīng)貨架F2上的空閑空間,初值為10;full2?對(duì)應(yīng)貨架F2上面的 B產(chǎn)品,初值為 0;mutex1 用于互斥地訪問貨架F1,初值為 1;mutex2 用于互斥地訪問貨架F2,初值為 1。
A 車間的工作過程可描述為:
while(1){
生產(chǎn)一個(gè)產(chǎn)品 A;
P(empty1); //判斷貨架 F1 是否有空
P(mutex1); //互斥訪問貨架 F1
將產(chǎn)品 A 存放到貨架 F1 上;
V(mutex1); //釋放貨架
F1 V(full1); //貨架 F1 上的零件 A 的個(gè)數(shù)加 1
}
B車間的工作過程可描述為:
while(1){
生產(chǎn)一個(gè)產(chǎn)品 B;
P(empty2); //判斷貨架 F2 是否有空
P(mutex2); //互斥訪問貨架 F2
將產(chǎn)品 B 存放到貨架 F2 上;
V(mutex2); //釋放貨架 F2
V(full2); //貨架 F2 上的零件 B 的個(gè)數(shù)加 1
}
裝配車間的工作過程可描述為:
while(1){
P(full1); //判斷貨架 F1 是否有產(chǎn)品 A
P(mutex1); //互斥訪問貨架 F1
從貨架 F1 上取一個(gè) A 產(chǎn)品;
V(mutex1); //釋放貨架 F1 V(empty1); //貨架 F1 上的空閑空間數(shù)加 1
P(full2); //判斷貨架 F2 是否有產(chǎn)品 B
P(mutex2); //互斥訪問貨架 F2
從貨架 F2 上取一個(gè) B 產(chǎn)品;
V(mutex2); //釋放貨架 F2
V(empty2); //貨架 F2 上的空閑空間數(shù)加 1
將取得的 A 產(chǎn)品和 B 產(chǎn)品組裝成成品;
}
2.讀者寫者問題
題 2.有橋如下圖所示,車流如箭頭所示,橋上不允許兩車交匯,但允許同方向多輛車依次通過(即橋上可以有多個(gè)同方向的車)。用P、V操作實(shí)現(xiàn)交通管理以防止橋上堵塞。
解析:這個(gè)題目要解決:南、北互斥(橋上不允許兩車交匯,相當(dāng)于“讀、寫互斥”),需要設(shè)置一個(gè)互斥信號(hào)量mutex,初值為 1;南、南共享(相當(dāng)于“讀、讀共享”),套用實(shí)現(xiàn)“讀、讀共享”的模式,需要設(shè)置一個(gè)共享變量southcount,用于記錄當(dāng)前橋上向南行駛過橋的車輛數(shù)目,初值為 0,再設(shè)置一個(gè)互斥信號(hào)量smutex,實(shí)現(xiàn)對(duì)southcount的互斥訪問;北、北共享(也相當(dāng)于“讀、讀共享”),套用實(shí)現(xiàn)“讀、讀共享”的模式,同理可得。
semaphore mutex = 1;// 作為橋的互斥訪問信號(hào)量
semaphore smutex = 1;// 作為 southcount 的互斥訪問信號(hào)量
semaphore nmutex = 1;// 作為 northcount 的互斥訪問信號(hào)量
int southcount = 0;// 記錄南方向的車輛的數(shù)量
int northcount = 0;// 記錄北方向的車輛的數(shù)量
void south(){
while(true){
wait(smutex);
if(southcount == 0)
wait(mutex);
southcount++;
signal(smutex);
// 南方車輛通過
wait(smutex);
southcount--;
if(southcount == 0)
signal(mutex);
signal(smutex);
}
}
void north()
{
while(true){
wait(nmutex);
if(northcount == 0)
wait(mutex);
northcount++;
signal(nmutex);
// 北方車輛通過
wait(nmutex);
northcount--;
if(northcount == 0)
signal(mutex);
signal(nmutex);
}
}
3.哲學(xué)家進(jìn)餐問題
題 1.有n(n>=3)名哲學(xué)家圍坐在一張圓桌邊,每名哲學(xué)家交替地就餐和思考。在圓桌中心有m(m>=1)個(gè)碗,每兩名哲學(xué)家之間有一根筷子。每名哲學(xué)家必須取到一個(gè)碗和兩側(cè)地筷子后,才能就餐,進(jìn)餐完畢,將碗和筷子放回原位,并繼續(xù)思考。為使盡可能多的哲學(xué)家同時(shí)就餐,且防止出現(xiàn)死鎖現(xiàn)象,請(qǐng)使用信號(hào)量的P,V操作[wait(),signal() 操作]描述上述過程中的互斥與同步,并說明所用信號(hào)量及初值的含義。
解析:回顧傳統(tǒng)的哲學(xué)家問題,假設(shè)餐桌上有 名哲學(xué)家、 根筷子,那么可以用這種方法避免死鎖:限制至多允許 n-1 名哲學(xué)家同時(shí)“搶”筷子,那么至少會(huì)有 1 名哲學(xué)家可以獲得兩根筷子并順利進(jìn)餐,于是不可能發(fā)生死鎖情況。
本題可以用碗這個(gè)限制資源來避免死鎖;當(dāng)
碗的數(shù)量 m小于哲學(xué)家的數(shù)量 n
時(shí),可以直接讓碗的資源量等于
m
,確保不會(huì)出現(xiàn)所有哲學(xué)家都拿一側(cè)筷子而無限等待另一側(cè)筷子進(jìn)而造成死鎖的情況;當(dāng)
碗的數(shù)量 m大于等于哲學(xué)家的數(shù)量 n
時(shí),為了讓碗起到同樣的限制效果,我們讓碗的資源量等于
n-1
,這樣就能保證最多只有 n-1 名哲學(xué)家同時(shí)進(jìn)餐,所以得到
碗的資源量為min{n-1,m}
。在進(jìn)行PV操作時(shí),碗的資源量起限制哲學(xué)家取筷子的作用,所以需要先對(duì)碗的資源量進(jìn)行 P操作。具體過程如下:
semaphore bow1;
semaphore chopstick[n];
for(int i=0;i
注:文章僅用于個(gè)人期末復(fù)習(xí),資料來源蜂考,侵刪。
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級(jí)流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級(jí)服務(wù)器適合批量采購,新人活動(dòng)首月15元起,快前往官網(wǎng)查看詳情吧