




版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領
文檔簡介
本文格式為Word版,下載可任意編輯——os試驗指導書(新)
操作系統(tǒng)教程
試驗指導書
阮越許文方
1
目錄
試驗一WINDOWS進程初識4
1、試驗目的42、試驗內容和步驟43、試驗結論54、程序清單5試驗二進程管理8
背景知識81、試驗目的112、試驗內容和步驟113、試驗結論134、程序清單13試驗三進程同步的經典算法18
背景知識181、試驗目的192、試驗內容和步驟193、試驗結論204、程序清單21試驗四存儲管理25
背景知識251、試驗目的292、試驗內容和步驟293、試驗結論354、程序清單35試驗五文件和設備管理40
背景知識401、試驗目的422、試驗內容與步驟423、試驗結論45試驗六文件系統(tǒng)設計試驗46
1、試驗目的462、試驗內容與步驟463、試驗結論464、對試驗的改進以及效果47附錄A:參考程序49附錄B:文件系統(tǒng)模擬程序52
2
52
3
試驗一WINDOWS進程初識
1、試驗目的
(1)學會使用VC編寫基本的Win32ConsolApplication(控制臺應用程序)。(2)把握WINDOWSAPI的使用方法。
(3)編寫測試程序,理解用戶態(tài)運行和核心態(tài)運行。
2、試驗內容和步驟
(1)編寫基本的Win32ConsolApplication
步驟1:登錄進入Windows,啟動VC++6.0。
步驟2:在“FILE〞菜單中單擊“NEW〞子菜單,在“projects〞選項卡中選擇“Win32ConsolApplication〞,然后在“Projectname〞處輸入工程名,在“Location〞處輸入工程目錄。創(chuàng)立一個新的控制臺應用程序工程。
步驟3:在“FILE〞菜單中單擊“NEW〞子菜單,在“Files〞選項卡中選擇“C++SourceFile〞,然后在“File〞處輸入C/C++源程序的文件名。
步驟4:將清單1-1所示的程序清單復制到新創(chuàng)立的C/C++源程序中。編譯成可執(zhí)行文件。
步驟5:在“開始〞菜單中單擊“程序〞-“附件〞-“命令提醒符〞命令,進入Windows“命令提醒符〞窗口,然后進入工程目錄中的debug子目錄,執(zhí)行編譯好的可執(zhí)行程序:
E:\\課程\\os課\\os試驗\\程序\\os11\\debug>hello.exe
運行結果(假使運行不成功,則可能的原因是什么?):
____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
(2)計算進程在核心態(tài)運行和用戶態(tài)運行的時間
步驟1:依照(1)中的步驟創(chuàng)立一個新的“Win32ConsolApplication〞工程,然后將清單1-2中的程序拷貝過來,編譯成可執(zhí)行文件。
步驟2:在創(chuàng)立一個新的“Win32ConsolApplication〞工程,程序的參考程序如清單1-3所示,編譯成可執(zhí)行文件并執(zhí)行。
步驟3:在“命令提醒符〞窗口中運行步驟1中生成的可執(zhí)行文件,測試步驟2中可執(zhí)行文件在核心態(tài)運行和用戶態(tài)運行的時間。
E:\\課程\\os課\\os試驗\\程序\\os12\\debug>timeTEST.exe
步驟4:運行結果(假使運行不成功,則可能的原因是什么?):
___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
步驟5:分別屏蔽While循環(huán)中的兩個for循環(huán),或調整兩個for循環(huán)的次數(shù),寫出運行結果。
4
屏蔽i循環(huán):
_______________________________________________________________________________屏蔽j循環(huán):
_______________________________________________________________________________調整循環(huán)變量i的循環(huán)次數(shù):
_______________________________________________________________________________調整循環(huán)變量j的循環(huán)次數(shù):
_______________________________________________________________________________
3、試驗結論
_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
4、程序清單
清單1-1一個簡單的Windows控制臺應用程序//hello項目
#includevoidmain(){
std::cout#include#include
//當在用戶模式機內核模式下都提供所耗時間時,在內核模式下進行所耗時間的64位計算的幫助方法
DWORDGetKernelModePercentage(constFILETIME
ULONGLONGqwUser=(((ULONGLONG)ftUser.dwHighDateTime)
//釋放指向子進程的引用if(bCreateOK){
CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}}
voidParent(){
//創(chuàng)立“自殺〞互斥程序體
HANDLEhMutexSuicide=CreateMutex(NULL,//缺省的安全性TRUE,//最初擁有的g_szMutexName);//互斥體名稱if(hMutexSuicide!=NULL){
//創(chuàng)立子進程
std::cout1}else{
Parent();}
return0;}
17
試驗三進程同步的經典算法
背景知識
Windows2000提供的常用對象可分成三類:核心應用服務、線程同步和線程間通訊。其中,開發(fā)人員可以使用線程同步對象來協(xié)調線程和進程的工作,以使其共享信息并執(zhí)行任務。此類對象包括互鎖數(shù)據(jù)、臨界段、事件、互斥體和信號等。
多線程編程中關鍵的一步是保護所有的共享資源,工具主要有互鎖函數(shù)、臨界段和互斥體等;另一個實質性部分是協(xié)調線程使其完成應用程序的任務,為此,可利用內核中的事件對象和信號。
在進程內或進程間實現(xiàn)線程同步的最便利的方法是使用事件對象,這一組內核對象允許一個線程對其受信狀態(tài)進行直接控制(見表3-1)。
而互斥體則是另一個可命名且安全的內核對象,其主要目的是引導對共享資源的訪問。擁有單一訪問資源的線程創(chuàng)立互斥體,所有想要訪問該資源的線程應當在實際執(zhí)行操作之前獲得互斥體,而在訪問終止時馬上釋放互斥體,以允許下一個等待線程獲得互斥體,然后接著進行下去。
與事件對象類似,互斥體簡單創(chuàng)立、開啟、使用并清除。利用CreateMutex()API可創(chuàng)立互斥體,創(chuàng)立時還可以指定一個初始的擁有權標志,通過使用這個標志,只有當線程完成了資源的所有的初始化工作時,才允許創(chuàng)立線程釋放互斥體。
表3-1用于管理事件對象的APIAPI名稱CreateEvent()OpenEvent()SetEvent()ResetEvent()PulseEvent()描述在內核中創(chuàng)立一個新的事件對象。此函數(shù)允許有安全性設置、手工還是自動重置的標志以及初始時已接受還是未接受信號狀態(tài)的標志創(chuàng)立對已經存在的事件對象的引用。此API函數(shù)需要名稱、繼承標志和所需的訪問級別將手工重置事件轉化為已接受信號狀態(tài)將手工重置事件轉化為非接受信號狀態(tài)將自動重置事件對象轉化為已接受信號狀態(tài)。當系統(tǒng)釋放所有的等待它的線程時此種轉化馬上發(fā)生
為了獲得互斥體,首先,想要訪問調用的線程可使用OpenMutex()API來獲得指向對象的句柄;然后,線程將這個句柄提供給一個等待函數(shù)。當內核將互斥體對象發(fā)送給等待線程時,就說明該線程獲得了互斥體的擁有權。當線程獲得擁有權時,線程控制了對共享資源的訪問——必需設法盡快地放棄互斥體。放棄共享資源時需要在該對象上調用ReleaseMute()API。然后系統(tǒng)負責將互斥體擁有權傳遞給下一個等待著的線程(由到達時間決定順序)。
18
1、試驗目的
1)回想系統(tǒng)進程、線程的有關概念,加深對Windows2000線程的理解。
2)了解互斥體對象,通過對生產者消費者等進程間同步與互斥經典算法的實現(xiàn),加深對P、V原語以及利用P、V原語進行進程間同步與互斥操作的理解。
2、試驗內容和步驟
(1).生產者消費者問題
步驟1:創(chuàng)立一個“Win32ConsolApplication〞工程,然后拷貝清單3-1中的程序,編譯成可執(zhí)行文件。
步驟2:在“命令提醒符〞窗口運行步驟1中生成的可執(zhí)行文件。運行結果:范例:E:\\課程\\os課\\os試驗\\程序\\os11\\debug>os31(假設編譯生成的可執(zhí)行文件是os31.exe)
__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________步驟3:細心閱讀源程序,找出創(chuàng)立線程的WINDOWSAPI函數(shù),回復以下問題:線程的第一個執(zhí)行函數(shù)是什么(從哪里開始執(zhí)行)?它位于創(chuàng)立線程的API函數(shù)的第幾個參數(shù)中?_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________步驟4:修改清單3-1中的程序,調整生產者線程和消費者線程的個數(shù),使得消費者數(shù)目大與生產者,看看結果有何不同。運行結果:
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________從中你可以得出什么結論:
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________步驟5:修改清單3-1中的程序,按程序解釋中的說明修改信號量EmptySemaphore的初始化方法,看看結果有何不同。運行結果:
______________________________________________________________________________________________________________________________________________________________
19
_______________________________________________________________________________
步驟6:根據(jù)步驟4的結果,并查看MSDN,回復以下問題1)CreateMutex中有幾個參數(shù),各代表什么含義。
_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
2)CreateSemaphore中有幾個參數(shù),各代表什么含義,信號量的初值在第幾個參數(shù)中。_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
3)程序中P、V原語所對應的實際WindowsAPI函數(shù)是什么,寫出這幾條語句。_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
4)CreateMutex能用CreateSemaphore替代嗎?嘗試修改程序3-1,將信號量Mutex完全用CreateSemaphore及相關函數(shù)實現(xiàn)。寫出要修改的語句:
__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
(2).讀者寫者問題
根據(jù)試驗(1)中所熟悉的P、V原語對應的實際WindowsAPI函數(shù),并參考教材中讀者、寫者問題的算法原理,嘗試利用WindowsAPI函數(shù)實現(xiàn)第一類讀者寫者問題(讀者優(yōu)先)。
3、試驗結論
__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________
20
4、程序清單
清單3-1生產者消費者問題#include#include
constunsignedshortSIZE_OF_BUFFER=2;//緩沖區(qū)長度unsignedshortProductID=0;//產品號
unsignedshortConsumeID=0;//將被消耗的產品號
unsignedshortin=0;//產品進緩沖區(qū)時的緩沖區(qū)下標unsignedshortout=0;//產品出緩沖區(qū)時的緩沖區(qū)下標
intbuffer[SIZE_OF_BUFFER];//緩沖區(qū)是個循環(huán)隊列boolp_ccontinue=true;//控制程序終止HANDLEMutex;//用于線程間的互斥
HANDLEFullSemaphore;//當
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
- 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
- 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
- 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 大型游樂設施租賃合同樣本
- 商業(yè)綜合體地簧門改造合同
- 國內海運貨物保險合同樣本
- 擔架使用培訓課件
- 壓力容器安全管理考核試卷
- 動物用藥品店面的環(huán)境設計與氛圍營造考核試卷
- 有機合成原料在綠色涂料技術的創(chuàng)新考核試卷
- 木材產品環(huán)保性能提升考核試卷
- 整流器在數(shù)據(jù)中心能源效率優(yōu)化考核試卷
- 智慧城市和自然資源的合理利用考核試卷
- 建筑電工考試題庫與答案
- TCSES 71-2022 二氧化碳地質利用與封存項目泄漏風險評價規(guī)范
- 國際貨運代理英語(貨代英語)forwarder-English-1-to-21
- 光伏電站小EPC合同模版
- 電池材料簡介ppt
- GB/T 4745-2012紡織品防水性能的檢測和評價沾水法
- 馬工程教材《公共財政概論》PPT-緒論
- GB/T 26752-2020聚丙烯腈基碳纖維
- 十一種正方體展開平面圖(僅打?。?/a>
- 2022年四川省綿陽市中考化學試卷
- (完整版)微生物檢驗技術練習題(含答案)
評論
0/150
提交評論