汤小丹计算机操作系统慕课版课后题答案第四章:进程同步
生活随笔
收集整理的這篇文章主要介紹了
汤小丹计算机操作系统慕课版课后题答案第四章:进程同步
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
一.簡(jiǎn)答題
以互斥形式訪問的資源稱為臨界資源,訪問臨界資源的代碼稱為臨界區(qū)。
空閑讓進(jìn),忙則等待,有限等待,讓權(quán)等待
臨界資源指的是每次只允許一個(gè)進(jìn)程進(jìn)行訪問的軟硬件資源,故必須互斥訪問。
軟件算法,信號(hào),信號(hào)量,TS,中斷,swap指令,管程等。
忙等指的是進(jìn)程要訪問的臨界資源被其他進(jìn)程占用,此進(jìn)程沒有自旋鎖便處于自旋狀態(tài)即忙等狀態(tài)。
占用CPU資源,降低CPU效率。
皮特森算法是雙標(biāo)志加一把鎖
首先說自已要(flagi = true),但是先謙讓把鑰匙給別人(key = j),若是別人也想要(flagj = true),別人也謙讓key = i,自己便可以訪問臨界資源
ps:while()中檢查的是若是別人想上,并且鑰匙是別人的,自己便會(huì)阻塞,否則自己會(huì)訪問臨界資源。
關(guān)中斷:訪問臨界區(qū)時(shí)關(guān)閉中斷。
TS:TS指令為每個(gè)臨界區(qū)加一個(gè)布爾變量,每次進(jìn)入臨界區(qū)都必須使用TS指令測(cè)試變量。
swap指令:使用swap指令為每個(gè)進(jìn)程設(shè)置一個(gè)局部變量key,使用swap指令交換key的值與臨界資源鎖的值,今兒判斷是否有進(jìn)程正在訪問。
ps:硬件實(shí)現(xiàn)互斥都是使用鎖實(shí)現(xiàn)的,進(jìn)程必須不斷測(cè)試鎖的值,不滿足讓權(quán)等待原則。
會(huì)導(dǎo)致信號(hào)量混亂,或者陷入死鎖,比如使用記錄型信號(hào)量進(jìn)行p操作被中斷,s-value已經(jīng)小于零,但是沒有阻塞隊(duì)列。
在PV操作時(shí),把所有進(jìn)程請(qǐng)求的資源都分配給進(jìn)程,要么分配夠,要么一個(gè)也不分配。
解決了一個(gè)進(jìn)程需要多個(gè)互斥資源才能執(zhí)行的問題。
若只有P,沒有V就會(huì)造z成進(jìn)程死鎖,
若只有V,沒有P會(huì)造成信號(hào)量失效。
管程是代表共享數(shù)據(jù)結(jié)構(gòu),以及由對(duì)該共享數(shù)據(jù)結(jié)構(gòu)實(shí)施操作的過程組成的資源管理程序,是操作系統(tǒng)的一個(gè)資源管理模塊。
特癥:
(1)抽象了臨界資源。
(2)對(duì)臨界資源的訪問只能調(diào)用管程進(jìn)行。
(3)只允許一個(gè)進(jìn)程進(jìn)入管程。
作用:為了解決管程中的進(jìn)程不能被阻塞,而其他進(jìn)程不能訪問管程的問題。
含義:管程為何種阻塞的原因都設(shè)置了條件變量,進(jìn)程若因此原因而阻塞,會(huì)把這個(gè)進(jìn)程掛在此條件變量的隊(duì)列上,若是阻塞條件發(fā)生變換,則啟動(dòng)一個(gè)進(jìn)程。
二 .計(jì)算題
三.綜合應(yīng)用題
本題精髓是使用兩個(gè)記錄型信號(hào)量在P1進(jìn)程中記錄奇偶數(shù)個(gè)數(shù)。
本題王道書給的答案過于復(fù)雜,可以參考第7題給出更簡(jiǎn)單的解
int i,j = 0 //i表是當(dāng)前取號(hào)號(hào)碼,j表示叫號(hào)號(hào)碼
n = 10 //空位數(shù)
mutex_i ,mutex_j = 1 //互斥信號(hào)量
顧客
{
p(mutex_i)
p(n)
i++
//取號(hào),待叫號(hào),待獲得服務(wù)
v(mutex_i)
}
營(yíng)業(yè)員{
if(j<I)
{
p(mutex_j)
v(n)
// 叫號(hào),為j號(hào)服務(wù)
j++
v(mutex_j)
}
}
semaphore
ok_3= 1
mutex_1 = 1
mutex_2= 1
ok_1= 0
ok_2=0
p1
{
p(ok_3)
p(mutex_1)
…
v(mutex_1)
v(ok_1)
}
p2
{
p(ok_1)
p(mutex_1)
p(mutex_2)
…
v(mutex_1)
v(mutex_2)
v(ok_2)
}
p3
{
P(ok_2)
p(mutex_2)
…
v(mutex_2)
v(ok_3)
}
semaphore n = 4
semaphore choptick[5] = {1,1,1,1,1}
while(1)
{
p(n)
p(choptick[i])
p(choptick[i+1]%5)
eat…
v(n)
v(choptick[i])
v(choptick[i+1]%5)
}
總結(jié)
以上是生活随笔為你收集整理的汤小丹计算机操作系统慕课版课后题答案第四章:进程同步的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java面试题1 牛客:A派生出子类B,
- 下一篇: 域名卡密自助授权系统