應用題 程序管理

2022-09-15 14:42:03 字數 4775 閱讀 1958

如下圖所示的工作模型中,有三個程序p0,p1,p2和三個緩衝區b0,b1,b2. 程序之間借助於相鄰緩衝區進行訊息傳遞:每個程序每次從緩衝區中取一條訊息,經加工處理後送入另乙個緩衝區中,三個緩衝區分別可存放3,2,2個訊息。

初始時,僅緩衝區0有乙個訊息。試用p、v操作寫出三個程序之間的同步及互斥流程。

答:這是乙個生產者/消費者問題,而且每個程序既是生產者,也是消費者。為此,應設定6個訊號量:

b0s1,b0s2,b1s1,b1s2,b2s1,b2s2,分別代表b0,b1,b2中是否有空緩衝和有資料。

b0s1,b0s2,b1s1,b1s2,b2s2:semaphore;

b0s1=2;b0s2=1;b1s1=2;b1s2=0;b2s1=2;b2s2=0;

cobegin

p0p1p2

beginbeginbegin

p(b0s2p(b1s2p(b2s2)

從b0取乙個資料從b1取乙個資料從b2取乙個資料

v(b0s2v(b1s1v(b2s1)

加工加工加工

p(b1s1p(b2s1p(b0s1)

將加工結果送b1將加工結果送b2將加工結果送b0

v(b1s2v(b2s2v(b0s2)

endendend

coend

這道題也可以增加互斥訊號量,以便p0與p1之間互斥使用b0緩衝區,p1與p2之間互斥使用b1緩衝區,p2與p0之間互斥使用b0緩衝區。這裡主要描述它們之間的同步關係。若考慮互斥共享緩衝區,請自己加上。

--設有乙個售票廳,可容納100人購票。如果廳內不足100人則允許進入,進入後購票,購票後退出。如果廳內已有100人,則在廳外等候。試問:

1) 購票者之間是同步還是互斥?

2) 用p、v操作表達購票者的工作過程。

解:1)購票者之間是互斥關係。

3) 乙個售票廳可容納100人購票,說明最多允許100個購票者共享售票廳;可引入乙個訊號量empty,其初值為100。由於購票者必須互斥地進行購票,故應再設乙個mutex,其初值為1。用p、v操作表達購票者的工作過程如下:

empty,mutex:semaphore;

empty:=100; mutex:=1;

begin

p(empty)

p(mutex)

進入廳內購票,購票後退出

v(empty)

v(mutex)

end--

某招待所有100個床位,住宿者入住要先登記(在登記表上填寫姓名和床位號).離去時要登出登記(在登記表上刪去姓名和床位號).請給出住宿登記及登出過程的演算法描述.

答:某招待所有100個床位,為了正確管理,引入乙個訊號量empty代表空床位數,初值為100;住宿者入住要先登記(在登記表上填寫姓名和床位號),顯然,登記表是乙個臨界資源,必須互斥訪問,引入乙個mutex,其初值為1。住宿登記及登出過程的演算法描述如下:

住宿登記:

begin

p(empty) //檢查有無床位

p(mutex) //申請登記

找出乙個空床位將名字登入表中

v(mutex)

end登出過程:

begin

p(mutex) //申請退房

找出自己的登記項,並刪除該項的登記

v(mutex)

v(empty)

end--有乙個閱覽室,共有100個座位。為了很好地利用它,讀者進入時必須先在登記表上進行登記。該表表目設有座位號和讀者姓名;離開時再將其登記項擦除。

試問:1)為描述讀者的動作,應編寫幾個程式,應設幾個程序?它們之間的關係是什麼?

2)試用p、v操作描述程序之間的同步演算法。

解:為了描述閱覽室,用乙個登記表來記錄其使用情況。表中共有100項。

每當有讀者進入閱覽室時,為了正確地登記,各讀者應互斥使用。為此設兩個訊號量:mutex為互斥訊號量,用來制約各讀者互斥地進行登記,其初值為1;empty為同步訊號量,用來制約各讀者能同時進入閱覽室的數量,其初值為100。

下面用兩個過程描述對**應執行的動作:

登記過程擦除過程:

beginbegin

p(emptyp(mutex)

p(mutex找到自己的登記項擦除

找到乙個登記項登記 v(mutex)

v(mutexv(empty)

endend

為了正確地描述讀者的動作,可以將讀者看成程序。若干讀者希望進入閱覽室時,呼叫登記過程,退出閱覽室時,呼叫擦除過程。可見乙個程式可對應多個讀者。

可設的程序數由讀者數決定,其動作如下:

begin

呼叫登記過程

進入閱覽室閱讀

準備退出

呼叫擦除過程

end--一條河上架設了由若干個橋墩組成的一座橋。若乙個橋墩只能站乙個人,過河的人只能沿著橋向前走而不能向後退。過河時,只要對岸無人過,就可以過;但不允許河對岸的兩個人同時過,以防止出現死鎖。

請給出兩個方向的人順利過河的同步演算法。

解:假設一座橋由n個橋墩,也即最多允許有n個人同向過河,用乙個計數器r記錄同時過河的人數。用s1訊號量保護計數器,其初值為1,r的初值為0;互斥使用橋的訊號量用s表示,其初值為1。

同步演算法描述如下:

procedure goriver()

begin

l:p(s1為同時過河,申請對計數器計數

if r>n begin v(s1); goto l; end //同方向過河的人站滿橋墩時,重新申請計數

r=r+1

if r==1 p(s申請過河

v(s1釋放計數器的使用權

占有乙個橋墩,並順序過河到對岸;

p(s1);

r=r-1;

if r==0 v(s如果已經無同向的人過河,釋放占用權

v(s1);

end--在銀行家演算法中,系統有5個程序和3個資源。若出現以下資源分配情況:

程序資源最大請求已分配資源

p0 7, 5, 30, 1, 0

p1 3, 2, 22, 1, 0

p2 9, 0, 23, 0, 2

p3 2, 2, 22, 1, 1

p4 4, 3, 30, 0, 2

系統剩餘資源數量為(3,2,2)。

1) 該狀態是否安全(給出詳細的檢查過程)?

2) 如果程序依次有如下資源請求

p1:資源請求request(1,0,2)?

p4:資源請求request(3,3,0)?

p0:資源請求request(0,1,0)?

則系統如何進行資源分配,才能避免死鎖?

解:1)該系統狀態是否安全,主要看能否找到乙個程序完成序列.若能找到,系統只要按照這個序列為程序分配資源,所有程序就都可順利完成;若找不到,系統狀態就是不安全的.

為此,可先求出程序的剩餘請求矩陣.

程序資源最大需求已分配資源剩餘資源請求

p0 7, 5, 30, 1, 07, 4, 3

p1 3, 2, 22, 1, 01, 1, 2

p2 9, 0, 23, 0, 26, 0, 0

p3 2, 2, 22, 1, 10, 1, 1

p4 4, 3, 30, 0, 24, 3, 1

系統剩餘資源向量a=(3,2,2),在程序剩餘資源請求矩陣中找,是否有一行,其值都小於或等於a.若有,選程序p1,滿足它的全部資源請求,它在有限時間內能釋放全部資源,並標記它為完成使系統剩餘資源向量a=(5,3,2).之後再重複上述過程,從而找到了乙個進城完成序列為:

p1,p3,p4,p2,p0。由此可見,系統狀態是安全的。

2)p1:資源請求request(1,0,2)時,由1)可知,可以立即滿足它,使得a=(2,2,0),p1的分配向量為(3,1,2),其剩餘向量變為(0,1,0).

p4:資源請求request(3,3,0)時,由於系統剩餘資源向量a=(2,2,0),顯然不能滿足它的請求,因為系統剩餘資源向量a小於p4的請求

p0:資源請求request(0,1,0)時,由於系統剩餘資源向量a=(2,2,0),若滿足它的請求,使得系統剩餘資源向量a=(2,1,0)。之後,系統仍可以找到乙個程序完成序列p1,p4,p0,p4,p2。

故可以滿足它的請求。

--系統有同類資源10個,程序p1、p2和p3需要該類資源的最大數量分別為8,6,7。它們使用資源的次序和數量如下圖所示。

1) 試給出採用銀行家演算法分配資源時,進行第5次分配後各程序的狀態及各程序占用資源情況。

2) 在以後的申請中,那次的申請可以得到最先滿足?給出乙個程序完成序列。

解:1)計算第5次分配後程序的狀態和占用資源情況:

① p1申請3個,滿足,系統還剩7個

②p2申請2個,滿足(因為系統的7個可以使p2執行完),系統還剩5個

③p3申請4個,因為若滿足它的請求,可能使以後的任何程序都不能執行完,故p3等待

④p1申請2個,滿足(系統還剩5個可以滿足p1的最大請求),系統還剩3個

⑤ p2申請2個,不能滿足,等待。此時系統的分配情況如下:

p1分配5個後正在執行,p2分配2個後等待分配2個,p3等待分配4個,系統還剩3個。

2)p1接著執行,p1申請3個可滿足。p1執行完成後,釋放資源,使系統的資源數量變為8個。首先將p3喚醒,滿足它的4個資源,系統還剩4個,可以喚醒p2,滿足它的2個請求。

系統還剩2個。

p3申請3個,不能滿足,等待。

p2申請2個,系統滿足它,p2接著執行;p2完成,釋放資源,使系統資源變為6個。系統喚醒p3,滿足它的資源請求,最終p3完成,釋放資源,使資源數量恢復為10個。

找到的程序完成序列為p1,p2,p3。

分數應用題

知識點一 已知乙個數,求比這個數多 少 幾分之幾的數是多少 這類應用題的解題方法。1 火車速度為200km h,汽車速度比火車速度慢,把 看做單位 11 2 松樹棵樹為27棵,楊樹棵樹比松樹多 把 看作單位 1 1 3 六一班男生人數比女生多,女生有30人,女生有多少人?知識點二 已知比乙個數多 少...

分數應用題

姓名 一 複習 簡便計算 1 44752 2013 2013 3 14 2 分數應用題。1 有一批貨物,第一天運了這批貨物的,第二天運了第一天的,還剩90噸沒運。這批貨物有多少噸?2 修路隊在一條公路上施工,第一天修了這條路的,第二天修了餘下的,已知這兩天共修了1200公尺。這條公路全長多少公尺?3...

分數應用題

9 一本童話書共480頁,第一天看了全書的1 8,第二天看的全書的4 5。還剩多少頁沒看?10 一本童話書共480頁,第一天看了全書的1 8,第二天看的頁數相當於第一天的4 5。第二天看了多少頁?11 果園裡有75棵蘋果樹,梨樹棵數比蘋果樹的2 3多15棵,梨樹有多少棵?杏樹棵數比梨樹的3 5少17...