和尚挑水問題課程設(shè)計(jì)

和尚挑水問題課程設(shè)計(jì)

ID:9857337

大?。?58.00 KB

頁數(shù):31頁

時間:2018-05-12

和尚挑水問題課程設(shè)計(jì)_第1頁
和尚挑水問題課程設(shè)計(jì)_第2頁
和尚挑水問題課程設(shè)計(jì)_第3頁
和尚挑水問題課程設(shè)計(jì)_第4頁
和尚挑水問題課程設(shè)計(jì)_第5頁
資源描述:

《和尚挑水問題課程設(shè)計(jì)》由會員上傳分享,免費(fèi)在線閱讀,更多相關(guān)內(nèi)容在學(xué)術(shù)論文-天天文庫。

1、課程設(shè)計(jì)書學(xué)院計(jì)算機(jī)學(xué)院專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)班級課程題目和尚挑水問題教師學(xué)生摘要Linux是一類Unix計(jì)算機(jī)操作系統(tǒng)的統(tǒng)稱,也是自由軟件和開放源代碼發(fā)展中最著名的例子。Linux作為一個免費(fèi)、自由軟件,內(nèi)核版本不斷升級。新的內(nèi)核修訂了舊內(nèi)核的bug,并增加了許多新的特性。同時也使得Linux系統(tǒng)更加穩(wěn)定、更加安全,進(jìn)一步滿足用戶的功能需求。?Linux中的信號量(semphore)是一種資源鎖,如果有一個任務(wù)試圖獲得一個已經(jīng)被占用的信號量時,信號量會將其推到一個等待隊(duì)列中,這時處理器會重獲自由

2、從而去執(zhí)行其它代碼,當(dāng)持有信號量的進(jìn)程將信號量釋放后,處于等待隊(duì)列中的那個任務(wù)將會被喚醒,并將獲得該信號量。信號量是一種對多個進(jìn)程訪問共享資源進(jìn)行控制的機(jī)制,其實(shí)為了解決互斥共享資源的同步問題而引入的機(jī)制。不能單獨(dú)定義一個信號量,而只能定義一個信號量集,其中包括一組信號量,同一信號量集中的信號量使用同一引用ID,這樣設(shè)置是為了多個資源或同步操作的需要。關(guān)鍵詞:信號量,同步,互斥I目錄1課程設(shè)計(jì)的目的及要求11.1課程設(shè)計(jì)的目的11.2課程設(shè)計(jì)的要求12準(zhǔn)備工作22.1硬件及軟件需要22.2了解信

3、號量及信號量的系統(tǒng)調(diào)用函數(shù):22.2.1信號量定義22.2.1信號量集得創(chuàng)建與打開semget()32.2.2信號量的操作semop()42.2.3信號量的控制semctl()63需求分析74整體設(shè)計(jì)84.1概要設(shè)計(jì)84.2程序流程圖及運(yùn)行結(jié)果8實(shí)驗(yàn)結(jié)果14總結(jié)15參考文獻(xiàn)16附錄17II1課程設(shè)計(jì)的目的及要求1.1課程設(shè)計(jì)的目的某寺廟中有小和尚、老和尚若干人。廟內(nèi)有一水缸,由小和尚提水入缸,供老和尚飲用。水缸可容納30桶水,每次入水、取水僅為1桶,不可同時進(jìn)行。水取自同一水井,水井路窄,每次只

4、能容納一個水桶取水,設(shè)水桶個數(shù)為5個。和尚挑水問題就是使用某種機(jī)制,能夠使得若干名老和尚可以順利地喝到水,若干名小和尚之間能夠有條不紊地往水缸中入水。本課程設(shè)計(jì)的目的是使用Linux的信號量機(jī)制編程解決和尚挑水問題,通過本課程設(shè)計(jì)掌握Linux進(jìn)程創(chuàng)建的方法,掌握信號量的使用方法。1.2課程設(shè)計(jì)的要求本課題所設(shè)計(jì)的系統(tǒng)要求實(shí)現(xiàn)以下功能。編寫2個程序,程序1創(chuàng)建3個子進(jìn)程,分別編號A、B、C,用于模擬3名老和尚;程序2創(chuàng)建3個子進(jìn)程,分別編號C、D、E,用于模擬3名小和尚。通過向屏幕輸出語句模擬取

5、水過程,如輸出“目前水缸水量為10桶”表示目前水缸中有存水10桶;輸出“小和尚取水成功”表示從水井中成功取到1桶水;輸出“小和尚倒1桶水到水缸中”表示小和尚將1桶水倒入水缸中。通過觀察輸出語句,可以發(fā)現(xiàn)執(zhí)行過程是否發(fā)成沖突。使用Linux的信號量機(jī)制,編寫解決和尚挑水問題的代碼。要求給出編譯所用到的makefile文件。282準(zhǔn)備工作2.1硬件及軟件需要CentOS6.4gcc編譯器vim編輯器2.2了解信號量及信號量的系統(tǒng)調(diào)用函數(shù):2.2.1信號量定義??最簡單的信號量是一個只有0與1兩個值的

6、變量,二值信號量。這是最為通常的形式。具有多個正數(shù)值的信號量被稱之為通用信號量。在本章的其余部分,我們將會討論二值信號量。??P與V的定義出奇的簡單。假定我們有一個信號量變量sv,兩個操作定義如下:??P(sv)?如果sv大于0,減小sv。如果sv為0,掛起這個進(jìn)程的執(zhí)行。?V(sv)?如果有進(jìn)程被掛起等待sv,使其恢復(fù)執(zhí)行。如果沒有進(jìn)行被掛起等待sv,增加sv。?信號量的另一個理解方式就是當(dāng)臨界區(qū)可用時信號量變量sv為true,當(dāng)臨界區(qū)忙時信號量變量被P(sv)減小,從而變?yōu)閒alse,當(dāng)臨界

7、區(qū)再次可用時被V(sv)增加。注意,簡單的具有一個我們可以減小或是增加的通常變量并不足夠,因?yàn)槲覀儾荒苡肅,C++或是其他的編程語言來表述生成信號,進(jìn)行原子測試來確定變量是否為true,如果是則將其變?yōu)閒alse。這就是使得信號量操作特殊的地方。28信號量函數(shù)定義如下:?#include??intsemctl(intsem_id,?intsem_num,?int?command,?...);?intsemget(key_t?key,?intnum_sems,?intsem_

8、flags);intsemop(intsem_id,?structsembuf?*sem_ops,?size_tnum_sem_ops);??事實(shí)上,為了獲得我們特定操作所需要的#define定義,我們需要在包含sys/sem.h文件之前通常需要包含sys/types.h與sys/ipc.h文件。而在某些情況下,這并不是必須的。??因?yàn)槲覀儠来瘟私饷恳粋€函數(shù),記住,這些函數(shù)的設(shè)計(jì)是用于操作信號量值數(shù)組的,從而會使用其操作向比單個信號量所需要的操作更為復(fù)雜。??注意,key的作用類似于一個文件名

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費(fèi)完成后未能成功下載的用戶請聯(lián)系客服處理。