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

正文內(nèi)容

操作系統(tǒng)進程管理演示系統(tǒng)開發(fā)畢業(yè)論文-在線瀏覽

2024-08-08 09:52本頁面
  

【正文】 理論,而絕大多數(shù)學(xué)習(xí)者一生都不可能參于操作系統(tǒng)的研究工作,他們需要的是對理論的理解和對實用系統(tǒng)的靈活應(yīng)用。生產(chǎn)者消費者問題是經(jīng)典同步問題之一,不但在操作系統(tǒng)中很重要, 而且在分布式應(yīng)用開發(fā)、實時數(shù)據(jù)庫管理系統(tǒng)、CIMS 網(wǎng)絡(luò)工程中都會遇到。在現(xiàn)代操作系統(tǒng)UNIX、Windows 多進程環(huán)境下,我們將利用C語言實現(xiàn)多個生產(chǎn)者消費者可視化同步運行。對于學(xué)習(xí)者來說, 進程的同步與互斥問題是個令人頭痛的問題, 尤其是進程同步與互斥算法的實現(xiàn), 更讓人往往不知如何下手。在操作系統(tǒng)教學(xué)過程中,因為部分教科書中對生產(chǎn)者和消費者問題的解釋不夠全面,學(xué)生在理解應(yīng)用過程中經(jīng)常出現(xiàn)一些問題。 開發(fā)系統(tǒng)的意義采用信號量機制與PV操作來協(xié)調(diào)進程的同步, 一直是操作系統(tǒng)教學(xué)中的一個難點問題, 而且由它引出的一系列問題, 如: 生產(chǎn)者與消費者、讀者與寫者、哲學(xué)家進餐、理發(fā)師等問題都是很典型的進程同步與互斥問題?!斑M程調(diào)度”涉及到操作系統(tǒng)的內(nèi)核操作,原理性較強,也較為抽象,如只是依靠書本的文字和圖形,學(xué)生理解起來會很吃力。操作系統(tǒng)進程管理演示系統(tǒng)(生產(chǎn)者消費者)可以可視化的向?qū)W生展示進程調(diào)度,便于教學(xué)工作,提高學(xué)生的學(xué)習(xí)效率。P,V操作主要通過對信號量的操作來實現(xiàn)對資源的控制, 從而控制進程的執(zhí)行。P 操作相當(dāng)于申請資源, 進程在使用資源之前, 應(yīng)先調(diào)用操作申請所須資源, 若資源申請被滿足, 則進程可以繼續(xù)執(zhí)行, 否則進程將調(diào)用阻塞原語阻塞自己。V 操作相當(dāng)于釋放資源, 進程在使用所申請的資源后,應(yīng)調(diào)用V操作釋放所占用的資源。V(S)的執(zhí)行過程如下:①S=S+1; ②若 S0, 則進程繼續(xù)執(zhí)行;③若S≤0, 則調(diào)用喚醒原語喚醒等待該資源的進程, 原進程繼續(xù)執(zhí)行。多個進程為了共同完成任務(wù), 須要按照一定的次序去執(zhí)行, 各個進程在執(zhí)行時在時間上具有明顯的先后次序, 即進程必須按照一定的順序去執(zhí)行。實現(xiàn)進程同步的關(guān)鍵在于當(dāng)一個進程執(zhí)行以后, 確定下一個將要執(zhí)行的進程, 并用V操作使該進程可以執(zhí)行。通常, 能夠最先執(zhí)行的進程中, P操作中所使用的信號量的初值大于, 而其它進程中, 第一個P操作所對應(yīng)的信號量的初值為零。 進程互斥的實現(xiàn)進程互斥是進程間由于競爭資源而產(chǎn)生的相互制約關(guān)系。競爭到資源的進程可以立即投入運行, 而沒有競爭到資源的進程只能阻塞自己以等待資源。要使多個進程不會同時訪問臨界資源, 只需要讓它們在執(zhí)行時不會同時執(zhí)行臨界區(qū)內(nèi)的代碼就可以了。 生產(chǎn)者消費者問題的描述 問題的描述設(shè)有若干個生產(chǎn)者進程P1, P2, P3,…Pl。每個緩沖區(qū)存放一個“產(chǎn)品”, 生產(chǎn)者進程不斷地生產(chǎn)產(chǎn)品, 并把它們放入緩沖池內(nèi), 消費者進程不斷地從緩沖池內(nèi)取產(chǎn)品并消費之。同步存在于p、c 兩類進程之間: 當(dāng)緩沖池已放滿了產(chǎn)品(供過于求) , 生產(chǎn)者進程必須等待?;コ獯嬖谟谒羞M程之間, 各自需要獨占地使用緩沖區(qū)。進程關(guān)系分析:同步關(guān)系:只有在Producer 向緩沖區(qū)放入物品后,Consumer 才能夠從緩沖區(qū)中取出物品消費;因此存在Consumer 對于Producer 的同步依賴?;コ怅P(guān)系:Producer 放入物品的同時,Consumer 是不能從緩沖區(qū)中取出物品的;反之亦然。2.單緩沖區(qū)的多生產(chǎn)者多消費者問題模型限制條件:整個系統(tǒng)僅有唯一的一個緩沖區(qū),活動進程有n 個生產(chǎn)者Producer 和m 個消費者Consumer。 (2)對于任意的i(1≤i≤n),j(1≤j≤m),只有在ConsumerJ從緩沖區(qū)取出物品后,ProducerI才能夠繼續(xù)向緩沖區(qū)中放入新生產(chǎn)的物品;因此存在ProducerI 對于ConsumerJ 的同步依賴。因此存在ProducerI 和ConsumerJ之間的互斥關(guān)系。因此存在ProducerI 和ProducerJ 之間的互斥關(guān)系。因此存在ConsumerI 和ConsumerJ 之間的互斥關(guān)系。進程關(guān)系分析同步關(guān)系:(1)只有在Producer 向緩沖區(qū)放入物品后,Consumer 才能夠從緩沖區(qū)中取出物品消費;因此存在Consumer 對于Producer 的同步依賴?;コ怅P(guān)系:(1)對于任意的i(1≤i≤K),j(1≤j≤K),i≠j,Producer 向空閑緩沖區(qū)Buffer[Ki]放入物品的同時,Consumer 可以從滿緩沖區(qū)Buffer[Kj]中取出物品;反之亦然。(2) 盡管Producer 和Consumer 之間不存在針對緩沖區(qū)的互斥關(guān)系,但由于Producer和Consumer 都需要在操作緩沖區(qū)的同時對緩沖區(qū)隊列進行維護,緩沖區(qū)隊列也就成為兩者間新的臨界資源,因此Producer 和Consumer 之間出現(xiàn)了針對緩沖區(qū)隊列的互斥關(guān)系。進程關(guān)系分析同步關(guān)系:(1)對于任意的i(1≤ i ≤n),j(1≤j≤m),只有在ProducerI 向緩沖區(qū)放入物品后,ConsumerJ 才能夠從緩沖區(qū)中取出物品消費;因此存在ConsumerJ 對于ProducerI 的同步依賴。互斥關(guān)系:(1)對于任意的i(1≤i≤n),j(1≤j≤m),s(1≤s≤K),t(1≤t≤K),s≠t,ProducerI 向空閑緩沖區(qū)Buffer[Ks]放入物品的同時,ConsumerJ 可以從滿緩沖區(qū)Buffer[Kt]中取出物品;反之亦然。(2)對于任意的i(1≤i≤n),j(1≤j≤n),i≠j,s(1≤s≤K),t(1≤t≤K),s≠t,ProducerI 向空閑緩沖區(qū)Buffer[Ks]放入物品的同時,ProducerJ 是可以向另一空閑緩沖區(qū)Buffer[Kt]放入物品的。(3)對于任意的i(1≤i≤m),j(1≤j≤m),i≠j,s(1≤s≤K),t(1≤t≤K),s≠t,ConsumerI 從空閑緩沖區(qū)Buffer[Ks]中取出物品的同時,ConsumerJ 是可以從另一空閑緩沖區(qū)Buffer[Kt] 中取出物品的。(4)對于任意的i(1≤i≤n),j(1≤j≤n),i≠j,s(1≤s≤m),t(1≤t≤m),s≠t,盡管ProducerI 和ProducerJ 之間、ConsumerS 和ConsumerT 之間、ProducerI 和ConsumerS 之間不存在針對緩沖區(qū)的互斥關(guān)系,但由于ProducerI、ProducerJ、ConsumerS 和ConsumerT 都需要在操作緩沖區(qū)的同時對緩沖區(qū)隊列進行維護,緩沖區(qū)隊列成為所有進程間的新的臨界資源,因此ProducerI 和ProducerJ 之間、ConsumerS 和ConsumerT 之間、ProducerI 和ConsumerS 之間出現(xiàn)了針對緩沖區(qū)隊列的互斥關(guān)系。2 系統(tǒng)需求分析 任務(wù)概述 目標(biāo)學(xué)生通過該演示系統(tǒng)能形象的看到進程的調(diào)度,以便能更加透徹的理解操作系統(tǒng)中消費者生產(chǎn)者的同步互斥問題。 編程工具編程工具:microsoft visual c++。自1993年Microsoft公司推出Visual C++,隨著其新版本的不斷問世,Visual C++已成為專業(yè)程序員進行軟件開發(fā)的首選工具。Visual C++,包括編輯器、調(diào)試器以及程序向?qū)ppWizard、類向?qū)lass Wizard等開發(fā)工具。 演示系統(tǒng)的分析 功能需求分析1. 操作系統(tǒng)進程管理演示系統(tǒng)是采用動畫和交互的方式對生產(chǎn)者消費者問題進行演示、教學(xué)。 系統(tǒng)功能模塊劃分 系統(tǒng)已經(jīng)設(shè)定一個大小固定的緩沖池(緩沖池大小11),緩沖池可以實時的顯示生產(chǎn)者生產(chǎn)情況和消費者的消費情況,同時用戶可以設(shè)定生產(chǎn)者的數(shù)目來進行生產(chǎn)(生產(chǎn)者數(shù)目110);設(shè)定消費者的數(shù)目來進行消費(消費者數(shù)目110),由此系統(tǒng)可以模擬上面所描述的四種生產(chǎn)者消費者模型,同時用戶可以實時的停止生產(chǎn)者及消費者的動作,做到分步展示的效果,有效率的起到教學(xué)的作用。采用P、V 原語解決生產(chǎn)者消費者問題的算法描述[4]。設(shè)兩個互斥量MuxProducer 和MuxCustomer ,它們的初值都為1。 P( Empty) 申請一個空白緩沖;P (MuxPro2ducer)申請對空白緩沖資源獨占使用;找出一空白緩沖區(qū),把數(shù)據(jù)拷貝到緩沖區(qū)。消費者算法:做好接收準(zhǔn)備。找出一滿緩沖區(qū)。V (MuxCustomer) 釋放對滿緩沖資源獨占使用;V(Empty)產(chǎn)生一個空白緩沖區(qū)進行數(shù)據(jù)處理。為了通用性,采用了以上兩種方法的結(jié)合,并把生產(chǎn)者和消費者中的加入數(shù)據(jù)到緩沖區(qū)和從緩沖區(qū)中取出數(shù)據(jù)的過程封裝到一個DLL 中[7] ,這樣,可以大大方便應(yīng)用程序的編制,也使進行應(yīng)用程序設(shè)計的人員不必關(guān)心該問題中具體實現(xiàn)過程。3 系統(tǒng)實現(xiàn) 程序結(jié)構(gòu)程序分為一個主函數(shù)、分別用于模擬消費和生產(chǎn)者的兩個函數(shù)以及三個輔助性的函數(shù)。消費者和生產(chǎn)者函數(shù)運行于相應(yīng)線程中完成對緩沖區(qū)的讀寫動作,根據(jù)此處生產(chǎn)消費模型的特點,生產(chǎn)者和消費者線程之間通過同步對象的使用實現(xiàn)了生產(chǎn)和消費動作的同步與互斥,是本系統(tǒng)的核心所在。 生產(chǎn)者模擬函數(shù)代碼 int CProducerThread::Run() { CPCDlg *pDlg。 int temp=0。 while(pDlgm_continue){ DWORD temp=WaitForMultipleObjects(SIZE_OF_BUFFER,pDlgm_hEmptySemaphore,FALSE,INFINITE)。 pDlgm_PStr[temp]=thism_name。 srand( (unsigned)time( NULL ) )。 t+=1。 pDlgm_Array[temp]=1。 pDlgm_PStr[temp]=。 srand( (unsigned)time( NULL ) )。 t+=10。 Sleep(t*100)。 return CWinThread::Run()。 pDlg=(CPCDlg*)thism_Parent。 int t=0。while(pDlgm_continue){ DWORD temp=WaitForMultipleObjects(SIZE_OF_BUFFER,pDlgm_hFullSemaphore,FALSE,INFINITE)。 pDlgm_CStr[temp]=thism_name。 srand( (unsigned)time( NULL ) )。 t+=1。 pDlgm_Array[temp]=0。 pDlgm_CStr[temp]=。 srand( (unsigned)time( NULL ) )。 t+=10。 Sleep(t*100)。 return CWinThread::Run()。因為總體上,MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實現(xiàn)方法,程序員所要做的就是通過預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個輪廓。1.封裝 構(gòu)成MFC框架的是MFC類庫。這些類或者封裝了Win32應(yīng)用程序編程接口,或者封裝了應(yīng)用程序的概念,或者封裝了OLE特性,或者封裝了ODBC和DAO數(shù)據(jù)訪問的功能,等等,分述如下。例如:class CWnd是一個C++ window object,它把Windows window(HWND)和Windows window有關(guān)的API函數(shù)封裝在C++ window object的成員函數(shù)內(nèi),后者的成員變量m_hWnd就是前者的窗口句柄。MFC把許多類似的處理封裝起來,替程序員完成這些工作。文檔是用戶操作的數(shù)據(jù)對象,視圖是數(shù)據(jù)操作的窗口,用戶通過它處理、查看數(shù)據(jù)。MFC的OLE類封裝了OLE API大量的復(fù)雜工作,這些類提供了實現(xiàn)OLE的更高級接口。2.繼承 首先,MFC抽象出眾多類的共同特性,設(shè)計出一些基類作為實現(xiàn)其他類的基礎(chǔ)。CObject是MFC的根類,絕大多數(shù)MFC類是其派生的,包括CCmdTarget。所有從CObject派生的類都將具備或者可以具備CObject所擁有的特性。MFC中,任何可以處理消息的類都從CCmdTarget派生。這些對象包括以下種類:窗口對象,基類是CWnd;應(yīng)用程序?qū)ο?,基類是CwinThread;文檔對象,基類是Cdocument,等等。3.虛擬函數(shù)和動態(tài)約束 MFC以“C++”為基礎(chǔ),自然支持虛擬函數(shù)和動態(tài)約束。例如,CWnd封裝 Windows窗口對象時,每一條Windows消息對應(yīng)一個成員函數(shù),這些成員函數(shù)為派生類所繼承。于是,MFC建立了消息映射機制,以一種富有效率、便于使用的手段解決消息處理函數(shù)的動態(tài)約束問題。程序員繼承基類的同時,把自己實現(xiàn)的虛擬函數(shù)和消息處理函數(shù)嵌入MFC的編程框架。本書將充分的展示MFC調(diào)用虛擬函數(shù)和消息處理函數(shù)的內(nèi)幕,讓讀者對MFC的編程接口有清晰的理解。這樣封裝的結(jié)果對程序員來說,是一套開發(fā)模板(或者說模式)。例如,SDI應(yīng)用程序的模板,MDI應(yīng)用程序的模板,規(guī)則DLL應(yīng)用程序的模板,擴展DLL應(yīng)用程序的模板,OLE/ACTIVEX應(yīng)用程序的模板,等等。例如,為了實現(xiàn)消息映射機制,MFC編程框架必須要保證首先得到消息,然后按既定的方法進行處理。雖然,這些內(nèi)部處理對程序員來說是透明的,但是,懂得和理解MFC內(nèi)部機制有助于寫出功能靈活而強大的程序。同時,MFC支持對底層API的直接調(diào)用??蚣芑蛘哂善浔旧硖幚硎录灰蕾嚦绦騿T的代碼;或者調(diào)用程序員的代碼來處理應(yīng)用程序特定的事件。例如,繼承時,應(yīng)用程序特定的事件由程序員的派生類來處理,不感興趣的由基類處理。 MFC界面效果這是系統(tǒng)界面設(shè)計的截圖: MFC界面界面上有2個靜態(tài)文本,2個編輯框和7個按紐組成:1. 啟動生產(chǎn)者按紐的代碼:void C
點擊復(fù)制文檔內(nèi)容
試題試卷相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖鄂ICP備17016276號-1