freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

實現(xiàn)生產(chǎn)者消費者問題操作系統(tǒng)課程設(shè)計報告-文庫吧資料

2025-03-31 13:02本頁面
  

【正文】 的環(huán)境,有利于進程的并發(fā)執(zhí)行。死鎖的檢測和解除措施,有可能使系統(tǒng)獲得較好的資源利用率和吞吐量,但在實現(xiàn)上難度也最大。常用的實施方法是撤消或是掛起一些進程,以便回收一些資源。這是與檢測死鎖相配套的一種措施。但可通過系統(tǒng)所設(shè)置的檢測機構(gòu),即使地檢測出死鎖的發(fā)生,并精確地確定與死鎖有關(guān)的進程和資源;然后,采取適當?shù)拇胧瑥南到y(tǒng)中將已發(fā)生的死鎖清處掉。③檢測死鎖。這種方法只需要先加以較弱的限制條件,便可獲得較高的資源利用率和系統(tǒng)吞吐量,但在實現(xiàn)上有一定的難度。②避免死鎖。預防死鎖是一種較易實現(xiàn)的方法,已被廣泛使用。這是一種較簡單和直觀的事先預防的方法。在系統(tǒng)中已經(jīng)出現(xiàn)死鎖后,則應及時檢測到死鎖的發(fā)生,并采取適當措施來解除死鎖。①破壞“不可剝奪”條件:在允許進程動態(tài)申請資源前提下規(guī)定,一個進程在申請新的資源不能立即得到滿足而變?yōu)榈却隣顟B(tài)之前,必須釋放已占有的全部資源,若需要再重新申請 ②破壞“請求和保持”條件:要求每個進程在運行前必須一次性申請它所要求的所有資源,且僅當該進程所要資源均可滿足時才給予一次性分配 ③破壞“循環(huán)等待”條件:采用資源有序分配法:把系統(tǒng)中所有資源編號,進程在申請資源時必須嚴格按資源編號的遞增次序進行,否則操作系統(tǒng)不予分配。④循環(huán)等待:只發(fā)生死鎖時,必然存在一個進程資源的環(huán)形鏈,即進程集合{P1 , P2 , … , Pn}, 其中P1等待P2占有的資源,P2等待P3占有的資源,…,Pn等待P1占有的資源,形成一個進程等待環(huán)路 5)、死鎖的解決方案 產(chǎn)生死鎖的例子 申請不同類型資源產(chǎn)生死鎖 P1: … 申請打印機 申請掃描儀 使用 釋放打印機 釋放掃描儀 … P2: … 申請掃描儀 申請打印機 使用 釋放打印機 釋放掃描儀 … 申請同類資源產(chǎn)生死鎖(如內(nèi)存) 設(shè)有資源R,R有m個分配單位,由n個進程P1,P2,…,Pn(n m)共享。指進程已經(jīng)保持了至少一個資源,但又提出了新的資源請求,而該資源又被其他進程占有,此時請求進程阻塞,但又對自己獲得的其他資源保持不放③請求和保持(部分分配,占有申請):一個進程在申請新的資源的同時保持對原有資源的占有(只有這樣才是動態(tài)申請,動態(tài)分配) 。 不可搶占資源 臨時性資源:只可使用一次的資源;如信號量,中斷信號,同步信號等(可消耗性資源) “申請分配使用釋放”模式 4)、產(chǎn)生死鎖的四個必要條件:①互斥使用(資源獨占):指進程對所分配到的資源進進行排它性使用,即在一段時間內(nèi)某資源只有一個進程使用。 可搶占資源 l 3)、資源分類: 永久性資源:可以被多個進程多次使用(可再用資源) l一組進程中,每個進程都無限等待被該組進程中另一進程所占有的資源,因而永遠無法得到的資源,這種現(xiàn)象稱為進程死鎖,這一組進程就稱為死鎖進程。四、分析設(shè)計預備知識1)、死鎖概念:在多道程序系統(tǒng)中,雖可借助于多個進程的并發(fā)執(zhí)行,來改善系統(tǒng)的資源利用率,提高系統(tǒng)的吞吐量,但可能發(fā)生一種危險━━死鎖。假設(shè)共有3類資源A B C,分別為10,5,7個 三、開發(fā)環(huán)境此程序的設(shè)計在Windows XP操作系統(tǒng)下,基于Microsoft Visual C++。 l 掌握銀行家算法,了解資源在進程并發(fā)執(zhí)行中的資源分配策略。 l 掌握死鎖的產(chǎn)生的原因、產(chǎn)生死鎖的必要條件和處理死鎖的基本方法。 }第二部分:實現(xiàn)銀行家算法一、題目:實現(xiàn)銀行家算法課程設(shè)計目的: } //生產(chǎn)者和消費者的執(zhí)行 WaitForMultipleObjects(totalThreads, hThread, TRUE, INFINITE)。tid)。 i++) { hThread[i] = CreateThread(NULL, 0, Producer, amp。 for (。 if ( hThread[i] ) WaitForSingleObject(hThread[i], 10)。i, 0, amp。 iCONSUMER_NUM。 // 開啟消費者線程 printf(先請小白兔就位!\n)。 return 1。 g_semProduct= CreateSemaphore(NULL, 0, BUFFER_NUM, ProductSemaphone)。 //初始化信號量 g_mutex=CreateSemaphore(NULL,BUFFER_NUM,BUFFER_NUM,mutexOfConsumerAndProducer)。 DWORD tid。 } int main(int argc, char *argv[]) { //線程技術(shù),前面為消費者線程,后面為生產(chǎn)者線程 HANDLE hThread[CONSUMER_NUM+PRODUCER_NUM]。 V(g_semProduct)。 Sleep(rate/2*rand()%10+1800)。 printf(小草%03d:長大了!buf[%d] = %s\n, i, ptr, thing[data])。 //再移動緩沖區(qū)指針 = (+1)%BUFFER_NUM。 //有地方,先鎖住緩沖區(qū)g_buf P(g_mutex)。 printf(小草%03d:我要長大!data = %s!\n, i, thing[data])。 Sleep(rate*rand()%10+1800)。 Sleep(1800)。 int data。 } //生產(chǎn)者線程 DWORD WINAPI Producer(LPVOID para) { int i=*(int*)paraCONSUMER_NUM。 V(g_semBuffer)。 Sleep(rate*rand()%10+1800)。 //讓其他消費者或生產(chǎn)者使用g_buf V(g_mutex)。 //記錄消費的物品 ptr=。 //等待產(chǎn)品 P(g_semProduct)。 Sleep(1800)。 int ptr。 Semaphore g_semBuffer, g_semProduct, g_mutex。 // 緩沖區(qū) int start, end。 //信號量的Windows原型 define P(S) WaitForSingleObject(S, INFINITE) //定義Windows下的P操作 define V(S) ReleaseSemaphore(S, 1, NULL)//定義Windows下的V操作 define rate 1000 define CONSUMER_NUM 4 /* 消費者個數(shù) */ define PRODUCER_NUM 4 /* 生產(chǎn)者個數(shù) */ define BUFFER_NUM 4 /* 緩沖區(qū)個數(shù) */ char *thing[10]={s1, s2, s3, s4,}。其次,我現(xiàn)在對Windows操作系統(tǒng)執(zhí)行流程有了一個透明的認識,同時也讓我對它更有親切感。雖然很累,但是覺得值得。剛開始對如何動態(tài)實現(xiàn)消費者生產(chǎn)者問題一籌莫展,于是和一些同學就這個問題討論過,但是沒什么好的效果。由于對C語言知識已經(jīng)有些遺忘,所以我找出了以前的筆記,花了半天的時間去回憶和理解。因此在編寫程序的時候一定不能急躁,要耐心地檢測輸入的數(shù)據(jù)和輸出的結(jié)果,在沒達到預期目的的情況下,要及時修改數(shù)據(jù)進行下一次的檢測,只有這樣才能成功地用C語言編寫出需要的程序。在生產(chǎn)者與消費者問題的算法編寫程序的時候要盡可能用全所學到的函數(shù),因為這是檢測我們用C語言進行程序設(shè)計的能力的重要方式。有經(jīng)過了一個多星期的調(diào)試和運行終于達到了我的要求了。經(jīng)過兩個多星期的查資料。后來,我就在網(wǎng)上和圖書館大量的找資料。有于當時在實驗室就對進程之間的運轉(zhuǎn)有了一個全面的了解,雖然好多的細節(jié)部分還不是太了解,但是對一個進程的流向和執(zhí)行過程還是有個大概的認識,所以這個大型作業(yè)做起來也不是那么的簡單。后來老師只要我們實現(xiàn)OS里面的一部分功能進程的控制和管理。六、個人體會經(jīng)過快一個月的時間來弄這個大型作業(yè)。如果Need[i,j]=K,則表示進程I還需要RJ類資源K個,方能完成其任務。④矩陣Need。這也是一個N*M的矩陣,它定義了系統(tǒng)中每一類資源當前已分配給每一進程的資源數(shù)。如果MAX[i,j]=K,則表示進程I需要RJ類資源的最大數(shù)目為K。②需求矩陣MAX。這是一個含有m個元素的數(shù)組,其中的每一個元素代表一類可利用的資源數(shù)目,其初始值是系統(tǒng)中所配置的該類全部可用資源的數(shù)目,其數(shù)值隨該類資源的分配和回收而動態(tài)地改變。其執(zhí)行流程如圖所示,偽代碼如圖所示。若緩沖區(qū)內(nèi)有“空”存儲單元,生產(chǎn)者需要判斷此時是否有別的生產(chǎn)者或消費者正在使用緩沖區(qū),若是有,則阻塞等待,否則,獲得緩沖區(qū)的使用權(quán),將數(shù)據(jù)存入緩沖區(qū),釋放緩沖區(qū)的使用權(quán)。其次,生產(chǎn)者不能向滿的緩沖區(qū)寫
點擊復制文檔內(nèi)容
規(guī)章制度相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1