版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
1、精選優(yōu)質(zhì)文檔-傾情為你奉上操作系統(tǒng)課程設(shè)計實驗報告書題 目:售票員與乘客(信號量操作)題目編號:2院 系:計算機科學(xué)與技術(shù)軟件服務(wù)與外包學(xué)院班 級:11級9班小組成員:組長:楊揚學(xué)號:組員:沈菲菲學(xué)號:組員:學(xué)號:2013-06-30目 錄專心-專注-專業(yè)一、課程設(shè)計任務(wù)劃分組員具體分工沈菲菲網(wǎng)上搜索程序資料程序合并實驗報告書書寫楊揚程序調(diào)試設(shè)計項目流程心得體會二、基本原理(一)課程內(nèi)容編程序模擬車站售票廳內(nèi)進程同步問題,售票廳任何時刻最多可容納20名購票者進入,否則需要在外面等待。每個購票者可看成一個進程。(二)算法信號量與P,V操作(三)算法基本原理生產(chǎn)者-消費者問題是一個經(jīng)典的線程同步問
2、題,該問題最早由Dijkstra提出,用以演示他提出的信號量機制。在同一個線程地址空間內(nèi)執(zhí)行的兩個線程。生產(chǎn)者線程生產(chǎn)物品,然后將物品放置在一個空緩沖區(qū)中供消費者線程消費。消費者線程從緩沖區(qū)中獲得物品,然后釋放緩沖區(qū)。當(dāng)生產(chǎn)者線程生產(chǎn)物品時,如果沒有空緩沖區(qū)可用,那么生產(chǎn)者線程必須等待消費者線程釋放出一個空緩沖區(qū)。當(dāng)消費者線程消費物品時,如果沒有滿的緩沖區(qū),那么消費者線程將被阻塞,直到新的物品被生產(chǎn)出來。多個生產(chǎn)/消費者在有界緩沖上操作。它利用N個字節(jié)的共享內(nèi)存作為有界循環(huán)緩沖區(qū),利用寫一字符模擬放一個產(chǎn)品,利用讀一字符模擬消費一個產(chǎn)品。當(dāng)緩沖區(qū)空時消費者應(yīng)阻塞睡眠,而當(dāng)緩沖區(qū)滿時生產(chǎn)者應(yīng)當(dāng)阻
3、塞睡眠。一旦緩沖區(qū)中有空單元,生產(chǎn)者線程就向空單元中入寫字符,并報告寫的內(nèi)容和位置。一旦緩沖區(qū)中有未讀過的字符,消費者線程就從該單元中讀出字符,并報告讀取位置。生產(chǎn)者不能向同一單元中連續(xù)寫兩次以上相同的字符,消費者也不能從同一單元中連續(xù)讀兩次以上相同的字符。因此售票員與乘客也可轉(zhuǎn)化為生產(chǎn)者與消費者的問題,第一步:確定進程間的關(guān)系。售票廳是各進程共享的公有資源,當(dāng)售票廳中多于20名購票者時,廳外的購票者需要在外面等待。所以進程間是互斥的關(guān)系。第二步:確定信號量及其值。只有一個公有資源:售票廳,所以設(shè)置一個信號量s。售票廳最多容納20個進程,即可用資源實體數(shù)為20,s的初值就設(shè)為20。實現(xiàn):beg
4、in s:semaphore;s:=20;cobeginprocess PI(I=1,2,)begin P(s);進入售票廳;購票;退出;V(s);end;coend當(dāng)購票者進入售票廳前要執(zhí)行P(s)操作,執(zhí)行后若s大于或等于零,說明售票廳的人數(shù)還未滿可進入。執(zhí)行后若s小于零,則說明售票廳的人數(shù)已滿不能進入。這個實現(xiàn)中同時最多允許20個進程進入售票廳購票,其余進程只能等待。三、基本思路(一)變量#define N 2 / 乘客或售票員的數(shù)目#define M 20 / 售票廳大小int in = 0; / 售票員售票的位置int out = 0; / 乘客買票的位置int buffM = 0;
5、 / 售票廳初始化為0, 開始時沒有售票員sem_t empty_sem; / 同步信號量, 當(dāng)滿了時阻止售票員售票sem_t full_sem; / 同步信號量, 當(dāng)沒售票員時阻止乘客買票pthread_mutex_t mutex; / 互斥信號量, 一次只有一個線程訪問緩沖int conductor_id = 0; /售票員idint passenger_id = 0; /乘客id(二)所用函數(shù)1. void print() 打印售票廳情況2. void *conductor () 售票員方法 3. void *passenger () 乘客方法 4. int main() 主方法5. s
6、em_wait()函數(shù)原形:int sem_wait(sem_t *sem);參數(shù):sem 指向信號燈的指針返回值:若成功則返回0,否則返回-1。我們能用sem_wait來申請共享資源,sem_wait函數(shù)能測試所指定信號燈的值,如果該值大于0,那就將他減1并即時返回。我們就能使用申請來的 共享資源了。如果該值等于0,調(diào)用線程就被進入睡眠狀態(tài),直到該值變?yōu)榇笥?,這時再將他減1,函數(shù)隨后返回。sem_wait操作必須是原子的。6. sem_post()掛出共享資源函數(shù)原形:int sem_post(sem_t *sem);參數(shù):sem 指向信號燈的指針返回值:若成功則返回0,否則返回-1。當(dāng)一
7、個線程使用完某個信號燈時,他應(yīng)該調(diào)用sem_post來告訴系統(tǒng)申請的資源已用完。本函數(shù)和sem_wait函數(shù)的功能正好相反,他把所指定的信號燈的值加1,然后喚醒正在等待該信號燈值變?yōu)檎龜?shù)的任意線程。7. sem_init()初始化信號等函數(shù)原形:int sem_init(sem_t *sem,int shared,unsigned int value);參數(shù):sem 指向信號燈的指針shared 作用范圍value 信號燈初始值返回值:若成功則返回0,否則返回-1?;趦?nèi)存的信號燈是由sem_init初始化的。sem參數(shù)指向必須由應(yīng)用程序分配的sem_t變量。如果shared為0,那么待初始化
8、的信號燈是在同 一進程的各個線程共享的,否則該信號燈是在進程間共享的。當(dāng)shared為零時,該信號燈必須存放在即將使用它的所有進程都能訪問的某種類型的共享內(nèi)存 中。8 pthread_mutex_init(&mutex, NUL互斥鎖的初始化函數(shù)原型:int pthread_mutex_init(pthread_mutex_t *restrict mutex,const pthread_mutexattr_t *restrict attr);函數(shù)作用:pthread_mutex_init() 函數(shù)是以動態(tài)方式創(chuàng)建互斥鎖的,參數(shù)attr指定了新建互斥鎖的屬性。如果參數(shù)attr為空,則使用
9、默認(rèn)的互斥鎖屬性,默認(rèn)屬性為快速互斥鎖 。互斥鎖的屬性在創(chuàng)建鎖的時候指定,在LinuxThreads實現(xiàn)中僅有一個鎖類型屬性,不同的鎖類型在試圖對一個已經(jīng)被鎖定的互斥鎖加鎖時表現(xiàn)不同。9. pthread_create()創(chuàng)建線程函數(shù)函數(shù)原型:int pthread_create(*restrict tidp,const pthread_attr_t *restrict_attr,void*(*start_rtn)(void*),void *restrict arg);參數(shù) 第一個參數(shù)為指向線程的指針。 第二個參數(shù)用來設(shè)置線程屬性。 第三個參數(shù)是線程運行函數(shù)的起始地址。 最后一個參數(shù)是運行函數(shù)
10、的參數(shù)。返回值 若成功則返回0,否則返回出錯編號返回成功時,由tidp指向的內(nèi)存單元被設(shè)置為新創(chuàng)建線程的線程ID。attr參數(shù)用于制定各種不同的線程屬性。新創(chuàng)建的線程從start_rtn函數(shù)的地址開始運行,該函數(shù)只有一個萬能指針參數(shù)arg,如果需要向start_rtn函數(shù)傳遞的參數(shù)不止一個,那么需要把這些參數(shù)放到一個結(jié)構(gòu)中,然后把這個結(jié)構(gòu)的地址作為arg的參數(shù)傳入。(三)流程圖生產(chǎn)者進程消費者進程A、主函數(shù)Main函數(shù)開始定時到初始化公共數(shù)據(jù)區(qū)初始化信號量創(chuàng)建售票員進程創(chuàng)建乘客進程創(chuàng)建統(tǒng)計進程成功成功成功退出YYYNNNB、統(tǒng)計線程進程開始定時到修改退出標(biāo)記時間+1秒打印售票買票情況記清屏進程
11、結(jié)束C、生產(chǎn)者線程要求退出進程開始加鎖成功要求加鎖檢查資源數(shù)目是否有空位減少資源數(shù)目目設(shè)置買票成功目設(shè)置買票失敗失敗計數(shù)器-1目解鎖取得成功?售票員數(shù)據(jù)要求加速解鎖加鎖成功?成功?YN結(jié)束進程YNYNYND、消費者線程要求退出進程開始加鎖成功要求加鎖檢查資源數(shù)目有售票員減少資源數(shù)目目設(shè)置買票成功目設(shè)置買票失敗失敗計數(shù)器-1目解鎖取得成功?乘客數(shù)據(jù)要求加速解鎖加鎖成功?成功?YN結(jié)束進程YNYNYN四、調(diào)試及實驗結(jié)果實驗結(jié)果:五、個人體會給出設(shè)計文檔和調(diào)試編碼的感受,或?qū)υ碇R的理解。(100字以上)由于時間有限,本次設(shè)計完成的并不是很完美,下面從以下幾點來說明本次課程設(shè)計的個人體會:1.本次
12、課程設(shè)計中做的比較好的地方:做的好的地方就是在于對題目意思的正確理解,以及在此基礎(chǔ)上的模型設(shè)計。最開始一看題目的時候有點不知道如何著手,只是模糊地知道是怎么回事,能夠在思想上想清楚具體的運轉(zhuǎn)過程,參照教科書之后,學(xué)會了怎樣用P,V原語操作。然后最關(guān)鍵的就是怎樣用程序表現(xiàn)這個過程,最后我想出來的方法就是通過乘客上下車的過程來表現(xiàn),我覺得這樣是最好的體現(xiàn)方式。2.做得不太好的地方,以及以后如何改正:做得不太好的地方就是不能把自己所學(xué)的C知識和本次課程設(shè)計的相關(guān)知識很好的結(jié)合起來,以至于沒有很好的表達出本次課程設(shè)計的細節(jié)。在以后的過程中,我會運用本次課程設(shè)計中所學(xué)的知識,以及思考問題的方式和方法,爭取能夠發(fā)揚優(yōu)點,盡量克服不細心,不嚴(yán)謹(jǐn)?shù)热秉c。3.從本次設(shè)計中得到的收獲(在編寫,調(diào)試,執(zhí)行過程中的經(jīng)驗和教訓(xùn)):通過本次課程設(shè)計,我學(xué)會了綜合運用所學(xué)相關(guān)知識的能力,動手能力以及獨立思考問題的能力。下面具體的收一個邊學(xué)程序是遇到的困難,首先就是如何把想法變?yōu)樽龇ǖ膯栴},最開始一拿到題目,我就覺得無從下手,因為我的閱歷,不
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 沈陽理工大學(xué)《大學(xué)生心理健康》2021-2022學(xué)年第一學(xué)期期末試卷
- 哈工大建筑工程法規(guī)與合同試題
- 食品安全與營養(yǎng)健康科普大賽
- 2024酒店會議服務(wù)合同
- 專題11.分析人物形象-2023年四升五語文暑期閱讀專項提升(統(tǒng)編版)
- 2024【外架工操作證】正規(guī)的外架工程班組勞務(wù)包干合同
- 2024家庭保姆雇傭合同新
- 規(guī)劃課題申報范例:大學(xué)生畢業(yè)實習(xí)課程化管理的體制機制建構(gòu)(附可修改技術(shù)路線圖)
- 規(guī)劃課題申報范例:“雙減”背景下小學(xué)數(shù)學(xué)教學(xué)提質(zhì)增效策略研究(附可修改技術(shù)路線圖)
- 深圳大學(xué)《中國民俗文化》2022-2023學(xué)年第一學(xué)期期末試卷
- 牙用漂白凝膠市場環(huán)境與對策分析
- 2024年山東省濟南市中考英語試題卷(含答案)
- 人教版七年級道德與法治上冊 期中復(fù)習(xí)知識梳理
- 3.1 農(nóng)業(yè)區(qū)位因素及其變化 課件 高一地理人教版(2019)必修第二冊
- 建筑施工企業(yè)(安全管理)安全生產(chǎn)管理人員安全生產(chǎn)考試參考題及答案
- 鍋爐應(yīng)急預(yù)案演練方案
- 《11~20各數(shù)的認(rèn)識》(教案)-2024-2025學(xué)年一年級上冊數(shù)學(xué)人教版
- 關(guān)于高技能人才培養(yǎng)問題的思考高技能人才培養(yǎng)方案
- 2024新信息科技四年級《第三單元 有趣的編碼應(yīng)用》大單元整體教學(xué)設(shè)計
- 中國航天發(fā)展史主題班會 課件
- 正向管理課件教學(xué)課件
評論
0/150
提交評論