os試驗(yàn)指導(dǎo)書(新)_第1頁(yè)
os試驗(yàn)指導(dǎo)書(新)_第2頁(yè)
os試驗(yàn)指導(dǎo)書(新)_第3頁(yè)
os試驗(yàn)指導(dǎo)書(新)_第4頁(yè)
os試驗(yàn)指導(dǎo)書(新)_第5頁(yè)
已閱讀5頁(yè),還剩14頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

本文格式為Word版,下載可任意編輯——os試驗(yàn)指導(dǎo)書(新)

操作系統(tǒng)教程

試驗(yàn)指導(dǎo)書

阮越許文方

1

目錄

試驗(yàn)一WINDOWS進(jìn)程初識(shí)4

1、試驗(yàn)?zāi)康?2、試驗(yàn)內(nèi)容和步驟43、試驗(yàn)結(jié)論54、程序清單5試驗(yàn)二進(jìn)程管理8

背景知識(shí)81、試驗(yàn)?zāi)康?12、試驗(yàn)內(nèi)容和步驟113、試驗(yàn)結(jié)論134、程序清單13試驗(yàn)三進(jìn)程同步的經(jīng)典算法18

背景知識(shí)181、試驗(yàn)?zāi)康?92、試驗(yàn)內(nèi)容和步驟193、試驗(yàn)結(jié)論204、程序清單21試驗(yàn)四存儲(chǔ)管理25

背景知識(shí)251、試驗(yàn)?zāi)康?92、試驗(yàn)內(nèi)容和步驟293、試驗(yàn)結(jié)論354、程序清單35試驗(yàn)五文件和設(shè)備管理40

背景知識(shí)401、試驗(yàn)?zāi)康?22、試驗(yàn)內(nèi)容與步驟423、試驗(yàn)結(jié)論45試驗(yàn)六文件系統(tǒng)設(shè)計(jì)試驗(yàn)46

1、試驗(yàn)?zāi)康?62、試驗(yàn)內(nèi)容與步驟463、試驗(yàn)結(jié)論464、對(duì)試驗(yàn)的改進(jìn)以及效果47附錄A:參考程序49附錄B:文件系統(tǒng)模擬程序52

2

52

3

試驗(yàn)一WINDOWS進(jìn)程初識(shí)

1、試驗(yàn)?zāi)康?/p>

(1)學(xué)會(huì)使用VC編寫基本的Win32ConsolApplication(控制臺(tái)應(yīng)用程序)。(2)把握WINDOWSAPI的使用方法。

(3)編寫測(cè)試程序,理解用戶態(tài)運(yùn)行和核心態(tài)運(yùn)行。

2、試驗(yàn)內(nèi)容和步驟

(1)編寫基本的Win32ConsolApplication

步驟1:登錄進(jìn)入Windows,啟動(dòng)VC++6.0。

步驟2:在“FILE〞菜單中單擊“NEW〞子菜單,在“projects〞選項(xiàng)卡中選擇“Win32ConsolApplication〞,然后在“Projectname〞處輸入工程名,在“Location〞處輸入工程目錄。創(chuàng)立一個(gè)新的控制臺(tái)應(yīng)用程序工程。

步驟3:在“FILE〞菜單中單擊“NEW〞子菜單,在“Files〞選項(xiàng)卡中選擇“C++SourceFile〞,然后在“File〞處輸入C/C++源程序的文件名。

步驟4:將清單1-1所示的程序清單復(fù)制到新創(chuàng)立的C/C++源程序中。編譯成可執(zhí)行文件。

步驟5:在“開始〞菜單中單擊“程序〞-“附件〞-“命令提醒符〞命令,進(jìn)入Windows“命令提醒符〞窗口,然后進(jìn)入工程目錄中的debug子目錄,執(zhí)行編譯好的可執(zhí)行程序:

E:\\課程\\os課\\os試驗(yàn)\\程序\\os11\\debug>hello.exe

運(yùn)行結(jié)果(假使運(yùn)行不成功,則可能的原因是什么?):

____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

(2)計(jì)算進(jìn)程在核心態(tài)運(yùn)行和用戶態(tài)運(yùn)行的時(shí)間

步驟1:依照(1)中的步驟創(chuàng)立一個(gè)新的“Win32ConsolApplication〞工程,然后將清單1-2中的程序拷貝過來,編譯成可執(zhí)行文件。

步驟2:在創(chuàng)立一個(gè)新的“Win32ConsolApplication〞工程,程序的參考程序如清單1-3所示,編譯成可執(zhí)行文件并執(zhí)行。

步驟3:在“命令提醒符〞窗口中運(yùn)行步驟1中生成的可執(zhí)行文件,測(cè)試步驟2中可執(zhí)行文件在核心態(tài)運(yùn)行和用戶態(tài)運(yùn)行的時(shí)間。

E:\\課程\\os課\\os試驗(yàn)\\程序\\os12\\debug>timeTEST.exe

步驟4:運(yùn)行結(jié)果(假使運(yùn)行不成功,則可能的原因是什么?):

___________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

步驟5:分別屏蔽While循環(huán)中的兩個(gè)for循環(huán),或調(diào)整兩個(gè)for循環(huán)的次數(shù),寫出運(yùn)行結(jié)果。

4

屏蔽i循環(huán):

_______________________________________________________________________________屏蔽j循環(huán):

_______________________________________________________________________________調(diào)整循環(huán)變量i的循環(huán)次數(shù):

_______________________________________________________________________________調(diào)整循環(huán)變量j的循環(huán)次數(shù):

_______________________________________________________________________________

3、試驗(yàn)結(jié)論

_________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4、程序清單

清單1-1一個(gè)簡(jiǎn)單的Windows控制臺(tái)應(yīng)用程序//hello項(xiàng)目

#includevoidmain(){

std::cout#include#include

//當(dāng)在用戶模式機(jī)內(nèi)核模式下都提供所耗時(shí)間時(shí),在內(nèi)核模式下進(jìn)行所耗時(shí)間的64位計(jì)算的幫助方法

DWORDGetKernelModePercentage(constFILETIME

ULONGLONGqwUser=(((ULONGLONG)ftUser.dwHighDateTime)

//釋放指向子進(jìn)程的引用if(bCreateOK){

CloseHandle(pi.hProcess);CloseHandle(pi.hThread);}}

voidParent(){

//創(chuàng)立“自殺〞互斥程序體

HANDLEhMutexSuicide=CreateMutex(NULL,//缺省的安全性TRUE,//最初擁有的g_szMutexName);//互斥體名稱if(hMutexSuicide!=NULL){

//創(chuàng)立子進(jìn)程

std::cout1}else{

Parent();}

return0;}

17

試驗(yàn)三進(jìn)程同步的經(jīng)典算法

背景知識(shí)

Windows2000提供的常用對(duì)象可分成三類:核心應(yīng)用服務(wù)、線程同步和線程間通訊。其中,開發(fā)人員可以使用線程同步對(duì)象來協(xié)調(diào)線程和進(jìn)程的工作,以使其共享信息并執(zhí)行任務(wù)。此類對(duì)象包括互鎖數(shù)據(jù)、臨界段、事件、互斥體和信號(hào)等。

多線程編程中關(guān)鍵的一步是保護(hù)所有的共享資源,工具主要有互鎖函數(shù)、臨界段和互斥體等;另一個(gè)實(shí)質(zhì)性部分是協(xié)調(diào)線程使其完成應(yīng)用程序的任務(wù),為此,可利用內(nèi)核中的事件對(duì)象和信號(hào)。

在進(jìn)程內(nèi)或進(jìn)程間實(shí)現(xiàn)線程同步的最便利的方法是使用事件對(duì)象,這一組內(nèi)核對(duì)象允許一個(gè)線程對(duì)其受信狀態(tài)進(jìn)行直接控制(見表3-1)。

而互斥體則是另一個(gè)可命名且安全的內(nèi)核對(duì)象,其主要目的是引導(dǎo)對(duì)共享資源的訪問。擁有單一訪問資源的線程創(chuàng)立互斥體,所有想要訪問該資源的線程應(yīng)當(dāng)在實(shí)際執(zhí)行操作之前獲得互斥體,而在訪問終止時(shí)馬上釋放互斥體,以允許下一個(gè)等待線程獲得互斥體,然后接著進(jìn)行下去。

與事件對(duì)象類似,互斥體簡(jiǎn)單創(chuàng)立、開啟、使用并清除。利用CreateMutex()API可創(chuàng)立互斥體,創(chuàng)立時(shí)還可以指定一個(gè)初始的擁有權(quán)標(biāo)志,通過使用這個(gè)標(biāo)志,只有當(dāng)線程完成了資源的所有的初始化工作時(shí),才允許創(chuàng)立線程釋放互斥體。

表3-1用于管理事件對(duì)象的APIAPI名稱CreateEvent()OpenEvent()SetEvent()ResetEvent()PulseEvent()描述在內(nèi)核中創(chuàng)立一個(gè)新的事件對(duì)象。此函數(shù)允許有安全性設(shè)置、手工還是自動(dòng)重置的標(biāo)志以及初始時(shí)已接受還是未接受信號(hào)狀態(tài)的標(biāo)志創(chuàng)立對(duì)已經(jīng)存在的事件對(duì)象的引用。此API函數(shù)需要名稱、繼承標(biāo)志和所需的訪問級(jí)別將手工重置事件轉(zhuǎn)化為已接受信號(hào)狀態(tài)將手工重置事件轉(zhuǎn)化為非接受信號(hào)狀態(tài)將自動(dòng)重置事件對(duì)象轉(zhuǎn)化為已接受信號(hào)狀態(tài)。當(dāng)系統(tǒng)釋放所有的等待它的線程時(shí)此種轉(zhuǎn)化馬上發(fā)生

為了獲得互斥體,首先,想要訪問調(diào)用的線程可使用OpenMutex()API來獲得指向?qū)ο蟮木浔?;然后,線程將這個(gè)句柄提供給一個(gè)等待函數(shù)。當(dāng)內(nèi)核將互斥體對(duì)象發(fā)送給等待線程時(shí),就說明該線程獲得了互斥體的擁有權(quán)。當(dāng)線程獲得擁有權(quán)時(shí),線程控制了對(duì)共享資源的訪問——必需設(shè)法盡快地放棄互斥體。放棄共享資源時(shí)需要在該對(duì)象上調(diào)用ReleaseMute()API。然后系統(tǒng)負(fù)責(zé)將互斥體擁有權(quán)傳遞給下一個(gè)等待著的線程(由到達(dá)時(shí)間決定順序)。

18

1、試驗(yàn)?zāi)康?/p>

1)回想系統(tǒng)進(jìn)程、線程的有關(guān)概念,加深對(duì)Windows2000線程的理解。

2)了解互斥體對(duì)象,通過對(duì)生產(chǎn)者消費(fèi)者等進(jìn)程間同步與互斥經(jīng)典算法的實(shí)現(xiàn),加深對(duì)P、V原語以及利用P、V原語進(jìn)行進(jìn)程間同步與互斥操作的理解。

2、試驗(yàn)內(nèi)容和步驟

(1).生產(chǎn)者消費(fèi)者問題

步驟1:創(chuàng)立一個(gè)“Win32ConsolApplication〞工程,然后拷貝清單3-1中的程序,編譯成可執(zhí)行文件。

步驟2:在“命令提醒符〞窗口運(yùn)行步驟1中生成的可執(zhí)行文件。運(yùn)行結(jié)果:范例:E:\\課程\\os課\\os試驗(yàn)\\程序\\os11\\debug>os31(假設(shè)編譯生成的可執(zhí)行文件是os31.exe)

__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________步驟3:細(xì)心閱讀源程序,找出創(chuàng)立線程的WINDOWSAPI函數(shù),回復(fù)以下問題:線程的第一個(gè)執(zhí)行函數(shù)是什么(從哪里開始執(zhí)行)?它位于創(chuàng)立線程的API函數(shù)的第幾個(gè)參數(shù)中?_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________步驟4:修改清單3-1中的程序,調(diào)整生產(chǎn)者線程和消費(fèi)者線程的個(gè)數(shù),使得消費(fèi)者數(shù)目大與生產(chǎn)者,看看結(jié)果有何不同。運(yùn)行結(jié)果:

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________從中你可以得出什么結(jié)論:

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________步驟5:修改清單3-1中的程序,按程序解釋中的說明修改信號(hào)量EmptySemaphore的初始化方法,看看結(jié)果有何不同。運(yùn)行結(jié)果:

______________________________________________________________________________________________________________________________________________________________

19

_______________________________________________________________________________

步驟6:根據(jù)步驟4的結(jié)果,并查看MSDN,回復(fù)以下問題1)CreateMutex中有幾個(gè)參數(shù),各代表什么含義。

_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

2)CreateSemaphore中有幾個(gè)參數(shù),各代表什么含義,信號(hào)量的初值在第幾個(gè)參數(shù)中。_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

3)程序中P、V原語所對(duì)應(yīng)的實(shí)際WindowsAPI函數(shù)是什么,寫出這幾條語句。_____________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

4)CreateMutex能用CreateSemaphore替代嗎?嘗試修改程序3-1,將信號(hào)量Mutex完全用CreateSemaphore及相關(guān)函數(shù)實(shí)現(xiàn)。寫出要修改的語句:

__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

(2).讀者寫者問題

根據(jù)試驗(yàn)(1)中所熟悉的P、V原語對(duì)應(yīng)的實(shí)際WindowsAPI函數(shù),并參考教材中讀者、寫者問題的算法原理,嘗試?yán)肳indowsAPI函數(shù)實(shí)現(xiàn)第一類讀者寫者問題(讀者優(yōu)先)。

3、試驗(yàn)結(jié)論

__________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________________

20

4、程序清單

清單3-1生產(chǎn)者消費(fèi)者問題#include#include

constunsignedshortSIZE_OF_BUFFER=2;//緩沖區(qū)長(zhǎng)度unsignedshortProductID=0;//產(chǎn)品號(hào)

unsignedshortConsumeID=0;//將被消耗的產(chǎn)品號(hào)

unsignedshortin=0;//產(chǎn)品進(jìn)緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo)unsignedshortout=0;//產(chǎn)品出緩沖區(qū)時(shí)的緩沖區(qū)下標(biāo)

intbuffer[SIZE_OF_BUFFER];//緩沖區(qū)是個(gè)循環(huán)隊(duì)列boolp_ccontinue=true;//控制程序終止HANDLEMutex;//用于線程間的互斥

HANDLEFullSemaphore;//當(dāng)

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論