操作系統(tǒng)課程設(shè)計(jì)報(bào)告_第1頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告_第2頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告_第3頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告_第4頁
操作系統(tǒng)課程設(shè)計(jì)報(bào)告_第5頁
已閱讀5頁,還剩13頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、操作系統(tǒng)課程設(shè)計(jì)報(bào)告班 級(jí) 軟件1001 學(xué) 號(hào) 姓 名 指導(dǎo)老師 完成時(shí)間:2013年 1 月 9日一、 課程設(shè)計(jì)題目某銀行提供10個(gè)服務(wù)窗口(7個(gè)對(duì)私服務(wù)窗口,3個(gè)對(duì)公服務(wù)窗口)和100個(gè)供顧客等待的座位。顧客到達(dá)銀行時(shí),若有空座位,則到取號(hào)機(jī)上領(lǐng)取一個(gè)號(hào),等待叫號(hào)。取號(hào)機(jī)每次僅允許一位顧客使用,有對(duì)公和對(duì)私兩類號(hào),每位顧客只能選取其中一個(gè)。當(dāng)營業(yè)員空閑時(shí),通過叫號(hào)選取一位顧客,并為其服務(wù)。請(qǐng)用p、v操作寫出進(jìn)程的同步算法。二、 課程設(shè)計(jì)目的熟練掌握pv操作的相關(guān)知識(shí);認(rèn)識(shí)信號(hào)量的相關(guān)含義;加深對(duì)線程(進(jìn)程)的認(rèn)識(shí);三、 課程設(shè)計(jì)要求要求打?。篴) 初始狀態(tài)b) 中間變化的狀態(tài)信息c) 以

2、及最終狀態(tài)信息。四、 原理及算法 目前,在以銀行營業(yè)大廳為代表的窗口業(yè)務(wù),大量客戶的擁擠排隊(duì)已成為了這些企事業(yè)單位改善服務(wù)品質(zhì)、提升企業(yè)形象的主要障礙。排隊(duì)叫號(hào)系統(tǒng)的使用將成為改變這種情況的有力手段。排隊(duì)系統(tǒng)完全模擬了人群排隊(duì)的全過程,通過取票進(jìn)隊(duì)。排隊(duì)等待、叫號(hào)服務(wù)等功能,很好的解決了客戶在服務(wù)機(jī)構(gòu)辦理業(yè)務(wù)是所遇到的各種排隊(duì)、擁擠和混亂現(xiàn)象,代替了人們站隊(duì)的辛苦,把顧客等待的煩惱變成了一段難得的休閑時(shí)光,使客戶擁有了一個(gè)自由的空間和一份美好的心情。 排隊(duì)過程大致流程為:4、顧客到窗口辦理 休息區(qū)的顧客聽到呼叫就到響應(yīng)窗口進(jìn)行一對(duì)一服務(wù)。3、營業(yè)員按鈕呼叫 窗口操作員按“下一位”,當(dāng)前窗口就顯

3、示顧客排隊(duì)號(hào)并語音呼叫“請(qǐng)xx到x號(hào)窗口”2、顧客休息等待 取到排隊(duì)號(hào)的顧客在休息區(qū)休息等待,注意大廳的提示信息1、 顧客取號(hào)需要辦理業(yè)務(wù)的顧客到取票機(jī)前取號(hào),并獲得打印出的排隊(duì)號(hào)票本次的銀行叫號(hào)系統(tǒng)有pv操作來模擬實(shí)現(xiàn)。1) 實(shí)驗(yàn)中用到的相關(guān)知識(shí)介紹(windows環(huán)境下)1同步對(duì)象同步對(duì)象是指windows中用于實(shí)現(xiàn)同步與互斥的實(shí)體,包括信號(hào)量(semaphore)、互斥量(mutex)、臨界區(qū)(critical section)和事件(events)等。本實(shí)驗(yàn)中使用到信號(hào)量、互斥量和臨界區(qū)三個(gè)同步對(duì)象。同步對(duì)象的使用步驟:l 創(chuàng)建/初始化同步對(duì)象。l 請(qǐng)求同步對(duì)象,進(jìn)入臨界區(qū)(互斥量上鎖

4、)。l 釋放同步對(duì)象(互斥量解鎖)。這些對(duì)象在一個(gè)線程中創(chuàng)建,在其他線程中都可以使用,實(shí)現(xiàn)同步與互斥。2相關(guān)api的功能及使用利用windows sdk提供的api編程實(shí)現(xiàn)實(shí)驗(yàn)題目要求,而vc中包含有windows sdk的所有工具和定義。要使用這些api,需要包含堆這些函數(shù)進(jìn)行說明的sdk頭文件最常見的是windows.h(特殊的api調(diào)用還需要包含其他頭文件)下面給出的是本實(shí)驗(yàn)使用到的api的功能和使用方法簡單介紹(1) createthread功能創(chuàng)建一個(gè)在調(diào)用進(jìn)程的地址空間中執(zhí)行的線程格式handle createthread( lpsecurity_attributes lpthre

5、adattributes, dword dwstacksize, lpthread_start_routine lpstartaddress, lpvoid lpparamiter, dword dwcreationflags, lpdword lpthread)參數(shù)說明lpthreadattributes指向一個(gè)lpsecurity_attributes(新線程的安全性描述符)。dwstacksize定義原始堆棧大小。lpstartaddress指向使lpthraed_start_routine類型定義的函數(shù)。lpparamiter定義一個(gè)給進(jìn)程傳遞參數(shù)的指針。dwcreationflags

6、定義控制線程創(chuàng)建的附加標(biāo)志。lpthread保存線程標(biāo)志符(32位)(2) createmutex功能創(chuàng)建一個(gè)命名或匿名的互斥量對(duì)象格式handle createmutex(lpsecurity_attributes lpmutexattributes, bool binitialowner, lpctstr lpname);參數(shù)說明lpmutexattributes必須取值null。binitialowner指示當(dāng)前線程是否馬上擁有該互斥量(即馬上加鎖)。lpname互斥量名稱。(3) createsemaphore功能創(chuàng)建一個(gè)命名或匿名的信號(hào)量對(duì)象格式handle createsemaph

7、ore(lpsecurity_attributes lpsemaphoreattributes, long linitialcount, long lmaximumcount, lpctstr lpname );參數(shù)說明lpsemaphoreattributes必須取值null。linitialcount信號(hào)量的初始值。該值大于0,但小于lmaximumcount指定的最大值。lmaximumcount信號(hào)量的最大值。lpname信號(hào)量名稱。(4) waitforsingleobject功能使程序處于等待狀態(tài),直到信號(hào)量hhandle出現(xiàn)(即其值大于等于1)或超過規(guī)定的等待時(shí)間格式dword

8、waitforsingleobject(handle hhandle, dword dwmilliseconds);參數(shù)說明hhandle信號(hào)量指針。dwmilliseconds等待的最長時(shí)間(infinite為無限等待)。(5) releasesemaphore功能對(duì)指定信號(hào)量加上一個(gè)指定大小的量。成功執(zhí)行則返回非0值格式bool releasesemaphore(handle hsemaphore,long lreleasecount,lplong lppreviouscount );參數(shù)說明hsemaphore信號(hào)量指針。lreleasecount信號(hào)量的增量。lppreviouscou

9、nt保存信號(hào)量當(dāng)前值。(6) releasemutex功能打開互斥鎖,即把互斥量加1。成功調(diào)用則返回0格式 bool releasemutex(handle hmutex);參數(shù)說明 hmutex互斥量指針。(7) initializecriticalsection功能初始化臨界區(qū)對(duì)象格式void initializecriticalsection(lpcritical_section lpcriticalsection);參數(shù)說明 lpcriticalsection指向臨界區(qū)對(duì)象的指針。(8) entercriticalsection功能等待指定臨界區(qū)對(duì)象的所有權(quán)格式void entercr

10、iticalsection(lpcritical_section lpcriticalsection);參數(shù)說明 lpcriticalsection指向臨界區(qū)對(duì)象的指針。2) 實(shí)驗(yàn)中pv原語1. 實(shí)驗(yàn)中的信號(hào)量seats; /空座位信號(hào)量,初始值100cu1; /高級(jí)客戶信號(hào)量,初始值0ser1; /對(duì)公服務(wù)窗口,初始值0cu2; /普通客戶信號(hào)量,初始值0ser2; /對(duì)私服務(wù)窗口,初始值0h_mutex; /互斥量,初始值0五、 主要數(shù)據(jù)結(jié)構(gòu)和流程:顧客到來,先看是否有空座等待對(duì)共窗口服務(wù)p(& ser1)得到服務(wù)v(& seats)p(& seats)p(& hmutex)到取號(hào)機(jī)取號(hào)v

11、(& hmutex)有座zu對(duì)私服務(wù)客戶對(duì)公服務(wù)客戶等待對(duì)私窗口服務(wù)p(& ser2)得到服務(wù)v(& seats)普通客戶線程高級(jí)客戶線程創(chuàng)建線程while(true)p(& cu1)叫號(hào)服務(wù)v(& ser1)對(duì)私窗口線程while(true)p(& cu2)叫號(hào)服務(wù)v(& ser2)對(duì)公窗口線程六、 實(shí)驗(yàn)測試結(jié)果及分析七、 課程設(shè)計(jì)總結(jié)本次課程設(shè)計(jì)基本完成了銀行較好系統(tǒng)問題的全部過程,結(jié)果滿足設(shè)計(jì)要求,驗(yàn)證無誤。我自己設(shè)計(jì)的是6個(gè)信號(hào)量,但是老師說只要4個(gè)信號(hào)量就行,我設(shè)計(jì)的多了兩個(gè)隊(duì)共對(duì)私窗口的信號(hào)量,所以我的程序可能略顯繁瑣。實(shí)驗(yàn)中也遇到了一些錯(cuò)誤,剛開始寫的程序在執(zhí)行main函數(shù)時(shí),程

12、序只能輸出第一個(gè)高級(jí)(普通)客戶的取號(hào)信息,然后程序就自動(dòng)終止,我看了很久都沒找到哪里錯(cuò)了,之后問了同學(xué)才想到,我的程序在輸出第一個(gè)高級(jí)(普通)客戶的取號(hào)信息已經(jīng)結(jié)束,所以線程也就相應(yīng)的終止了,所以就加了一句死循環(huán)的語句來解決。在程序能順利執(zhí)行的情況下也遇到了一些問題,如輸出的客戶號(hào)數(shù)大于我設(shè)置的最大值等,但問題都被我一一解決。由于時(shí)間緊促以及個(gè)人能力的不足,模擬系統(tǒng)在功能上尚存在一些問題, 在很多方面都有改進(jìn)的空間。 但總體上是實(shí)現(xiàn)應(yīng)有的功能。 對(duì)于鞏固在操作系統(tǒng) pv操作原理課上所學(xué)的知識(shí), 加深對(duì)操作系統(tǒng)中進(jìn)程同步和互斥、 臨界區(qū)管理等問題認(rèn)識(shí)和理解,有著很好的效果,同時(shí)也初步體會(huì)了軟件

13、設(shè)計(jì)流程。八、 源程序清單#include /sdk頭文件,提供api編程#include /字符數(shù)組定義頭文件#include#include /日期和時(shí)間頭文件using namespace std;#define maxthreadnum 200 /每天來的顧客量handle seats; /空座位信號(hào)量handle cu1; /高級(jí)客戶信號(hào)量handle ser1; /對(duì)公服務(wù)窗口handle cu2; /普通客戶信號(hào)量handle ser2; /對(duì)私服務(wù)窗口handle h_mutex; /互斥量handle shuzumaxthreadnum; /存儲(chǔ)線程句柄的數(shù)組int g=1;

14、 /高級(jí)客戶號(hào)數(shù)int p=1; /普通客戶號(hào)數(shù)dword winapi customer1(pvoid cu1pv)/高級(jí)客戶線程代碼int n;dword waitforsemaphor,waitforsemaphor1,waitformutex,m_delay=997,n_dalay=7099;/等待狀態(tài),等待時(shí)間waitforsemaphor=waitforsingleobject(seats,-1);/等待座位waitformutex= waitforsingleobject(h_mutex,-1);/等待取號(hào)coutg號(hào)高級(jí)客戶正在取號(hào)endl; /取號(hào)n=g; g+;coutn號(hào)

15、高級(jí)客戶取號(hào)成功,等待服務(wù)endl; sleep(m_delay); / 等待服務(wù)releasemutex(h_mutex); /打開互斥鎖releasesemaphore(cu1,1,null); /waitforsemaphor1=waitforsingleobject(ser1,-1);coutn號(hào)高級(jí)客戶得到服務(wù)endl;sleep(n_dalay); /對(duì)高級(jí)客戶進(jìn)行服務(wù)時(shí)間releasesemaphore(seats,1,null);coutn號(hào)高級(jí)客戶已離開endl;coutendl;return 0;dword winapi server1(pvoid ser1pv) /營業(yè)員

16、(對(duì)共)線程代碼while(true)dword waitforsemaphor,m_delay=1000; waitforsemaphor=waitforsingleobject(cu1,-1);sleep(m_delay); /叫號(hào)服務(wù)releasesemaphore(ser1,1,null);/dword winapi customer2(pvoid cu2pv)/普通客戶int m;dword waitforsemaphor,waitforsemaphor1,waitformutex,m_delay=997, n_dalay=6199;waitforsemaphor=waitforsi

17、ngleobject(seats,-1);/等待座位waitformutex= waitforsingleobject(h_mutex,-1);/等待取號(hào)coutp號(hào)普通客戶正在取號(hào)endl; /取號(hào)m=p;p+;coutm號(hào)普通客戶取號(hào)成功,等待服務(wù)endl; sleep(m_delay); releasemutex(h_mutex); /打開互斥鎖releasesemaphore(cu2,1,null);waitforsemaphor1=waitforsingleobject(ser2,-1);coutm號(hào)普通客戶得到服務(wù)endl;sleep(n_dalay); /對(duì)普通客戶進(jìn)行服務(wù)cou

18、tm號(hào)普通客戶已離開endl;coutendl;releasesemaphore(seats,1,null);return 0;dword winapi server2(pvoid ser2pv) /營業(yè)員(對(duì)共)線程代碼while(true)dword waitforsemaphor,m_delay=1003; waitforsemaphor=waitforsingleobject(cu2,-1);sleep(m_delay); /叫號(hào)服務(wù)releasesemaphore(ser2,1,null);/int main()seats=createsemaphore(null,100,100, null); /創(chuàng)建信號(hào)量cu1=createsemaphore(null,0,100,null);ser1=createsemaphore(null,0,100,null);cu2=createsemaphore(n

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論