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

正文內(nèi)容

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

2024-10-02 12:14 本頁面
 

【文章內(nèi)容簡介】 j≤ n), i≠ j, s( 1≤ s≤ m), t( 1≤ t ≤ m), s≠ t,盡管 ProducerI 和 ProducerJ 之間、 ConsumerS 和 ConsumerT 之間、 ProducerI 和 ConsumerS 之間不存在針對(duì)緩沖區(qū)的互斥關(guān)系 ,但由于 ProducerI、 ProducerJ、 ConsumerS 和ConsumerT 都需要在操作緩沖區(qū)的同時(shí)對(duì)緩沖區(qū)隊(duì)列進(jìn)行維護(hù),緩沖區(qū)隊(duì)列成為所有進(jìn)程間的新的臨界資源,因此 ProducerI 和 ProducerJ 之間、 ConsumerS 和 ConsumerT 之間、ProducerI 和 ConsumerS 之間出現(xiàn)了針對(duì)緩沖區(qū)隊(duì)列的互斥關(guān)系。 以上這四種情形是逐個(gè)包含關(guān)系,所以我們只要設(shè)計(jì)出能完成第四種條件下的生產(chǎn)者 消費(fèi)者模擬系統(tǒng)。 浙江林學(xué)院天目學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 7 2 系統(tǒng)需求分析 任務(wù)概述 目標(biāo) 學(xué)生通過該演示系統(tǒng)能形象的看到進(jìn)程的調(diào)度 ,以便能更加透徹的理解操作系統(tǒng)中消費(fèi)者 生產(chǎn)者的同步互斥問題。 運(yùn)行環(huán)境 操作系統(tǒng): WINDOWS 98/2020/XP。 編程工具 編程工具 : microsoft visual c++。 Visual C++是一個(gè)功能強(qiáng)大的可視化軟件開發(fā)工具。自 1993年 Microsoft公司推出Visual C++,隨著其新版本的不斷問世, Visual C++已成為專業(yè)程序員進(jìn)行軟件開發(fā)的首選工具。 Visual C++ C++編譯器,而且是一個(gè)基于 Windows操作系統(tǒng)的可視化集成開發(fā)環(huán)境( integrated development environment,IDE)。 Visual C++件組成,包括編輯器、調(diào)試器以及程序向?qū)?AppWizard、類向?qū)?Class Wizard等開發(fā)工具。 這些組件通過一個(gè)名為 Developer Studio的組件集成為和諧的開發(fā)環(huán)境。 演示系統(tǒng)的分析 功能需求分析 1. 操作系統(tǒng)進(jìn)程管理演示系統(tǒng)是 采用動(dòng)畫和交互的方式對(duì) 生產(chǎn)者 消費(fèi)者 問題 進(jìn)行演示、教學(xué) 。 2. 學(xué)生可以輸入生產(chǎn)者,消費(fèi)者的數(shù)量 來進(jìn)行不同情形的 的演示。 系統(tǒng)功能模塊劃分 系統(tǒng)已經(jīng)設(shè)定一個(gè)大小固定的緩沖池 (緩沖池大小 11) ,緩沖池可以實(shí)時(shí)的顯示生產(chǎn)者生產(chǎn)情況和消費(fèi)者的消費(fèi)情況,同時(shí) 用戶可以設(shè)定生產(chǎn)者的數(shù)目來進(jìn)行生產(chǎn) (生產(chǎn)者數(shù)目110);設(shè)定消費(fèi)者的數(shù)目來進(jìn)行消費(fèi)(消費(fèi)者數(shù)目 110) ,由此系統(tǒng)可以模擬上面所描述的四種 生產(chǎn)者 消費(fèi)者模型 ,同時(shí)用戶可以實(shí)時(shí)的停止生產(chǎn)者及消費(fèi)者的動(dòng)作,做到分步展示的效果, 有效率的 起到教學(xué) 的作用。 浙江林學(xué)院天目學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 8 系統(tǒng)流程分析 P,V原語 是操作系統(tǒng)中定義的 ,通過對(duì)信號(hào)量控制從而實(shí)現(xiàn)進(jìn)程間同步的最基本操作。采用 P、 V 原語解決生產(chǎn)者 消費(fèi)者問題的算法 描述 [4]。 采用 P、 V 原語解決生產(chǎn)者 / 消費(fèi)者問題的算法如下 : (1)信號(hào)量和互斥量的設(shè)置 :設(shè)代表緩沖池中空白緩沖區(qū)和滿緩沖區(qū)的信號(hào)量分別為Empty 和 Full ,Empty 和 Full 的初值分別為 n (緩沖池中緩沖區(qū)數(shù) ) 和 0 。設(shè)兩個(gè)互斥 量MuxProducer 和 MuxCustomer ,它們的初值都為 1。 (2) 生產(chǎn)者算法 :采集生成 數(shù) 據(jù) 。 P( Empty) 申請(qǐng)一個(gè)空白緩沖 ; P (MuxPro2ducer)申請(qǐng)對(duì)空白緩沖資源獨(dú)占使用 ; 找出一空白緩沖區(qū) ,把數(shù)據(jù)拷貝到緩沖區(qū) 。V(MuxPro2ducer)釋放對(duì)空白緩沖資源獨(dú)占使用 ; V(Full)產(chǎn)生一個(gè)滿緩沖區(qū) 。 消費(fèi)者算法 :做好接收準(zhǔn)備 。P( Full)申請(qǐng)一個(gè)滿緩沖 ; P(MuxCustomer)申請(qǐng)對(duì)滿緩沖資源獨(dú)占使用 。 找出一滿緩沖區(qū) 。把滿緩沖區(qū)中數(shù)據(jù)拷貝到用戶數(shù)據(jù)區(qū) 。 V (MuxCustomer) 釋放對(duì)滿緩沖資源獨(dú)占使用 ; V(Empty)產(chǎn)生一個(gè)空白緩沖區(qū)進(jìn)行數(shù)據(jù)處理。 圖 P操作流程圖 入 口 sem=sem1 sem=sem1 S=0 喚醒等待隊(duì)列中的一個(gè)進(jìn)程式 返回或轉(zhuǎn)進(jìn)程調(diào)度 返回 否 是 浙江林學(xué)院天目學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 9 圖 V操作流程圖 WINDOWS 系統(tǒng)中的具體實(shí)現(xiàn)方法 在 WINDOWS 系統(tǒng)中 ,實(shí)現(xiàn)內(nèi)存共享的辦法可以采用共享變量 [5] 和共享內(nèi)存文件 [6] 等方 法。為了通用性 ,采用了以上兩種方法的結(jié)合 ,并把生產(chǎn)者和消費(fèi)者中的加入數(shù)據(jù)到緩沖區(qū)和從緩沖區(qū)中取出數(shù)據(jù)的過程封裝到一個(gè) DLL 中 [7] ,這樣 ,可以大大方便應(yīng)用程序的編制 ,也使進(jìn)行應(yīng)用程序設(shè)計(jì)的人員不必關(guān)心該問題中具體實(shí)現(xiàn)過程。用戶程序中只需要調(diào)用該 DLL 的函數(shù)就可以實(shí)現(xiàn)所需功能 ,而且由于這些函數(shù)是在 DLL 中 ,它們?cè)趦?nèi)存中只有一個(gè)副本 ,這對(duì)當(dāng)生產(chǎn)者和消費(fèi)者群體數(shù)目較大時(shí)對(duì)內(nèi)存空間的節(jié)省也是很可觀的。 入 口 sem=sem1 sem=sem1 S=0 喚醒等待隊(duì)列中的一個(gè)進(jìn)程式 返回或轉(zhuǎn)進(jìn)程調(diào)度 返回 否 是 浙江林學(xué)院天目學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 10 3 系統(tǒng)實(shí)現(xiàn) 程序結(jié)構(gòu) 程序分為一個(gè)主函數(shù)、分別用于模擬消費(fèi)和生產(chǎn)者的兩個(gè)函數(shù)以及三個(gè)輔助性的函數(shù)。主函數(shù)用于初始化緩沖區(qū)和各個(gè)同步對(duì)象,并完成線程信息的讀入和記錄,最后根據(jù)該組線程記錄啟動(dòng)模擬 線程,并等待所有線程的運(yùn)行結(jié)束后退出整個(gè)程序。消費(fèi)者和生產(chǎn)者函數(shù)運(yùn)行于相應(yīng)線程中完成對(duì)緩沖區(qū)的讀寫動(dòng)作,根據(jù)此處生產(chǎn)消費(fèi)模型的特點(diǎn),生產(chǎn)者和消費(fèi)者線程之間通過同步對(duì)象的使用實(shí)現(xiàn)了生產(chǎn)和消費(fèi)動(dòng)作的同步與互 斥,是本系統(tǒng) 的核心所在。另外三個(gè)輔助函數(shù)被生產(chǎn)者和消費(fèi)者函數(shù)調(diào)用,是上述生產(chǎn)和消費(fèi)函數(shù)中對(duì)緩沖區(qū)訪問功能的一些包裝。 生產(chǎn)者 模擬函數(shù)代碼 int CProducerThread::Run() { CPCDlg *pDlg。 pDlg=(CPCDlg*)thism_Parent。 int temp=0。 int t=0。 while(pDlgm_continue){ DWORD temp=WaitForMultipleObjects(SIZE_OF_BUFFER,pDlgm_hEmptySemaphore,FALSE,INFINITE)。 pDlgm_PArray[temp]=1。 pDlgm_PStr[temp]=thism_name。 pDlgInvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,200))。 srand( (unsigned)time( NULL ) )。 t=rand()%5。 t+=1。 Sleep(t*750+500)。 pDlgm_Array[temp]=1。 pDlgm_PArray[temp]=0。 浙江林學(xué)院天目學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 11 pDlgm_PStr[temp]=。 pDlgInvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,200))。 srand( (unsigned)time( NULL ) )。 t=rand()%10。 t+=10。 ReleaseSemaphore(pDlgm_hFullSemaphore[temp],1,NULL)。 Sleep(t*100)。 } thisExitInstance()。 return CWinThread::Run()。 } 消費(fèi)者模擬函數(shù)代碼 int CConsumerThread::Run() { // TODO: Add your specialized code here and/or call the base class CPCDlg *pDlg。 pDlg=(CPCDlg*)thism_Parent。 int temp=0。 int t=0。 CString str。 while(pDlgm_continue){ DWORD temp=WaitForMultipleObjects(SIZE_OF_BUFFER,pDlgm_hFullSemaphore,FALSE,INFINITE)。 pDlgm_CArray[temp]=1。 pDlgm_CStr[temp]=thism_name。 pDlgInvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,200))。 srand( (unsigned)time( NULL ) )。 t=rand()%5。 浙江林學(xué)院天目學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 12 t+=1。 Sleep(t*750+500)。 pDlgm_Array[temp]=0。 pDlgm_CArray[temp]=0。 pDlgm_CStr[temp]=。 pDlgInvalidateRect(CRect(17+temp*40,17,20+(temp+1)*40,200))。 srand( (unsigned)time( NULL ) )。 t=rand()%10。 t+=10。 ReleaseSemaphore(pDlgm_hEmptySemaphore[temp],1,NULL)。 Sleep(t*100)。 } thisExitInstance()。 return CWinThread::Run()。 } MFC 界面的設(shè)計(jì) MFC 的介紹 MFC (Microsoft Foundation Class Library)中的各種類結(jié)合起來構(gòu)成了一個(gè)應(yīng)用程序框架,它的目的就是讓程序員在此基礎(chǔ)上來建立 Windows下的應(yīng)用程序,這是一種相對(duì) SDK來說更為簡單的方法。因?yàn)榭傮w上, MFC框架定義了應(yīng)用程序的輪廓,并提供了用戶接口的標(biāo)準(zhǔn)實(shí)現(xiàn)方法,程序員所要做的就是通過預(yù)定義的接口把具體應(yīng)用程序特有的東西填入這個(gè)輪廓。 Microsoft Visual C++提供了相應(yīng)的工具來完成這個(gè)工作: AppWizard可以 用來生成初步的框架文件(代碼和資源等);資源編輯器用于幫助直觀地設(shè)計(jì)用戶接口; ClassWizard用來協(xié)助添加代碼到框架文件;最后,編譯,則通過類庫實(shí)現(xiàn)了應(yīng)用程序特定的邏輯。 1. 封裝 構(gòu)成 MFC框架的是 MFC 類庫。 MFC 類庫是 C++類庫。這些類或者封裝了 Win32 應(yīng)用程序編程接口,或者封裝了應(yīng)用程序的概念,或者封裝了 OLE 特性,或者封裝了 ODBC 和DAO 數(shù)據(jù)訪問的功能,等等,分述如下。 ( 1)對(duì) Win32 應(yīng)用程序編程接口的封裝 用一個(gè) C++ Object來包裝一個(gè) Windows Object。例如: class CWnd是一個(gè) C++ window object,浙江林學(xué)院天目學(xué)院本科生畢業(yè)設(shè)計(jì)(論文) 13 它把 Windows window(HWND)和 Windows window 有關(guān)的 API 函數(shù)封裝在 C++ 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 的根類,絕大多
點(diǎn)擊復(fù)制文檔內(nèi)容
醫(yī)療健康相關(guān)推薦
文庫吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1