本篇文章給大家談?wù)劜僮飨到y(tǒng) 生產(chǎn)者 消費者,以及操作系統(tǒng)生產(chǎn)者消費者問題例題對應(yīng)的知識點,希望對各位有所幫助,不要忘了收藏本站喔。
今天給各位分享操作系統(tǒng) 生產(chǎn)者 消費者的知識,其中也會對操作系統(tǒng)生產(chǎn)者消費者問題例題進行解釋,如果能碰巧解決你現(xiàn)在面臨的問題,別忘了關(guān)注本站,現(xiàn)在開始吧!
本文目錄一覽:
計算機操作系統(tǒng)生產(chǎn)者消費者
生產(chǎn)者-消費者是一種設(shè)計模式。生產(chǎn)者往緩沖區(qū)寫入
數(shù)據(jù),消費者從緩沖區(qū)拿取
數(shù)據(jù),兩者通過緩沖區(qū)來進行通信。這樣的話生產(chǎn)者不必?fù)?dān)心要等待消費者
使用完數(shù)據(jù),消費者也不用擔(dān)心不夠時間處理完所有數(shù)據(jù)。

操作系統(tǒng) 關(guān)于生產(chǎn)者消費者的問題
empty是資源信號量,意思生產(chǎn)者、消費者都靠這個信號量來進行生產(chǎn)、消費。
為什么“生產(chǎn)者進程向n個緩沖區(qū)投滿產(chǎn)品后消費者進程才開始從中取產(chǎn)品”?
其實可以轉(zhuǎn)為問進程間為什么需要同步、互斥?您對這問題的研究不夠請再看書。
這里我和您舉個例子。
信號量的目的是
管理生產(chǎn)者、消費者對公共資源(緩沖區(qū))的訪問
p原語對資源進行占有,V原語對資源進行釋放
缺少empty資源信號量,那么只有互斥信號量。
但是empty和FUll需要成對出現(xiàn),就算缺少signal(empty),那么消費者沒對empty信號進行釋放,產(chǎn)生的結(jié)果只會是下次生產(chǎn)者想進去生產(chǎn)東西但因為信號量缺失,進不去。
我也很想知道為什么“生產(chǎn)者進程向n個緩沖區(qū)投滿產(chǎn)品后消費者進程才開始從中取產(chǎn)品”?
操作系統(tǒng) 判斷題 生產(chǎn)者消費者問題
一、明確定義
要理解生產(chǎn)消費者問題,首先應(yīng)弄清PV操作
操作系統(tǒng) 生產(chǎn)者 消費者的含義:PV操作是由P操作原語和V操作原語組成(原語是不可中斷的過程),對信號量進行操作,具體定義如下:
P(S):①將信號量S的值減1,即S=S-1;
②如果S30,則該進程繼續(xù)執(zhí)行;否則該進程置為等待狀態(tài),排入等待隊列。
V(S):①將信號量S的值加1,即S=S+1;
②如果S0,則該進程繼續(xù)執(zhí)行;否則釋放隊列中第一個等待信號量的進程。
這只是書本的定義,對于這部分內(nèi)容,老師先不要急于解釋上面的程序流程,而是應(yīng)該讓學(xué)生首先知道P操作與V操作到底有什么作用。
P操作相當(dāng)于申請資源,而V操作相當(dāng)于釋放資源。所以要學(xué)生記住以下幾個關(guān)鍵字:
P操作-----à申請資源
V操作----à釋放資源
二、形象啟發(fā)
為此舉兩個生活中的例子:
例一:在公共電話廳打電話
公共電話廳里有多個電話,如某人要打電話,首先要進行申請,看是否有電話空閑,若有,則可以
使用電話,如果電話亭里所有電話都有人正在使用,那后來的人只有排隊等候。當(dāng)某人用完電話后,則有空電話騰出,正在排隊的第一個人就可以使用電話。這就相當(dāng)于PV操作:
某人要打電話,首先要進行申請,相當(dāng)于執(zhí)行一次P操作,申請一個可用資源(電話);
某人用完電話,則有空電話騰出,相當(dāng)于執(zhí)行一次V操作,釋放一個可用資源(電話)。
在多媒體課件中,這部分內(nèi)容充分通過動畫效果,演示整個申請電話資源(P操作)與釋放電話資源(V操作)的過程,同時顯示當(dāng)前可用的資源個數(shù)(電話個數(shù))。課件直觀生動,一目
操作系統(tǒng) 生產(chǎn)者 消費者了然,學(xué)生非常容易接受,并且理解深刻。
三、分層解剖
在理解了PV操作的的含義后,就必須講解利用PV操作可以實現(xiàn)進程的兩種情況:互斥和同步。根據(jù)互斥和同步不同的特點,就有利用PV操作實現(xiàn)互斥與同步相對固定的結(jié)構(gòu)模式。這里就不詳細(xì)講解了。但生產(chǎn)者-消費者問題是一個有代表性的進程同步問題,要學(xué)生透徹理解并不容易。但是如果
操作系統(tǒng) 生產(chǎn)者 消費者我們將問題細(xì)分成三種情況進行講解,理解難度將大大降低。
1)一個生產(chǎn)者,一個消費者,公用一個緩沖區(qū)。
可以作以下比喻:將一個生產(chǎn)者比喻為一個生產(chǎn)廠家,如伊利牛奶廠家,而一個消費者,比喻是學(xué)生小明,而一個緩沖區(qū)則比喻成一間好又多。第一種情況,可以理解成伊利牛奶生產(chǎn)廠家生產(chǎn)一盒牛奶,把它放在好又多一分店進行銷售,而小明則可以從那里買到這盒牛奶。只有當(dāng)廠家把牛奶放在商店里面后,小明才可以從商店里買到牛奶。所以很明顯這是最簡單的同步問題。
解題如下:
定義兩個同步信號量:
empty——表示緩沖區(qū)是否為空,初值為1。
full——表示緩沖區(qū)中是否為滿,初值為0。
生產(chǎn)者進程
while(TRUE){
生產(chǎn)一個產(chǎn)品;
P(empty);
產(chǎn)品送往Buffer;
V(full);
}
消費者進程
while(TRUE){
P(full);
從Buffer取出一個產(chǎn)品;
V(empty);
消費該產(chǎn)品;
2)一個生產(chǎn)者,一個消費者,公用n個環(huán)形緩沖區(qū)。
第二種情況可以理解為伊利牛奶生產(chǎn)廠家可以生產(chǎn)好多牛奶,并將它們放在多個好又多分店進行銷售,而小明可以從任一間好又多分店中購買到牛奶。同樣,只有當(dāng)廠家把牛奶放在某一分店里,小明才可以從這間分店中買到牛奶。不同于第一種情況的是,第二種情況有N個分店(即N個緩沖區(qū)形成一個環(huán)形緩沖區(qū)),所以要利用指針,要求廠家必須按一定的順序?qū)⑸唐芬来畏诺矫恳粋€分店中。緩沖區(qū)的指向則通過模運算得到。
解題如下:
定義兩個同步信號量:
empty——表示緩沖區(qū)是否為空,初值為n。
full——表示緩沖區(qū)中是否為滿,初值為0。
設(shè)緩沖區(qū)的編號為1~n-1,定義兩個指針in和out,分別是生產(chǎn)者進程和消費者進程使用的指針,指向下一個可用的緩沖區(qū)。
生產(chǎn)者進程
while(TRUE){
生產(chǎn)一個產(chǎn)品;
P(empty);
產(chǎn)品送往buffer(in);
in=(in+1)mod n;
V(full);
}
消費者進程
while(TRUE){
P(full);
從buffer(out)中取出產(chǎn)品;
out=(out+1)mod n;
V(empty);
消費該產(chǎn)品;
}
3)一組生產(chǎn)者,一組消費者,公用n個環(huán)形緩沖區(qū)
第三種情況,可以理解成有多間牛奶生產(chǎn)廠家,如蒙牛,達能,光明等,消費者也不只小明一人,有許許多多消費者。不同的牛奶生產(chǎn)廠家生產(chǎn)的商品可以放在不同的好又多分店中銷售,而不同的消費者可以去不同的分店中購買。當(dāng)某一分店已放滿某個廠家的商品時,下一個廠家只能把商品放在下一間分店。所以在這種情況中,生產(chǎn)者與消費者存在同步關(guān)系,而且各個生產(chǎn)者之間、各個消費者之間存在互斥關(guān)系,他們必須互斥地訪問緩沖區(qū)。
解題如下:
定義四個信號量:
empty——表示緩沖區(qū)是否為空,初值為n。
full——表示緩沖區(qū)中是否為滿,初值為0。
mutex1——生產(chǎn)者之間的互斥信號量,初值為1。
mutex2——消費者之間的互斥信號量,初值為1。
設(shè)緩沖區(qū)的編號為1~n-1,定義兩個指針in和out,分別是生產(chǎn)者進程和消費者進程使用的指針,指向下一個可用的緩沖區(qū)。
生產(chǎn)者進程
while(TRUE){
生產(chǎn)一個產(chǎn)品;
P(empty);
P(mutex1);
產(chǎn)品送往buffer(in);
in=(in+1)mod n;
V(mutex1);
V(full);
}
消費者進程
while(TRUE){
P(full);
P(mutex2);
從buffer(out)中取出產(chǎn)品;
out=(out+1)mod n;
V(mutex2);
V(empty);
操作系統(tǒng)--進程管理
進程實體=PCB(process control block)+程序段+數(shù)據(jù)段
PCB,用于描述進程的基本情況和運行狀態(tài)。創(chuàng)建進程=創(chuàng)建對應(yīng)進程的PCB;撤銷進程=撤銷對應(yīng)的PCB。
PCB是進程存在的唯一標(biāo)志
1.創(chuàng)建態(tài)
2. 就緒態(tài)
3. 運行態(tài)
4. 阻塞態(tài)
5.運行態(tài)
除了五狀態(tài)還有七狀態(tài)。
重點在于就緒態(tài)、運行態(tài)、阻塞態(tài)之間的轉(zhuǎn)換
1.就緒態(tài)的進程被調(diào)度后,獲得處理機資源,變?yōu)檫\行態(tài)。
2.運行態(tài)的進程在時間片用完后,讓出處理機,轉(zhuǎn)換為就緒態(tài)。
3.進程請求某一資源時,資源無法分配或等待某一事件發(fā)生,進程由運行態(tài)變?yōu)樽枞麘B(tài)
4.當(dāng)阻塞態(tài)的進程等待的資源和事件得帶滿足,進程由阻塞態(tài)變?yōu)榫途w態(tài)
1.共享存儲:通信進程之間存在可直接訪問的共享空間,通過對共享空間進行讀寫操作實現(xiàn)通信
2.消息傳遞:以格式化的信息為單位,通過發(fā)送消息和接受消息兩個原語實現(xiàn)
3.管道通信:共享存儲的優(yōu)化和發(fā)展,時一種半雙工的通行方式。
1.進程時資源分配和擁有的基本單位;線程自己不擁有資源,但可以訪問所屬進程所擁有的資源。
2.在沒有引入線程的操作系統(tǒng)中進程是調(diào)度的基本單位;引入線程后,線程是調(diào)度的基本單位。
3.進程切換開銷較大;線程切換開銷很小。
4.進程的地址空間之間互相獨立;同一進程的各線程間共享進程的地址空間。
用戶級:線程的創(chuàng)建、撤銷、同一進程的線程的切換都要在用戶空間中實現(xiàn)。線程阻塞會導(dǎo)致整個進程阻塞。
內(nèi)核級:線程的創(chuàng)建、撤銷、切換都在內(nèi)核空間實現(xiàn)。系統(tǒng)開銷大
1.作業(yè)調(diào)度(高級調(diào)度):內(nèi)存與輔存之間的調(diào)度,每個作業(yè)只調(diào)度一次,調(diào)出一次。
2.內(nèi)存調(diào)度(中級調(diào)度):將暫時不能運行的進程調(diào)至外存等待。
3.進程調(diào)度(低級調(diào)度)
作業(yè)調(diào)度為進程活動做準(zhǔn)備,進程調(diào)度使進程正常活動起來,中級調(diào)度將暫時不用的進程掛起。
1.先來先服務(wù)
2.短作業(yè)優(yōu)先
3.優(yōu)先級調(diào)度算法
4.高響應(yīng)比優(yōu)先
5. 時間片輪轉(zhuǎn)調(diào)度算法
6. 多級反饋隊列調(diào)度算法
1.空閑讓進
2.忙則等待
3.有限等待
4.讓權(quán)等待
1.單標(biāo)志法
2.雙標(biāo)志法先檢查:違背忙則等待
3.雙標(biāo)志法后檢查:違背空閑讓進,有限等待
4.皮特森算法:違背讓權(quán)等待
1.中斷屏蔽方法:簡單、高效,但不適用于多處理機
2.硬件指令方法:TSL(TestAndSet)指令:原子操作,讀出指定標(biāo)志后,把標(biāo)志設(shè)為真 Swap指令:原子操作,交換兩個字的內(nèi)容。
P操作可以理解為資源減一,資源不夠就加入等待隊列
V操作可以理解為資源數(shù)加一,如果有隊列,就將資源分給正在等待的隊列
1. 同步問題 :a事件---V-------------------P---b事件
2. 互斥問題 :P-----互斥事件-----V
為了解決大量分散的同步操作給系統(tǒng)管理帶來了麻煩,因此引入了管程的概念。
管程是一種代表共享資源的數(shù)據(jù)結(jié)構(gòu),包括對該共享數(shù)據(jù)結(jié)構(gòu)進行操作
1.生產(chǎn)者-消費者問題
2.讀者-寫者問題
3.哲學(xué)家進餐問題
4.吸煙者問題
定義:多個進程因競爭資源而造成的互相等待的僵局
產(chǎn)生條件:1.互斥 2.不剝奪 3.請求并保持 4.循環(huán)等待
死鎖的處理:1.死鎖預(yù)防 2.避免死鎖 3.死鎖的檢測及解除
破壞產(chǎn)生死鎖的四個條件任意一個。
銀行家算法
通過資源分配圖是否產(chǎn)生死鎖,然后采取措施解除死鎖,包括:1.資源剝奪法 2.撤銷進程法 3.進程回退法
關(guān)于計算機操作系統(tǒng) 生產(chǎn)者和消費者問題 哪位來解答一下
wait(x)是把x這個信號量進入臨界區(qū),
signal(y)是把y這個信號量離開臨界區(qū)。
此題中,wait順序不可變,signal可變。
進入臨界區(qū)的話,其他線程再申請進入同一個信號量的臨界區(qū)就會block,等待。。
1)wait順序不可逆原因:
對于消費者,這里先wait(full)是為了確保full不是0(即確保可以消費),不然先wait(mutex)的話,如果full為0,就會一直停在這里,等待消費。然后生產(chǎn)者就一直在等待進入mutex而無法進行生產(chǎn),導(dǎo)致死鎖。
對于生產(chǎn)者也是如此。
2)signal可逆原因:
對生產(chǎn)者,因為已經(jīng)生產(chǎn)完了,所以先退出mutex臨界區(qū)或者或者對full的數(shù)目加一,都不會產(chǎn)生影響。
設(shè)full=0,此時消費者無法進入full臨界區(qū),如果先signal(full),那么full數(shù)目加1,消費者可以進入full臨界區(qū),但是metux還被生產(chǎn)者使用,所以消費之要等到生產(chǎn)者signal(mutex)才能進入,沒有任何影響。
對于消費者也是如此。
關(guān)于操作系統(tǒng) 生產(chǎn)者 消費者和操作系統(tǒng)生產(chǎn)者消費者問題例題的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
操作系統(tǒng) 生產(chǎn)者 消費者的介紹就聊到這里吧,感謝你花時間閱讀本站內(nèi)容,更多關(guān)于操作系統(tǒng)生產(chǎn)者消費者問題例題、操作系統(tǒng) 生產(chǎn)者 消費者的信息別忘了在本站進行查找喔。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。
版權(quán)聲明:本文內(nèi)容由網(wǎng)絡(luò)用戶投稿,版權(quán)歸原作者所有,本站不擁有其著作權(quán),亦不承擔(dān)相應(yīng)法律責(zé)任。如果您發(fā)現(xiàn)本站中有涉嫌抄襲或描述失實的內(nèi)容,請聯(lián)系我們jiasou666@gmail.com 處理,核實后本網(wǎng)站將在24小時內(nèi)刪除侵權(quán)內(nèi)容。