九九热最新网址,777奇米四色米奇影院在线播放,国产精品18久久久久久久久久,中文有码视频,亚洲一区在线免费观看,国产91精品在线,婷婷丁香六月天

歡迎來到裝配圖網(wǎng)! | 幫助中心 裝配圖網(wǎng)zhuangpeitu.com!
裝配圖網(wǎng)
ImageVerifierCode 換一換
首頁 裝配圖網(wǎng) > 資源分類 > DOC文檔下載  

《實驗指導(dǎo)書》word版.doc

  • 資源ID:7765689       資源大?。?span id="24d9guoke414" class="font-tahoma">197KB        全文頁數(shù):69頁
  • 資源格式: DOC        下載積分:9.9積分
快捷下載 游客一鍵下載
會員登錄下載
微信登錄下載
三方登錄下載: 微信開放平臺登錄 支付寶登錄   QQ登錄   微博登錄  
二維碼
微信掃一掃登錄
下載資源需要9.9積分
郵箱/手機(jī):
溫馨提示:
用戶名和密碼都是您填寫的郵箱或者手機(jī)號,方便查詢和重復(fù)下載(系統(tǒng)自動生成)
支付方式: 支付寶    微信支付   
驗證碼:   換一換

 
賬號:
密碼:
驗證碼:   換一換
  忘記密碼?
    
友情提示
2、PDF文件下載后,可能會被瀏覽器默認(rèn)打開,此種情況可以點擊瀏覽器菜單,保存網(wǎng)頁到桌面,就可以正常下載了。
3、本站不支持迅雷下載,請使用電腦自帶的IE瀏覽器,或者360瀏覽器、谷歌瀏覽器下載即可。
4、本站資源下載后的文檔和圖紙-無水印,預(yù)覽文檔經(jīng)過壓縮,下載后原文更清晰。
5、試題試卷類文檔,如果標(biāo)題沒有明確說明有答案則都視為沒有答案,請知曉。

《實驗指導(dǎo)書》word版.doc

操 作 系 統(tǒng)實 驗 指 導(dǎo) 書適用專業(yè): 計算機(jī)科學(xué)技術(shù) 計算機(jī)應(yīng)用 電 子 專 業(yè) 安徽建筑工業(yè)學(xué)院 電子與信息工程 學(xué)院2008 年 3 月前 言對計算機(jī)科學(xué)與技術(shù)及相關(guān)專業(yè)的學(xué)生而言,操作系統(tǒng)是一門重要的專業(yè)基礎(chǔ)課程。要學(xué)好操作系統(tǒng)的設(shè)計原理,除了聽課、看書、做習(xí)題外,最好的方法就是在實踐中進(jìn)行,包括使用操作系統(tǒng)、閱讀和分析已有操作系統(tǒng)的源代碼、自己設(shè)計小型系統(tǒng)/模塊或模擬算法等。從個人的角度而言,如果能夠完成MINUX源代碼的閱讀與分析,這將對掌握操作系統(tǒng)的原理與設(shè)計方法不無益處。這里,我沒有向大家推薦Linux或者FreeBSD之類的操作系統(tǒng)(雖然我從1997年就一直向?qū)W生推薦FreeBSD),是因為這里的閱讀源代碼的目標(biāo)是為了掌握操作系統(tǒng)的原理。孟子曰:“富貴不能淫,貧賤不能移,威武不能屈,此之謂大丈夫?!蔽业睦斫?,即使不能夠按照孟老夫子的話去做大丈夫,如果能夠做到“時髦不能跟”,也就可以做真正的自己了。對我們課程的學(xué)習(xí),也就是這個道理吧。對操作系統(tǒng)的實踐,教學(xué)計劃安排了8個課時的實驗時間,這很不夠,希望大家能夠?qū)ψ约汉菀稽c,創(chuàng)造自己進(jìn)行的操作系統(tǒng)實踐的環(huán)境與機(jī)會。操作系統(tǒng)實踐,按深度可分為使用級、觀察級、系統(tǒng)管理級、源碼閱讀級和實現(xiàn)級等五個層次。具體地,1. 使用級:是指如何使用操作系統(tǒng),包括對命令(以及菜單和shell)、系統(tǒng)調(diào)用和系統(tǒng)文件的使用。2. 觀察級:是指通過使用級的接口,從外部觀察操作系統(tǒng)的內(nèi)部工作過程和結(jié)構(gòu)。3. 系統(tǒng)管理級:是指系統(tǒng)或設(shè)備的安裝、配置和性能調(diào)整。4. 源碼閱讀級:是指對現(xiàn)有操作系統(tǒng)部分內(nèi)核源代碼的閱讀。5. 實現(xiàn)級:是指編程模擬實現(xiàn)操作系統(tǒng)某些功能模塊。上述五個層次的實踐,不同層次的實踐者可以根據(jù)自己的實際情況自主安排,在我給的實驗指導(dǎo)中,當(dāng)前不會對各實驗的層次明確區(qū)分,大家仁者見仁吧。由于條件限制,只能夠提供Windows 2000 Professional/WindowsXP2作為大家實踐時使用的操作系統(tǒng)。希望大家能夠結(jié)合具體的實驗要求以及實踐環(huán)境提前做好試驗準(zhǔn)備。如果可能,給自己創(chuàng)造使用Unix或類Unix的實驗環(huán)境。上機(jī)前應(yīng)充分做好以下準(zhǔn)備工作:1. 復(fù)習(xí)和掌握與本次實驗有關(guān)的教學(xué)內(nèi)容。2. 根據(jù)本次實驗的內(nèi)容,在紙上編寫好準(zhǔn)備上機(jī)調(diào)試的程序,并初步檢查無誤。3. 準(zhǔn)備好對程序進(jìn)行測試的數(shù)據(jù)。4. 對每種測試數(shù)據(jù),給出預(yù)期的程序運(yùn)行結(jié)果。5. 預(yù)習(xí)實驗步驟,對實驗步驟中提出的一些問題進(jìn)行思考。上機(jī)實驗后,應(yīng)及時寫出實驗報告,實驗報告應(yīng)包括以下內(nèi)容:1. 實驗?zāi)康暮蛢?nèi)容。2. 程序說明,包括程序結(jié)構(gòu)、各模塊的算法。3. 調(diào)試正確的源程序。4. 程序運(yùn)行記錄(包括對不同測試數(shù)據(jù)的運(yùn)行結(jié)果)。5. 針對實驗中出現(xiàn)的問題,寫出解決辦法及對運(yùn)行結(jié)果的分析。根據(jù)教學(xué)大綱與實驗大綱的安排,本課程計劃進(jìn)行12課時上機(jī)試驗。由于所有實驗均涉及程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)與算法設(shè)計、操作系統(tǒng)等課程的多個知識點,相關(guān)實驗均為綜合實驗。針對具體的實驗要求,本指導(dǎo)書附錄有大量的源代碼,供對相關(guān)算法不是很熟悉的同學(xué)參考。本指導(dǎo)書適用于計算機(jī)科學(xué)技術(shù)、計算機(jī)應(yīng)用、電子專業(yè)學(xué)生學(xué)習(xí)計算機(jī)操作系統(tǒng)課程時實驗使用,也適用于上述專業(yè)軟件實驗課程中操作系統(tǒng)部分實驗使用。實驗一:進(jìn)程管理實驗學(xué)時:2實驗類型:(驗證、綜合)實驗要求:(必修)一、實驗?zāi)康腤indows NT內(nèi)核的操作系統(tǒng)是多任務(wù)操作系統(tǒng),對程與線程提供完整支持。本次實驗意圖通過實踐掌握進(jìn)程的基本概念,理解進(jìn)程控制、進(jìn)程同步、經(jīng)典進(jìn)程的同步問題 、管程機(jī)制、進(jìn)程通信、線程;初步熟悉多進(jìn)程/多線程編程的特點。二、實驗內(nèi)容本次實驗的實驗內(nèi)容包括:1)使用taskmgr.exe觀察實驗環(huán)境中的進(jìn)程信息;2) 編程實現(xiàn)哲學(xué)家就餐問題或者讀寫者問題。三、實驗組織運(yùn)行要求根據(jù)本實驗的特點、要求和具體條件,宜采用“以學(xué)生自主訓(xùn)練為主的開放模式組織教學(xué)”。相關(guān)材料可以以書面資料(或電子版本)的形式分發(fā)給學(xué)生。學(xué)生自主練習(xí)、提問;教師針對性的輔導(dǎo)。四、實驗條件- 硬件環(huán)境:Pentium 300MHz以上的微型計算機(jī);- 操作系統(tǒng):Windows 2000或Windows XP;- 編程環(huán)境:Visual C+ 6.0 企業(yè)版(算法模擬可以使用其它合適的C/C+編譯器或編程環(huán)境)。五、實驗步驟具體實驗步驟如下:1. 首先使用taskmgr.exe程序觀察系統(tǒng)中運(yùn)行進(jìn)程的基本信息;2. 使用taskmgr.exe程序觀察系統(tǒng)中運(yùn)行進(jìn)程的詳細(xì)信息;3. 編碼實現(xiàn)哲學(xué)家就餐問題或者讀寫者問題。六、思考題1. 如何編程實現(xiàn)獲得進(jìn)程的詳細(xì)信息? 2. 編碼實現(xiàn)哲學(xué)家就餐問題時哲學(xué)家獲取筷子的策略是什么?3. 讀寫者問題的實現(xiàn)中,什么是讀者優(yōu)先,什么是寫者優(yōu)先?七、實驗報告學(xué)生在實驗結(jié)束后必須完成實驗報告。實驗報告必須包括實驗預(yù)習(xí)、實驗記錄、思考題三部分內(nèi)容。實驗記錄應(yīng)該忠實的描述操作過程,并提供操作步驟以及調(diào)試程序的源代碼。對思考題應(yīng)該能夠初步認(rèn)識。具體實驗報告的書寫按照實驗報告紙的要求逐項完成。八、其它說明要求學(xué)生在實驗過程中遵循如下的要求:1. 準(zhǔn)時到達(dá)實驗室,嚴(yán)格簽名方式的考勤制度。不允許代簽;2. 遵循實驗室的各種管理規(guī)定;3. 服從教師和實驗員的管理;實驗二:處理機(jī)調(diào)度實驗學(xué)時:2實驗類型:(驗證、綜合)實驗要求:(必修)一、實驗?zāi)康谋緦嶒災(zāi)M在單處理機(jī)情況下的處理機(jī)調(diào)度,以期加深了解處理機(jī)調(diào)度算法;同時,本次實驗要求編程實現(xiàn)銀行家算法,以期加深對避免死鎖的理解。二、實驗內(nèi)容1)使用taskmgr.exe觀察實驗環(huán)境中的進(jìn)程調(diào)度情況;2)編程實現(xiàn)一個調(diào)度算法,推薦實現(xiàn)ELLF算法。要求給出對隨機(jī)測試序列能夠給出調(diào)度次序;3) 編程實現(xiàn)銀行家算法,要求在給定資源初始狀態(tài)后能夠動態(tài)處理進(jìn)程的資源分配請求;三、實驗組織運(yùn)行要求根據(jù)本實驗的特點、要求和具體條件,宜采用“以學(xué)生自主訓(xùn)練為主的開放模式組織教學(xué)”。相關(guān)材料可以以書面資料(或電子版本)的形式分發(fā)給學(xué)生。學(xué)生自主練習(xí)、提問;教師針對性的輔導(dǎo)。四、實驗條件- 硬件環(huán)境:Pentium 300MHz以上的微型計算機(jī);- 操作系統(tǒng):Windows 2000或Windows XP;- 編程環(huán)境:Visual C+ 6.0 企業(yè)版(算法模擬可以使用其它合適的C/C+編譯器或編程環(huán)境)。五、思考題1. ELLF算法與LLF算法的區(qū)別在什么地方?2. 安全性檢查算法的邏輯基礎(chǔ)是什么?六、實驗報告學(xué)生在實驗結(jié)束后必須完成實驗報告。實驗報告必須包括實驗預(yù)習(xí)、實驗記錄、思考題三部分內(nèi)容。實驗記錄應(yīng)該忠實的描述操作過程,并提供操作步驟以及調(diào)試程序的源代碼。對思考題應(yīng)該能夠初步認(rèn)識。具體實驗報告的書寫按照實驗報告紙的要求逐項完成。七、其它說明要求學(xué)生在實驗過程中遵循如下的要求:1. 準(zhǔn)時到達(dá)實驗室,嚴(yán)格簽名方式的考勤制度。不允許代簽;2. 遵循實驗室的各種管理規(guī)定;3. 服從教師和實驗員的管理;實驗三:存儲器管理實驗學(xué)時:2實驗類型:(驗證、綜合)實驗要求:(必修)一、實驗?zāi)康谋敬螌嶒炛荚谕ㄟ^使用操作系統(tǒng)內(nèi)存分配信息的動態(tài)觀察以及存儲器管理算法的實現(xiàn),加深對內(nèi)存分配原理的理解(重點加深對請求式分頁存儲管理方式的理解)。同時通過相關(guān)算法的實現(xiàn),熟悉頁面置換算法及其性能。二、實驗內(nèi)容1) 使用taskmgr.exe觀察實驗環(huán)境中的進(jìn)程生命周期內(nèi)系統(tǒng)內(nèi)存分配變化情況;2) 編程實現(xiàn)請求分頁管理方式時的地址變換過程;3) 編程實現(xiàn)OPT或者FIFO算法4) 編程實現(xiàn)LRU算法;三、實驗組織運(yùn)行要求根據(jù)本實驗的特點、要求和具體條件,宜采用“以學(xué)生自主訓(xùn)練為主的開放模式組織教學(xué)”。相關(guān)材料可以以書面資料(或電子版本)的形式分發(fā)給學(xué)生。學(xué)生自主練習(xí)、提問;教師針對性的輔導(dǎo)。四、實驗條件- 硬件環(huán)境:Pentium 300MHz以上的微型計算機(jī);- 操作系統(tǒng):Windows 2000或Windows XP;- 編程環(huán)境:Visual C+ 6.0 企業(yè)版(算法模擬可以使用其它合適的C/C+編譯器或編程環(huán)境)。五、思考題1. OPT算法是否具備實用性?2. OPT算法與LRU算法的區(qū)別是什么?3. 虛擬存儲器的主要特征有哪些?六、實驗報告學(xué)生在實驗結(jié)束后必須完成實驗報告。實驗報告必須包括實驗預(yù)習(xí)、實驗記錄、思考題三部分內(nèi)容。實驗記錄應(yīng)該忠實的描述操作過程,并提供操作步驟以及調(diào)試程序的源代碼。對思考題應(yīng)該能夠初步認(rèn)識。具體實驗報告的書寫按照實驗報告紙的要求逐項完成。七、其它說明要求學(xué)生在實驗過程中遵循如下的要求:1. 準(zhǔn)時到達(dá)實驗室,嚴(yán)格簽名方式的考勤制度。不允許代簽;2. 遵循實驗室的各種管理規(guī)定;3. 服從教師和實驗員的管理;實驗四:文件管理實驗學(xué)時:2實驗類型:(驗證、綜合)實驗要求:(必修)一、實驗?zāi)康谋敬螌嶒炛荚谕ㄟ^實踐了解文件管理原理與方法,重點加深對外存分配方式和文件空閑存儲空間的理解。二、實驗內(nèi)容1) 了解使用計算機(jī)系統(tǒng)的文件系統(tǒng)的格式;2) 編程實現(xiàn)連續(xù)分配、鏈接分配、索引分配等三種外存分配方式;2) 編程實現(xiàn)空閑表法、位示圖法連續(xù)分配、成組鏈接法等三種文件存儲空間管理方式三、實驗組織運(yùn)行要求根據(jù)本實驗的特點、要求和具體條件,宜采用“以學(xué)生自主訓(xùn)練為主的開放模式組織教學(xué)”。相關(guān)材料可以以書面資料(或電子版本)的形式分發(fā)給學(xué)生。學(xué)生自主練習(xí)、提問;教師針對性的輔導(dǎo)。本次實驗內(nèi)容很多,閾于課時限制,編程可能無法全部完成。對實驗內(nèi)容中2)、3)(外存分配方式、文件存儲空間管理方式)要求的6個編程要求,可以分成:a) 連續(xù)分配與鏈接分配、b) 索引分配、c) 空閑表法與位示圖法連續(xù)分配、d) 成組鏈接法等四組,要求在實驗課時內(nèi)至少完成一組的編程。四、實驗條件- 硬件環(huán)境:Pentium 300MHz以上的微型計算機(jī);- 操作系統(tǒng):Windows 2000或Windows XP;- 編程環(huán)境:Visual C+ 6.0 企業(yè)版(算法模擬可以使用其它合適的C/C+編譯器或編程環(huán)境)。五、思考題1. 實驗使用的計算機(jī)系用中,術(shù)語文件夾與文件管理中的概念一致?2. 連續(xù)分配、鏈接分配、索引分配等三種外存分配方式的特點以及彼此之間的差異是什么?3. 空閑表法、位示圖法連續(xù)分配、成組鏈接法三種文件存儲空間管理方式的特點以及彼此之間的差異有哪些? 六、實驗報告學(xué)生在實驗結(jié)束后必須完成實驗報告。實驗報告必須包括實驗預(yù)習(xí)、實驗記錄、思考題三部分內(nèi)容。實驗記錄應(yīng)該忠實的描述操作過程,并提供操作步驟以及調(diào)試程序的源代碼。對思考題應(yīng)該能夠初步認(rèn)識。具體實驗報告的書寫按照實驗報告紙的要求逐項完成。七、其它說明要求學(xué)生在實驗過程中遵循如下的要求:1. 準(zhǔn)時到達(dá)實驗室,嚴(yán)格簽名方式的考勤制度。不允許代簽;2. 遵循實驗室的各種管理規(guī)定;3. 服從教師和實驗員的管理;附錄一、讀寫者問題源代碼#include "windows.h"#include <conio.h>#include <stdio.h>#include <fstream.h>#include <io.h>#include <string.h>#include <stdio.h>#define READER R #define WRITER W#define INTE_PER_SEC 1000#define MAX_THREAD_NUM 64#define MAX_FILE_NUM 32#define MAX_STR_LEN 32int readcount=0;int writecount=0;CRITICAL_SECTION RP_Write;CRITICAL_SECTION cs_Write;CRITICAL_SECTION cs_Read;struct ThreadInfoint serial; char entity; double delay; double persist;/讀者優(yōu)先讀者線程/ p 讀者線程信息void RP_ReaderThread(void *p)/互斥變量HANDLE h_Mutex;h_Mutex=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex for readcount");DWORD wait_for_mutex; /等待互斥變量所有權(quán)DWORD m_delay; /延遲時間DWORD m_persist; /讀文件持續(xù)時間int m_serial; /線程序號/從參數(shù)中獲得信息 m_serial=(ThreadInfo *)(p)->serial;m_delay=(DWORD)(ThreadInfo *)(p)->delay*INTE_PER_SEC); m_persist=(DWORD)(ThreadInfo *)(p)->persist*INTE_PER_SEC); Sleep(m_delay); /延遲等待printf("reader thread %d sends the reading require.n",m_serial);/等待互斥信號,保證對readcount的訪問、修改互斥wait_for_mutex=WaitForSingleObject(h_Mutex,-1);/讀者數(shù)目增加readcount+;if(readcount=1)/第一個讀者,等待資源EnterCriticalSection(&RP_Write);ReleaseMutex(h_Mutex); /釋放互斥信號 /讀文件printf("reader thread %d begins to read file.n",m_serial);Sleep(m_persist);/退出線程printf("reader thread %d finished the reading file.n",m_serial);/等待互斥信號,保證對readcount的訪問,修改互斥wait_for_mutex=WaitForSingleObject(h_Mutex,-1);/讀者數(shù)目減少readcount-; if(readcount=0)/如果所有讀者讀完,喚醒寫者LeaveCriticalSection(&RP_Write);ReleaseMutex(h_Mutex); /釋放互斥信號/讀者優(yōu)先寫者線程/ p 寫者線程信息void RP_WriterThread(void *p)DWORD m_delay; /延遲時間DWORD m_persist; /讀文件持續(xù)時間int m_serial; /線程序號/從參數(shù)中獲得信息 m_serial=(ThreadInfo *)(p)->serial;m_delay=(DWORD)(ThreadInfo *)(p)->delay*INTE_PER_SEC); m_persist=(DWORD)(ThreadInfo *)(p)->persist*INTE_PER_SEC); Sleep(m_delay); /延遲等待printf("Writer thread %d sends the writing require.n",m_serial);/等待資源EnterCriticalSection(&RP_Write);/寫文件printf("writer thread %d begins to write to the file.n",m_serial);Sleep(m_persist);/退出線程printf("writer thread %d finished the writting file.n",m_serial);/釋放資源LeaveCriticalSection(&RP_Write);/讀者優(yōu)先處理函數(shù)/file 文件名void ReaderPriority(char *file)DWORD n_thread=0; /線程數(shù)目 DWORD thread_ID; /線程ID DWORD wait_for_all; /等待所有線程結(jié)束 /互斥對象 HANDLE h_Mutex; h_Mutex=CreateMutex(NULL,FALSE,"mutex for read_counter"); /線程對象的數(shù)組 HANDLE h_ThreadMAX_THREAD_NUM; ThreadInfo thread_infoMAX_THREAD_NUM; readcount=0; /初始化readcount InitializeCriticalSection(&RP_Write); /初始化臨界區(qū) ifstream inFile(file); /ifstream inFile; /inFile.open(file); /打開文件 printf("reader Priority:nn");/ if(!inFile) return;/如文件未打開,則返回 /while(!inFile.eof()/如文件未到文件尾,則讀文件信息 while(inFile) /讀入每一個讀者、寫者的信息 inFile>>thread_infon_thread.serial; inFile>>thread_infon_thread.entity; inFile>>thread_infon_thread.delay; inFile>>thread_infon_thread+.persist; inFile.get(); for(int i=0;i<(int)(n_thread);i+) if(thread_infoi.entity=READER | thread_infoi.entity=r) /創(chuàng)建讀者線程 h_Threadi=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) (RP_ReaderThread),&thread_infoi,0,&thread_ID); else /創(chuàng)建寫者線程 h_Threadi=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) (RP_WriterThread),&thread_infoi,0,&thread_ID); /等待所有線程結(jié)束 wait_for_all=WaitForMultipleObjects(n_thread,h_Thread,TRUE,-1); printf("All Reader and writer have finished operationg.n"); /寫者優(yōu)先讀者線程/ p 讀者線程信息void WP_ReaderThread(void *p)/互斥變量HANDLE h_Mutex1;h_Mutex1=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex1");HANDLE h_Mutex2;h_Mutex2=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex2");DWORD wait_for_mutex1; /等待互斥變量所有權(quán)DWORD wait_for_mutex2; DWORD m_delay; /延遲時間DWORD m_persist; /讀文件持續(xù)時間int m_serial; /線程序號/從參數(shù)中獲得信息 m_serial=(ThreadInfo *)(p)->serial;m_delay=(DWORD)(ThreadInfo *)(p)->delay*INTE_PER_SEC); m_persist=(DWORD)(ThreadInfo *)(p)->persist*INTE_PER_SEC); Sleep(m_delay); /延遲等待printf("reader thread %d sends the reading require.n",m_serial);/等待互斥信號,保證對readcount的訪問、修改互斥wait_for_mutex1=WaitForSingleObject(h_Mutex1,-1);/進(jìn)入讀者臨界區(qū)EnterCriticalSection(&cs_Read);/阻塞互斥對象Mutex2,保證對readcount 的訪問、修改互斥 wait_for_mutex2=WaitForSingleObject(h_Mutex2,-1);/修改讀者數(shù)目readcount+;if(readcount=1)/如果是第一個讀者,等待寫者寫完EnterCriticalSection(&cs_Write);ReleaseMutex(h_Mutex2); /釋放互斥信號mutex2 /讓其他讀者進(jìn)入臨界區(qū)LeaveCriticalSection(&cs_Read);ReleaseMutex(h_Mutex1);/讀文件printf("reader thread %d begins to read file.n",m_serial);Sleep(m_persist);/退出線程printf("reader thread %d finished the reading file.n",m_serial);/阻塞互斥對象mutex2,保證對readcount的訪問,修改互斥wait_for_mutex2=WaitForSingleObject(h_Mutex2,-1);/讀者數(shù)目減少readcount-; if(readcount=0)/最后一個讀者,喚醒寫者LeaveCriticalSection(&cs_Write);ReleaseMutex(h_Mutex2); /釋放互斥信號/寫者優(yōu)先寫者線程/ p 寫者線程信息void WP_WriteThread(void *p)DWORD m_delay; /延遲時間DWORD m_persist; /讀文件持續(xù)時間int m_serial; /線程序號 DWORD wait_for_mutex3 ;/互斥對象HANDLE h_Mutex3;h_Mutex3=OpenMutex(MUTEX_ALL_ACCESS,FALSE,"mutex3");/從參數(shù)中獲得信息 m_serial=(ThreadInfo *)(p)->serial;m_delay=(DWORD)(ThreadInfo *)(p)->delay*INTE_PER_SEC); m_persist=(DWORD)(ThreadInfo *)(p)->persist*INTE_PER_SEC); Sleep(m_delay); /延遲等待printf("Writer thread %d sends the writing require.n",m_serial);/阻塞互斥對象mutex3,保證對writecount的訪問,修改互斥wait_for_mutex3=WaitForSingleObject(h_Mutex3,-1);writecount+;if(writecount=1)/第一個寫者,等待讀者讀完 EnterCriticalSection(&cs_Read);ReleaseMutex(h_Mutex3);/進(jìn)入寫者臨界區(qū)EnterCriticalSection(&cs_Write);/寫文件printf("writer thread %d begins to write to the file.n",m_serial);Sleep(m_persist);/退出線程printf("writer thread %d finished the writting file.n",m_serial);/離開臨界區(qū)LeaveCriticalSection(&cs_Write);/阻塞互斥對象mutex3,保證對writecount的訪問,修改互斥wait_for_mutex3=WaitForSingleObject(h_Mutex3,-1);writecount-;if(writecount=0)/寫者寫完,讀者可以讀LeaveCriticalSection(&cs_Read);ReleaseMutex(h_Mutex3);/寫者優(yōu)先處理函數(shù)/file 文件名void WriterPriority(char *file)DWORD n_thread=0; /線程數(shù)目 DWORD thread_ID; /線程ID DWORD wait_for_all; /等待所有線程結(jié)束 /互斥對象 HANDLE h_Mutex1; h_Mutex1=CreateMutex(NULL,FALSE,"mutex1"); HANDLE h_Mutex2; h_Mutex2=CreateMutex(NULL,FALSE,"mutex2");HANDLE h_Mutex3; h_Mutex3=CreateMutex(NULL,FALSE,"mutex3"); /線程對象的數(shù)組 HANDLE h_ThreadMAX_THREAD_NUM; ThreadInfo thread_infoMAX_THREAD_NUM; readcount=0; /初始化readcount writecount=0; /初始化writecount InitializeCriticalSection(&cs_Write); /初始化臨界區(qū) InitializeCriticalSection(&cs_Read); ifstream inFile(file); /ifstream inFile; /inFile.open(file); /打開文件 printf("writer Priority:nn"); /while(inFile) while(inFile) /讀入每一個讀者、寫者的信息 inFile>>thread_infon_thread.serial; inFile>>thread_infon_thread.entity; inFile>>thread_infon_thread.delay; inFile>>thread_infon_thread+.persist; inFile.get(); for(int i=0;i<(int)(n_thread);i+) if(thread_infoi.entity=READER | thread_infoi.entity=r) /創(chuàng)建讀者線程/ h_Threadi=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) (RP_ReaderThread),&thread_infoi,0,&thread_ID); h_Threadi=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) (WP_ReaderThread),&thread_infoi,0,&thread_ID); else /創(chuàng)建寫者線程/ h_Threadi=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) (RP_WriterThread),&thread_infoi,0,&thread_ID); h_Threadi=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE) (WP_WriteThread),&thread_infoi,0,&thread_ID); /等待所有線程結(jié)束 wait_for_all=WaitForMultipleObjects(n_thread,h_Thread,TRUE,-1); printf("All Reader and writer have finished operationg.n"); int main(int argc,char *argv)char ch;while(true)/打印提示信息 printf(" =n"); printf(" = 讀者-寫者實驗?zāi)M =nn"); printf(" =n"); printf("n"); printf(" *n"); printf(" 1:Reader Priorityn"); printf(" 2:Write Priorityn"); printf(" 3:Exit to Windowsn"); printf(" *n"); printf(" Enter your choice(1、2、3):n"); /如果輸入信息不正確,繼續(xù)輸入 do ch=(char)_getch(); while(ch!=1&&ch!=2&&ch!=3); /*system("cls");*/ /選擇3,返回 if(ch=3) return 0; /選擇1,讀者 if(ch=1) ReaderPriority("thread.dat"); /選擇2,寫者優(yōu)先 else WriterPriority("thread.dat"); /結(jié)束 printf("n press any key to continue:"); _getch(); /*system("cls");*/return 0; 附錄二、哲學(xué)家就餐問題/ PhilosopherDining.cpp : Defines the entry point for the console application.#include "windows.h"#include <process.h>#include <time.h> #include <stdlib.h> #include <stdio.h> #include <iostream>using namespace std;const unsigned int PHILOSOPHER_NUM=5;const char THINKING=1;const char HUNGRY=2;const char DINING=3;/ each fork has a semaphoreHANDLE semphPHILOSOPHER_NUM;/ Mutex for printingHANDLE mutex;void philosopherProc(void* param);int main(int argc, char* argv) int i; srand(time(0); mutex = CreateMutex(NULL, false, NULL); for (i=0; i<PHILOSOPHER_NUM; i+) semphi = CreateSemaphore(NULL, 1, 1, NULL); _beginthread(philosopherProc, 0, (void*)&i); Sleep(10); Sleep(2000); return 0;void philosopherProc(void* param) int myid; char idStr128; char stateStr128; char mystate; int ret; unsigned int leftFork; unsigned int rightFork; myid = *(int*)(param); itoa(myid, idStr, 10); /cout << "philosopher " << myid << " begin." << endl; Sleep(10); / initial state is THINKING mystate = THINKING; leftFork = (myid) % PHILOSOPHER_NUM; rightFork = (myid + 1) % PHILOSOPHER_NUM; while (true) switch(mystate) case THINKING: / changing my state mystate = HUNGRY; strcpy(stateStr, "HUNGRY"); break; case HUNGRY: strcpy(stateStr, "HUNGRY"); / first test the left fork . ret = WaitForSingleObject(semphleftFork, 0); if (ret = WAIT_OBJECT_0) / left fork is ok, take it up ! / then test the right fork . ret = WaitForSingleObject(semphrightFork, 0); if (ret = WAIT_OBJECT_0) / right fork is also ok ! / changing my state mystate = DINING; strcpy(stateStr, "DINING"); else / right fork is being used by others, so I must put down / the left fork. ReleaseSemaphore(semphleftFork, 1, NULL); break; case DINING: / put down both the left and right fork ReleaseSemaphore(semphleftFork, 1, NULL); ReleaseSemaphore(semphrightFork, 1, NULL); / changing my state mystate = THINKING; strcpy(stateStr, "THINKING"); break; / print my state WaitForSingleObject(mutex, INFINITE); cout << "philosopher " << myid << " is : " << stateStr << endl; ReleaseMutex(mutex); / sleep a random time : between 1 - 5 s int sleepTime; sleepTime = 1 + (int)(5.0*rand()/(RAND_MAX+1.0); Sleep(sleepTime*10); 附錄三、調(diào)度算法模擬#include "stdio.h"#define getjcb(type) (type*)malloc(sizeof(type)#define NULL 0int n=0,time=0;float eti,ewi;struct jcb char name10; /* 作業(yè)名 */ char state; /* 作業(yè)狀態(tài) */ int ts; /* 提交時間 */ float super; /* 優(yōu)先權(quán) */ int tb; /* 開始運(yùn)行時間 */ int tc; /* 完成時間 */ float ti; /* 周轉(zhuǎn)時間 */ float wi; /* 帶權(quán)周轉(zhuǎn)時間 */ int ntime; /* 作業(yè)所需運(yùn)行時間 */ char resource10; /* 所需資源 */ struct jcb *link; /* 結(jié)構(gòu)體指針 */ *p,*q,*head=NULL;typedef struct jcb JCB;inital()int i;printf("nInput jcb numn");scanf("%d",&n);printf("Inputnnamettstntimetresourcen");for(i=0;i<n;i+) p=getjcb(JCB); scanf("%st%dt%dt%s",&p->name,&p->ts,&p->ntime,&p->resource); p->state=W; p->link=NULL; if(head=NULL) head=q=p; else q->link=p; q=p; fileinput()FILE *fp;int i;if(fp=fopen("os2.txt","r")=NULL) printf(" open error!") ; fscanf(fp,"%dn",&n);for(i=0;i<n;i+) p=getjcb(JCB); fscanf(fp,"%s%d%d%s",&p->name,&p->ts,&p->ntime,&p->resource); p->state=W; p->link=NULL; if(head=NULL) head=q=p; else q->link=p; q=p; fclose(fp);void print(JCB *pr,int m)JCB *p; printf("ntime=%d",time); if(m=3) printf("nnametstatettstntimetsupertsourcettbttcttitwin"); printf("%st%ct%dt%dt%4.2ft%st%dt%dt%4.2ft%4.2fn", pr->name,pr->state,pr->ts,pr->ntime,pr->super,pr->resource,pr->tb,pr->tc,pr->ti,pr->wi); else printf("nnametstatettstntimetsourcettbttcttitwin"); printf("%st%ct%dt%dt%st%dt%dt%4.2ft%4.2fn", pr->name,pr->state,pr->ts,pr->ntime,pr->resource,pr->tb,pr->tc,pr->ti,pr->wi); p=head; do if(p->state=W) if(m=3) printf("%st%ct%dt%dt%4.2ft%sn", p->name,p->state,p->ts,p->ntime,p->super,p->resource); else printf("%st%ct%dt%dt%sn", p->name,p->state,p->ts,p->ntime,p->resource); p=p->link; while(p!=NULL); p=head; do if(p->state=F) if(m=3) printf("%st%ct%dt%dt%4.2ft%st%dt%dt%4.2ft%4.2fn", p->name,p->state,p->ts,p->ntime,p->super,p->resource,p->tb,p->tc,p->ti

注意事項

本文(《實驗指導(dǎo)書》word版.doc)為本站會員(wux****ua)主動上傳,裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。 若此文所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng)(點擊聯(lián)系客服),我們立即給予刪除!

溫馨提示:如果因為網(wǎng)速或其他原因下載失敗請重新下載,重復(fù)下載不扣分。




關(guān)于我們 - 網(wǎng)站聲明 - 網(wǎng)站地圖 - 資源地圖 - 友情鏈接 - 網(wǎng)站客服 - 聯(lián)系我們

copyright@ 2023-2025  zhuangpeitu.com 裝配圖網(wǎng)版權(quán)所有   聯(lián)系電話:18123376007

備案號:ICP2024067431-1 川公網(wǎng)安備51140202000466號


本站為文檔C2C交易模式,即用戶上傳的文檔直接被用戶下載,本站只是中間服務(wù)平臺,本站所有文檔下載所得的收益歸上傳人(含作者)所有。裝配圖網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對上載內(nèi)容本身不做任何修改或編輯。若文檔所含內(nèi)容侵犯了您的版權(quán)或隱私,請立即通知裝配圖網(wǎng),我們立即給予刪除!