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

正文內(nèi)容

操作系統(tǒng)進(jìn)程管理演示系統(tǒng)開發(fā)生產(chǎn)者-消費(fèi)者畢業(yè)論文(編輯修改稿)

2025-07-25 10:03 本頁面
 

【文章內(nèi)容簡介】 window object的成員函數(shù)內(nèi),后者的成員變量m_hWnd就是前者的窗口句柄。(2)對(duì)應(yīng)用程序概念的封裝使用SDK編寫Windows應(yīng)用程序時(shí),總要定義窗口過程,登記Windows Class,創(chuàng)建窗口,等等。MFC把許多類似的處理封裝起來,替程序員完成這些工作。另外,MFC提出了以文檔視圖為中心的編程模式,MFC類庫封裝了對(duì)它的支持。文檔是用戶操作的數(shù)據(jù)對(duì)象,視圖是數(shù)據(jù)操作的窗口,用戶通過它處理、查看數(shù)據(jù)。(3)對(duì)COM/OLE特性的封裝OLE建立在COM模型之上,由于支持OLE的應(yīng)用程序必須實(shí)現(xiàn)一系列的接口(Interface),因而相當(dāng)繁瑣。MFC的OLE類封裝了OLE API大量的復(fù)雜工作,這些類提供了實(shí)現(xiàn)OLE的更高級(jí)接口。(4)對(duì)ODBC功能的封裝以少量的能提供與ODBC之間更高級(jí)接口的C++類,封裝了ODBC API的大量的復(fù)雜的工作,提供了一種數(shù)據(jù)庫編程模式。2.繼承 首先,MFC抽象出眾多類的共同特性,設(shè)計(jì)出一些基類作為實(shí)現(xiàn)其他類的基礎(chǔ)。這些類中,最重要的類是CObject和CCmdTarget。CObject是MFC的根類,絕大多數(shù)MFC類是其派生的,包括CCmdTarget。CObject 實(shí)現(xiàn)了一些重要的特性,包括動(dòng)態(tài)類信息、動(dòng)態(tài)創(chuàng)建、對(duì)象序列化、對(duì)程序調(diào)試的支持,等等。所有從CObject派生的類都將具備或者可以具備CObject所擁有的特性。CCmdTarget通過封裝一些屬性和方法,提供了消息處理的架構(gòu)。MFC中,任何可以處理消息的類都從CCmdTarget派生。針對(duì)每種不同的對(duì)象,MFC都設(shè)計(jì)了一組類對(duì)這些對(duì)象進(jìn)行封裝,每一組類都有一個(gè)基類,從基類派生出眾多更具體的類。這些對(duì)象包括以下種類:窗口對(duì)象,基類是CWnd;應(yīng)用程序?qū)ο螅愂荂winThread;文檔對(duì)象,基類是Cdocument,等等。程序員將結(jié)合自己的實(shí)際,從適當(dāng)?shù)腗FC類中派生出自己的類,實(shí)現(xiàn)特定的功能,達(dá)到自己的編程目的。3.虛擬函數(shù)和動(dòng)態(tài)約束 MFC以“C++”為基礎(chǔ),自然支持虛擬函數(shù)和動(dòng)態(tài)約束。但是作為一個(gè)編程框架,有一個(gè)問題必須解決:如果僅僅通過虛擬函數(shù)來支持動(dòng)態(tài)約束,必然導(dǎo)致虛擬函數(shù)表過于臃腫,消耗內(nèi)存,效率低下。例如,CWnd封裝 Windows窗口對(duì)象時(shí),每一條Windows消息對(duì)應(yīng)一個(gè)成員函數(shù),這些成員函數(shù)為派生類所繼承。如果這些函數(shù)都設(shè)計(jì)成虛擬函數(shù),由于數(shù)量太多,實(shí)現(xiàn)起來不現(xiàn)實(shí)。于是,MFC建立了消息映射機(jī)制,以一種富有效率、便于使用的手段解決消息處理函數(shù)的動(dòng)態(tài)約束問題。這樣,通過虛擬函數(shù)和消息映射,MFC類提供了豐富的編程接口。程序員繼承基類的同時(shí),把自己實(shí)現(xiàn)的虛擬函數(shù)和消息處理函數(shù)嵌入MFC的編程框架。MFC編程框架將在適當(dāng)?shù)臅r(shí)候、適當(dāng)?shù)牡胤絹碚{(diào)用程序的代碼。本書將充分的展示MFC調(diào)用虛擬函數(shù)和消息處理函數(shù)的內(nèi)幕,讓讀者對(duì)MFC的編程接口有清晰的理解。4.MFC的宏觀框架體系 如前所述,MFC實(shí)現(xiàn)了對(duì)應(yīng)用程序概念的封裝,把類、類的繼承、動(dòng)態(tài)約束、類的關(guān)系和相互作用等封裝起來。這樣封裝的結(jié)果對(duì)程序員來說,是一套開發(fā)模板(或者說模式)。針對(duì)不同的應(yīng)用和目的,程序員采用不同的模板。例如,SDI應(yīng)用程序的模板,MDI應(yīng)用程序的模板,規(guī)則DLL應(yīng)用程序的模板,擴(kuò)展DLL應(yīng)用程序的模板,OLE/ACTIVEX應(yīng)用程序的模板,等等。為了支持對(duì)應(yīng)用程序概念的封裝,MFC內(nèi)部必須作大量的工作。例如,為了實(shí)現(xiàn)消息映射機(jī)制,MFC編程框架必須要保證首先得到消息,然后按既定的方法進(jìn)行處理。又如,為了實(shí)現(xiàn)對(duì)DLL編程的支持和多線程編程的支持,MFC內(nèi)部使用了特別的處理方法,使用模塊狀態(tài)、線程狀態(tài)等來管理一些重要信息。雖然,這些內(nèi)部處理對(duì)程序員來說是透明的,但是,懂得和理解MFC內(nèi)部機(jī)制有助于寫出功能靈活而強(qiáng)大的程序??傊琈FC封裝了Win32 API,OLE API,ODBC API等底層函數(shù)的功能,并提供更高一層的接口,簡化了Windows編程。同時(shí),MFC支持對(duì)底層API的直接調(diào)用。MFC提供了一個(gè)Windows應(yīng)用程序開發(fā)模式,對(duì)程序的控制主要是由MFC框架完成的,而且MFC也完成了大部分的功能,預(yù)定義或?qū)崿F(xiàn)了許多事件和消息處理,等等??蚣芑蛘哂善浔旧硖幚硎录灰蕾嚦绦騿T的代碼;或者調(diào)用程序員的代碼來處理應(yīng)用程序特定的事件。MFC是C++類庫,程序員就是通過使用、繼承和擴(kuò)展適當(dāng)?shù)念悂韺?shí)現(xiàn)特定的目的。例如,繼承時(shí),應(yīng)用程序特定的事件由程序員的派生類來處理,不感興趣的由基類處理。實(shí)現(xiàn)這種功能的基礎(chǔ)是C++對(duì)繼承的支持,對(duì)虛擬函數(shù)的支持,以及MFC實(shí)現(xiàn)的消息映射機(jī)制[13]。 MFC界面效果這是系統(tǒng)界面設(shè)計(jì)的截圖: MFC界面界面上有2個(gè)靜態(tài)文本,2個(gè)編輯框和7個(gè)按紐組成:1. 啟動(dòng)生產(chǎn)者按紐的代碼:void CPCDlg::OnPstar() { UpdateData(true)。 thism_continue=true。 thisSetTimer(100,1000,NULL)。 if( thism_np0amp。amp。thism_np11) { (false)。 CString str。 for( unsigned i=0。 ithism_np。i++) { (P%d,i)。 thism_PT[i] =new CProducerThread(this,str)。 thism_PT[i]CreateThread(CREATE_SUSPENDED)。 VERIFY(thism_PT[i]SetThreadPriority(THREAD_PRIORITY_IDLE))。 thism_PT[i]ResumeThread()。 } } else MessageBox(生產(chǎn)者數(shù)目必須在110之間,出錯(cuò)了)。}2. 啟動(dòng)消費(fèi)者按紐的代碼:void CPCDlg::OnStartc() { UpdateData(true)。 thism_continue=true。 if( thism_nc0amp。amp。thism_nc11) { (false)。 CString str。 for( unsigned i=0。 ithism_nc。i++) { (C%d,i)。 thism_CT[i] =new CConsumerThread(this,str)。 thism_CT[i]CreateThread(CREATE_SUSPENDED)。 VERIFY(thism_CT[i]SetThreadPriority(THREAD_PRIORITY_IDLE))。 thism_CT[i]ResumeThread()。 } } else MessageBox(消費(fèi)者數(shù)目必須在110之間,出錯(cuò)了)。 }3. 初始狀態(tài)按紐的代碼:void CPCDlg::OnRefresh() { // TODO: Add your control notification handler code here m_continue=false。 for( int i=0。iSIZE_OF_BUFFER。i++) { m_hFullSemaphore[i]=CreateSemaphore(NULL,0,1,NULL)。 m_hEmptySemaphore[i]=CreateSemaphore(NULL,1,1,NULL)。 m_Array[i]=0。 m_CArray[i]=0。 m_PArray[i]=0。 m_CStr[i]=。 m_PStr[i]=。 } Invalidate()。 (true)。 (true)。}4. 退出按紐的代碼:void CPCDlg::OnExit() { EndDialog(0)。} 系統(tǒng)功能的實(shí)現(xiàn)程序中共有6 個(gè)線程, 兩個(gè)生產(chǎn)者線程, 兩個(gè)消費(fèi)者線程,另外兩個(gè)線程則根據(jù)相同概率改變身份來模擬生產(chǎn)者或者消費(fèi)者, 以便構(gòu)建任意多個(gè)生產(chǎn)者 消費(fèi)者的可視化環(huán)境。為方便觀察生產(chǎn)和消費(fèi)進(jìn)展情況, 設(shè)置了兩個(gè)時(shí)間控制變量控制生產(chǎn)者和消費(fèi)者的生產(chǎn)和消費(fèi)周期( 即: 線程的run 方法) , 它們是用兩個(gè)文本輸入框分別實(shí)現(xiàn)數(shù)據(jù)輸入的。生產(chǎn)者和消費(fèi)者問題需要的界面效果是, 生產(chǎn)者在消費(fèi)者前面不停地生產(chǎn), 而消費(fèi)者則在生產(chǎn)者后面不停的消費(fèi), 呈現(xiàn)追趕的態(tài)勢(shì)。但是不能約定推進(jìn)順序和速度。因此, 用了11個(gè)正方形方框代表11個(gè)緩沖區(qū) 。生產(chǎn)者放一個(gè)產(chǎn)品, 就在生產(chǎn)者當(dāng)前指針位置的方框用紅色填充, 指針順時(shí)針前進(jìn)一格, 指向下一個(gè)可以放產(chǎn)品的緩沖區(qū)。 如果當(dāng)前沒有空緩沖區(qū)位置可以放貨, 就進(jìn)入等待狀態(tài), 等待消費(fèi)者消費(fèi)并讓出監(jiān)控器。以后當(dāng)消費(fèi)者消費(fèi)后喚醒它。消費(fèi)者則在生產(chǎn)者后面, 消費(fèi)掉消費(fèi)者指針當(dāng)前位置緩沖區(qū)內(nèi)的產(chǎn)品, 方框重新改變?yōu)榘咨?然后消費(fèi)者指針也順時(shí)針前進(jìn)一格, 指向下一個(gè)存放了產(chǎn)品的緩沖區(qū)。 如果當(dāng)前沒有產(chǎn)品可以消費(fèi), 則等待生產(chǎn)者放產(chǎn)品并讓出監(jiān)控器, 當(dāng)生產(chǎn)者放了貨物后喚醒它[14]。 4 系統(tǒng)演示 系統(tǒng)演示的準(zhǔn)備 為了驗(yàn)證上述生產(chǎn)者消費(fèi)者問題實(shí)現(xiàn)方案的正確性,系統(tǒng)將演示模擬效果。由于系統(tǒng)緩沖區(qū)的大小已經(jīng)設(shè)定,所以我們將演示下面兩種情況的模擬效果。1. 單生產(chǎn)者單消費(fèi)者問題模型。2. 多生產(chǎn)者多消費(fèi)者問題模型。 系統(tǒng)演示的效果 單生產(chǎn)者單消費(fèi)者模擬效果首先設(shè)定緩沖區(qū)全紅,既緩沖區(qū)為滿的情況。此類問題較簡單,對(duì)于生產(chǎn)者進(jìn)程,他的活動(dòng)過程如下:首先判斷該單緩沖區(qū)是否為空,如果不是,則生產(chǎn)者進(jìn)程自我阻塞。反之,生產(chǎn)者就可以把生產(chǎn)出來的數(shù)據(jù)放入該緩沖區(qū)塊中,然后判斷當(dāng)前阻塞隊(duì)列中是否有消費(fèi)者進(jìn)程阻塞,如果有則將其喚醒。消費(fèi)者進(jìn)程的活動(dòng)為:先判斷該單緩沖區(qū)中是否有數(shù)據(jù)(即是否滿) ,如果沒有,那么它就自我阻塞。反之,消費(fèi)者從該緩沖區(qū)塊中取出數(shù)據(jù)消費(fèi),然后再判斷阻塞隊(duì)列中是否有生產(chǎn)者進(jìn)程需要被喚醒。 當(dāng)消費(fèi)者C0消費(fèi)掉第一個(gè)緩沖區(qū)后,生產(chǎn)者P0產(chǎn)品進(jìn)入第一個(gè)緩沖區(qū), 生產(chǎn)者產(chǎn)品進(jìn)入緩沖區(qū) 多生產(chǎn)者多消費(fèi)者模擬效果上面分析了較簡單的單緩沖區(qū)的情形,但是在實(shí)際的問題中,更一般的情況是在生產(chǎn)者和消費(fèi)者之間存在多個(gè)緩沖區(qū),生產(chǎn)者可以將生產(chǎn)出來的數(shù)據(jù)放入緩沖區(qū)的不同緩沖區(qū)塊中,只要該緩沖區(qū)塊空閑。消費(fèi)者也可以從緩沖區(qū)中已存有數(shù)據(jù)的緩沖區(qū)塊中取數(shù)消費(fèi)。但要注意,不論是生產(chǎn)者之間,消費(fèi)者之間,還是生產(chǎn)者與消費(fèi)者之間,他們對(duì)于臨界資源──緩沖區(qū)的訪問必須是互斥的,也就是說,在1個(gè)生產(chǎn)者或消費(fèi)者線程訪問完該緩沖區(qū)之前,是決不允許其它的生產(chǎn)者或消費(fèi)者線程訪問的。這就是基于多緩沖區(qū)的生產(chǎn)者與消費(fèi)者問題。再多生產(chǎn)者多消費(fèi)者模擬演示時(shí)設(shè)置生產(chǎn)者數(shù)目為3,而消費(fèi)者數(shù)目為4,這樣更有利于觀察系統(tǒng)模擬的準(zhǔn)確性。圖 3個(gè)生產(chǎn)者生產(chǎn)情況 4個(gè)消費(fèi)者消費(fèi)的4個(gè)緩沖池內(nèi)的產(chǎn)品 系統(tǒng)演示結(jié)論單生產(chǎn)者單消費(fèi)者模擬:從結(jié)果可以看出,生產(chǎn)者和消費(fèi)者線程是在并發(fā)的執(zhí)行。在單緩沖區(qū)中沒有數(shù)據(jù)的情況下,如果有消費(fèi)者到達(dá),這時(shí)該消費(fèi)者阻塞。只有當(dāng)生產(chǎn)者將數(shù)據(jù)放入單緩沖區(qū)后,才可以喚醒1個(gè)消費(fèi)者取數(shù)消費(fèi)。如果已經(jīng)有生產(chǎn)者將數(shù)據(jù)放入了單緩沖區(qū)中,這時(shí)其它的生產(chǎn)者只能阻塞,直到有消費(fèi)者將數(shù)據(jù)提走后才允許某一個(gè)生產(chǎn)者放數(shù)[17]。多生產(chǎn)者多消費(fèi)者模擬:當(dāng)循環(huán)緩沖區(qū)隊(duì)列空時(shí),消費(fèi)者線程阻塞。 當(dāng)循環(huán)緩沖區(qū)滿時(shí),生產(chǎn)者線程阻塞。當(dāng)有1個(gè)生產(chǎn)者線程往循環(huán)緩沖區(qū)中放了數(shù)據(jù)后,它會(huì)查看阻塞隊(duì)列中是否有消費(fèi)者線程需要被喚醒。同樣,當(dāng)有1個(gè)消費(fèi)者線程從循環(huán)緩沖區(qū)中取走1個(gè)數(shù)據(jù)后,它會(huì)喚醒阻塞著的生產(chǎn)者線程。系統(tǒng)準(zhǔn)確的模擬了在多緩沖區(qū)下的單生產(chǎn)者單消費(fèi)者及多生產(chǎn)者多消費(fèi)者問題的模擬情況,停止按紐的功能讓模擬系統(tǒng)實(shí)時(shí)的反映生產(chǎn)者消費(fèi)者模擬的情況,實(shí)現(xiàn)了教學(xué)演示的要求。5 總結(jié)本文從P,V操作實(shí)現(xiàn)進(jìn)程同步與互斥出發(fā),研究了操作系統(tǒng)中經(jīng)典的同步問題生產(chǎn)者消費(fèi)者問題,提出了解決此問題的模型及解決方案,并設(shè)計(jì)了基于microsoft visual c++而開發(fā),在WINDOWS 98/2000/XP上運(yùn)行的操作系統(tǒng)進(jìn)程管理演示系統(tǒng)(生產(chǎn)者消費(fèi)者)。通過可視化設(shè)計(jì),使我們很快地就理解并掌握了操作系統(tǒng)中生產(chǎn)者消費(fèi)者進(jìn)程調(diào)度的原理及算法,并通過設(shè)計(jì)驗(yàn)證了進(jìn)程調(diào)度;同時(shí),在設(shè)計(jì)中,我的程序設(shè)計(jì)能力大大提高了,鞏固了數(shù)據(jù)結(jié)構(gòu)、計(jì)算機(jī)算法等知識(shí)。在計(jì)算機(jī)專業(yè)教學(xué)中,可視化設(shè)計(jì)將會(huì)用得越來越多,效果將會(huì)越來越明顯,將是計(jì)算機(jī)教學(xué)發(fā)展的主要方向之一。 參考文獻(xiàn) [1] 楊貴和. 操作系統(tǒng)課中進(jìn)程調(diào)度的可視化設(shè)計(jì)[J]. 中國科教創(chuàng)新導(dǎo)刊, 2007,07[2] 謝印寶,田愛奎,謝印智. 關(guān)于操作系統(tǒng)生產(chǎn)者消費(fèi)者問題[J]. 淄博學(xué)院學(xué)報(bào)(自然科學(xué)與工程版),2001,03[3] 宋新麗,何永強(qiáng). 用信號(hào)量機(jī)制與PV 操作解決進(jìn)程同步互斥問題的方法[J]. 河南紡織高等專科學(xué)校學(xué)報(bào),2005[4] 張賢達(dá). 現(xiàn)代信號(hào)處理(第二版)[M].北京:清華大學(xué)出版社,2002.[5] 胡小龍,等. Windows 操作系統(tǒng)進(jìn)程通信機(jī)制[J].計(jì)算機(jī)應(yīng)用研究,2002 ,19
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1