《《微機(jī)原理及接口技術(shù)》全套PPT電子課件教案作業(yè)解答》由會(huì)員分享,可在線閱讀,更多相關(guān)《《微機(jī)原理及接口技術(shù)》全套PPT電子課件教案作業(yè)解答(7頁(yè)珍藏版)》請(qǐng)?jiān)谘b配圖網(wǎng)上搜索。
1、3.10.設(shè)在書(shū)設(shè)在書(shū)3.6節(jié)中所描述的生產(chǎn)者節(jié)中所描述的生產(chǎn)者-消費(fèi)者問(wèn)題中消費(fèi)者問(wèn)題中,其緩沖部分為其緩沖部分為m個(gè)長(zhǎng)度個(gè)長(zhǎng)度相等的有界緩沖區(qū)組成相等的有界緩沖區(qū)組成,且每次傳輸數(shù)且每次傳輸數(shù)據(jù)長(zhǎng)度等于有界緩沖區(qū)長(zhǎng)度以及生產(chǎn)據(jù)長(zhǎng)度等于有界緩沖區(qū)長(zhǎng)度以及生產(chǎn)者和消費(fèi)者可對(duì)緩沖區(qū)同時(shí)操作。重者和消費(fèi)者可對(duì)緩沖區(qū)同時(shí)操作。重新描述發(fā)送過(guò)程新描述發(fā)送過(guò)程deposit(data)和接收和接收過(guò)程過(guò)程remove(data)。 .PQ放 消 息取 消 息nn個(gè) 緩 沖 區(qū)(Buffer)ij設(shè)第設(shè)第I塊緩沖區(qū)的公用信號(hào)量為塊緩沖區(qū)的公用信號(hào)量為mutexI,保證生產(chǎn)保證生產(chǎn)者進(jìn)程和消費(fèi)者進(jìn)程對(duì)同一塊
2、緩沖區(qū)操作的互斥者進(jìn)程和消費(fèi)者進(jìn)程對(duì)同一塊緩沖區(qū)操作的互斥,初值為初值為1。設(shè)信號(hào)量設(shè)信號(hào)量avail為生產(chǎn)者進(jìn)程的私用信號(hào)量為生產(chǎn)者進(jìn)程的私用信號(hào)量,初值為初值為m。信號(hào)量信號(hào)量full為消費(fèi)者進(jìn)程的私用信號(hào)量為消費(fèi)者進(jìn)程的私用信號(hào)量,初值為初值為0。 deposit (data) Begin P(avail) 選擇一個(gè)空緩沖區(qū)選擇一個(gè)空緩沖區(qū)i P(mutextI) 送數(shù)據(jù)入緩沖區(qū)送數(shù)據(jù)入緩沖區(qū)i V(full) V(mutexI) EndRemove (data)BeginP(full)選擇一個(gè)滿緩沖區(qū)選擇一個(gè)滿緩沖區(qū)IP(mutextI)取緩沖區(qū)取緩沖區(qū)i中的數(shù)據(jù)中的數(shù)據(jù)V (avai
3、l)V(mutextI) End PBPA3.11兩進(jìn)程兩進(jìn)程PA,PB通過(guò)兩通過(guò)兩FIFO緩沖區(qū)隊(duì)列連接緩沖區(qū)隊(duì)列連接 ,每個(gè)緩沖區(qū)每個(gè)緩沖區(qū)長(zhǎng)度等于傳送消息長(zhǎng)度。長(zhǎng)度等于傳送消息長(zhǎng)度。進(jìn)程進(jìn)程PA ,PB之間的通信滿足如下條件之間的通信滿足如下條件:(a) 至少有一個(gè)空緩沖區(qū)存在時(shí)至少有一個(gè)空緩沖區(qū)存在時(shí),相應(yīng)的發(fā)送進(jìn)程才能發(fā)送相應(yīng)的發(fā)送進(jìn)程才能發(fā)送一個(gè)消息。一個(gè)消息。(b)當(dāng)緩沖隊(duì)列中至少存在一個(gè)非空緩沖區(qū)時(shí)當(dāng)緩沖隊(duì)列中至少存在一個(gè)非空緩沖區(qū)時(shí),相應(yīng)的接收進(jìn)相應(yīng)的接收進(jìn)程才能接收一個(gè)消息。程才能接收一個(gè)消息。 試描述發(fā)送過(guò)程試描述發(fā)送過(guò)程Send(I,m)和接收過(guò)程和接收過(guò)程receiv
4、e(I,m),這里這里i代代表緩沖隊(duì)列。表緩沖隊(duì)列。 隊(duì)列隊(duì)列0隊(duì)列隊(duì)列1bufempty0,buffull1是PA的私有信號(hào)量,buffull0,bufempty1是PB的私有信號(hào)量。 bufempty0=bufempty1=n, (n為緩沖區(qū)隊(duì)列的緩沖區(qū)個(gè)數(shù))buffull0=buffulll=0PA發(fā)送過(guò)程發(fā)送過(guò)程Send(0,m)和接收過(guò)程和接收過(guò)程receive(1,m)send(0,m)BeginP(bufempty0)按按FIFO方式選擇一個(gè)方式選擇一個(gè)空緩沖區(qū)空緩沖區(qū)送 數(shù) 據(jù) 入 緩 沖 區(qū)送 數(shù) 據(jù) 入 緩 沖 區(qū) V(buffull0)endReceive (1,m) B
5、egin P(buffull1)按按FIFO方式選擇一個(gè)裝滿數(shù)方式選擇一個(gè)裝滿數(shù)據(jù)的緩沖區(qū)據(jù)的緩沖區(qū)取緩沖區(qū)取緩沖區(qū)i中的數(shù)據(jù)中的數(shù)據(jù) V(bufempty1)End PB發(fā)送過(guò)程發(fā)送過(guò)程Send(1,m)和接收過(guò)程和接收過(guò)程receive(0,m)send(1,m)BeginP(bufempty1)按按FIFO方式選擇一個(gè)方式選擇一個(gè)空緩沖區(qū)空緩沖區(qū)送 數(shù) 據(jù) 入 緩 沖 區(qū)送 數(shù) 據(jù) 入 緩 沖 區(qū) V(buffull1)endReceive (0,m) Begin P(buffull0)按按FIFO方式選擇一個(gè)裝滿數(shù)方式選擇一個(gè)裝滿數(shù)據(jù)的緩沖區(qū)據(jù)的緩沖區(qū)取緩沖區(qū)取緩沖區(qū)i中的數(shù)據(jù)中的數(shù)據(jù) V(bufempty0)End