進(jìn)程控制與描述實(shí)驗(yàn)報(bào)告_第1頁(yè)
進(jìn)程控制與描述實(shí)驗(yàn)報(bào)告_第2頁(yè)
進(jìn)程控制與描述實(shí)驗(yàn)報(bào)告_第3頁(yè)
進(jìn)程控制與描述實(shí)驗(yàn)報(bào)告_第4頁(yè)
進(jìn)程控制與描述實(shí)驗(yàn)報(bào)告_第5頁(yè)
已閱讀5頁(yè),還剩2頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、一、實(shí)驗(yàn)?zāi)康睦肳indows提供的API函數(shù),編寫(xiě)程序,實(shí)現(xiàn)進(jìn)程的創(chuàng)建和終止(如創(chuàng)建寫(xiě)字板進(jìn)程及終止該進(jìn)程),加深對(duì)操作系統(tǒng)進(jìn)程概念的理解,觀察操作系統(tǒng)進(jìn)程運(yùn)行的動(dòng)態(tài)性能,獲得包含多進(jìn)程的應(yīng)用程序編程經(jīng)驗(yàn)。二、實(shí)驗(yàn)內(nèi)容編寫(xiě)一個(gè)在dos界面下的簡(jiǎn)單進(jìn)程控制系統(tǒng),實(shí)現(xiàn)根據(jù)用戶選項(xiàng)進(jìn)行進(jìn)程的創(chuàng)建、終止,并提供進(jìn)程的狀態(tài)。(1)進(jìn)程的創(chuàng)建和終止。編寫(xiě)一段程序,可以創(chuàng)建一個(gè)進(jìn)程,并終止當(dāng)前創(chuàng)建的進(jìn)程。試觀察記錄程序執(zhí)行的結(jié)果,并分析原因。(2)利用VC+6.0實(shí)現(xiàn)上述程序設(shè)計(jì)和調(diào)試操作,對(duì)于進(jìn)程創(chuàng)建的成功與否、終止進(jìn)程操作的成功與否提供一定的提示框。(3)通過(guò)閱讀和分析實(shí)驗(yàn)程序,學(xué)習(xí)創(chuàng)建進(jìn)程、觀察進(jìn)程

2、和終止進(jìn)程的程序設(shè)計(jì)方法三、實(shí)驗(yàn)步驟1. 創(chuàng)建進(jìn)程使用了Windows提供的CreateProcess函數(shù)來(lái)創(chuàng)建一個(gè)新的進(jìn)程和它的主線程,這個(gè)新進(jìn)程運(yùn)行指定的可執(zhí)行文件。函數(shù)原型:BOOL CreateProcess LPCTSTR lpApplicationName, LPTSTR lpCommandLine, LPSECURITY_ATTRIBUTES lpProcessAttributes。 LPSECURITY_ATTRIBUTES lpThreadAttributes, BOOL bInheritHandles, DWORD dwCreationFlags, LPVOID lpEnv

3、ironment, LPCTSTR lpCurrentDirectory, LPSTARTUPINFO lpStartupInfo, LPPROCESS_INFORMATION lpProcessInformation ;一個(gè)線程調(diào)用該函數(shù)首先創(chuàng)建一個(gè)進(jìn)程內(nèi)核對(duì)象用來(lái)管理此新進(jìn)程,隨后系統(tǒng)為新進(jìn)程創(chuàng)建虛擬地址空間,并將可執(zhí)行文件的代碼和數(shù)據(jù)加載到這個(gè)地址空間,接著系統(tǒng)為新進(jìn)程的主線程創(chuàng)建一個(gè)線程內(nèi)核對(duì)象。本程序所使用的函數(shù)中各參數(shù)的解釋?zhuān)?. lpApplicationName 指向一個(gè)NULL結(jié)尾的、用來(lái)指定可執(zhí)行模塊的字符串。這個(gè)字符串可以使可執(zhí)行模塊的絕對(duì)路徑,也可以是相對(duì)路徑,在后一種

4、情況下,函數(shù)使用當(dāng)前驅(qū)動(dòng)器和目錄建立可執(zhí)行模塊的路徑。 這個(gè)參數(shù)可以被設(shè)為NULL,在這種情況下,可執(zhí)行模塊的名字必須處于 lpCommandLine 參數(shù)的最前面并由空格符與后面的字符分開(kāi)。2. lpCommandLine傳遞給新進(jìn)程的命令行字符串,應(yīng)當(dāng)為非常量字符串的地址??梢栽O(shè)定一個(gè)完整的命令行,如果第一個(gè)標(biāo)記沒(méi)有擴(kuò)展名,CreateProcess將其假設(shè)為.exe。如果找不到該文件,CreateProcess按環(huán)境設(shè)置目錄搜索運(yùn)行。3. bInheritHandles決定子進(jìn)程對(duì)父進(jìn)程繼承性,一般設(shè)為FALSE。4. dwCreationFlags用于標(biāo)識(shí)標(biāo)志,以便用于規(guī)定如何來(lái)創(chuàng)建新

5、進(jìn)程。5. lpStartupInfo指向一個(gè)用于決定新進(jìn)程的主窗體如何顯示的STARTUPINFO結(jié)構(gòu)體。6. lpProcessInformation 指向一個(gè)用來(lái)接收新進(jìn)程的識(shí)別信息的PROCESS_INFORMATION結(jié)構(gòu)體。在使用CreateProcess函數(shù)之前首先要對(duì)STARTUPINFO結(jié)構(gòu)體進(jìn)行初始化,來(lái)指定新的進(jìn)程如何顯示,這里對(duì)參數(shù)不再詳細(xì)展開(kāi)。PROCESS_INFORMATION結(jié)構(gòu)體typedef struct _PROCESS_INFORMATION HANDLE hProcess; / 存放每個(gè)對(duì)象的與進(jìn)程相關(guān)的句柄HANDLE hThread; / 返回的線

6、程句柄DWORD dwProcessId; / 用來(lái)存放進(jìn)程ID號(hào)DWORD dwThreadId; / 用來(lái)存放線程ID號(hào)PROCESS_INFORMATION,*PPROCESS_INFORMATION,*LPPROCESS_INFORMATION;調(diào)用Createprocess()函數(shù)后,會(huì)自動(dòng)地對(duì)該結(jié)構(gòu)進(jìn)行填充。創(chuàng)建新進(jìn)程可使系統(tǒng)建立一個(gè)進(jìn)程內(nèi)核對(duì)象和一個(gè)線程內(nèi)核對(duì)象。在創(chuàng)建進(jìn)程的時(shí)候,系統(tǒng)為每個(gè)對(duì)象賦予一個(gè)初始使用計(jì)數(shù)值1 。然后,在createProcess返回之前,該函數(shù)打開(kāi)進(jìn)程對(duì)象和線程對(duì)象,并將每個(gè)對(duì)象的與進(jìn)程相關(guān)的句柄放入PROCESS_INFORMATIO結(jié)構(gòu)的hProc

7、ess和hThread成員中。當(dāng)CreateProcess在內(nèi)部打開(kāi)這些對(duì)象時(shí),每個(gè)對(duì)象的使用計(jì)數(shù)就變?yōu)?。2. 終止進(jìn)程一個(gè)進(jìn)程終止時(shí),系統(tǒng)會(huì)依次執(zhí)行以下操作:1、終止進(jìn)程中遺留的任何線程。 2、釋放進(jìn)程分配的所有用戶對(duì)象,關(guān)閉所有內(nèi)核對(duì)象。如果它們的使用計(jì)數(shù)變?yōu)?,內(nèi)核對(duì)象將會(huì)釋放。 3、將進(jìn)程的退出代碼從STILL_ACTIVE變?yōu)閭鹘oExitProcess或是TerminateProcess的參數(shù)存儲(chǔ)在內(nèi)核對(duì)象中。 4、進(jìn)程內(nèi)核對(duì)象變?yōu)橐挥|發(fā)狀態(tài)。這也是為什么其他線程可以掛起他們自己直至另一個(gè)進(jìn)程終止運(yùn)行。5、進(jìn)程內(nèi)核對(duì)象的使用計(jì)數(shù)遞減1。本實(shí)驗(yàn)使用了Windows提供的Termina

8、teProcess函數(shù)來(lái)終止進(jìn)程。TerminateProcess函數(shù)原型:BOOL TerminateProcessHANDLE hProcessUINT uExitCode ;函數(shù)中各參數(shù)的解釋?zhuān)?.hProcess指定要中斷進(jìn)程的句柄。該句柄可以由 OpenProcess得到.2.uExitCode進(jìn)程和其所有線程的退出代碼這個(gè)函數(shù)可以用來(lái)終止或者說(shuō)殺死一個(gè)進(jìn)程,它不會(huì)留給進(jìn)程及其所有線程清理的時(shí)間,系統(tǒng)會(huì)馬上終止(殺死)這個(gè)進(jìn)程的所有線程,致使進(jìn)程終止。在使用此函數(shù)前我們必須要調(diào)用OpenProcess函數(shù)來(lái)獲得我們要終止進(jìn)程的句柄,并且要獲得進(jìn)程的PROCESS_TERMINATE權(quán)

9、限。本次試驗(yàn)中設(shè)計(jì)的簡(jiǎn)單進(jìn)程控制系統(tǒng),由于采用了堆棧式的方法,即每次都將用來(lái)接收新進(jìn)程的識(shí)別信息的PROCESS_INFORMATION結(jié)構(gòu)體存入到一個(gè)特定的堆棧中去,這樣就可以直接利用里面的參數(shù)獲取需要終止的進(jìn)程的句柄,從而避免了使用OpenProcess函數(shù)的麻煩。當(dāng)然若這種方法只適用與這樣一個(gè)簡(jiǎn)單的小型系統(tǒng),并不具有普適性。4、 系統(tǒng)截圖1、初始界面2、打開(kāi)多個(gè)進(jìn)程3、 關(guān)閉進(jìn)程和相關(guān)提醒五、思考1. 系統(tǒng)是怎樣創(chuàng)建進(jìn)程的?操作系統(tǒng)分成以下步驟來(lái)完成:1)打開(kāi)將要再該進(jìn)程中執(zhí)行的映像文件;2)創(chuàng)建Windows執(zhí)行體進(jìn)程對(duì)象;3)創(chuàng)建初始線程(棧、堆執(zhí)行環(huán)境初始化及執(zhí)行線程體對(duì)象);4)

10、通知Windows子系統(tǒng)已新進(jìn)程創(chuàng)建;5)開(kāi)始執(zhí)行初始線程;6)在新進(jìn)程和線程環(huán)境中完成地址空間的初始化(比如加載必須的DLL和庫(kù)),然后開(kāi)始到進(jìn)程入口執(zhí)行。至此,完成所有的創(chuàng)建工作。2. 可執(zhí)行文件加載時(shí)進(jìn)行了那些處理? 首先操作系統(tǒng)判斷該文件是否是一個(gè)合法的可執(zhí)行文件。如果是則操作系統(tǒng)將按照段表中的指示為可執(zhí)行程序分配地址空間。再者進(jìn)行了將源代碼轉(zhuǎn)換為機(jī)器可認(rèn)識(shí)代碼的過(guò)程。編譯程序讀取源程序(字符流),對(duì)之進(jìn)行詞法和語(yǔ)法的分析,將高級(jí)語(yǔ)言指令轉(zhuǎn)換為功能等效的匯編代碼,再由匯編程序轉(zhuǎn)換為機(jī)器語(yǔ)言,并且按照操作系統(tǒng)對(duì)可執(zhí)行文件格式的要求鏈接生成可執(zhí)行程序。具體經(jīng)過(guò)以下幾個(gè)處理:C源程序編譯預(yù)處

11、理編譯優(yōu)化程序匯編程序鏈接程序可執(zhí)行文件。3. 當(dāng)首次調(diào)用新創(chuàng)建進(jìn)程時(shí),其入口在哪里?首次調(diào)用新創(chuàng)建進(jìn)程的入口在指向進(jìn)程的句柄。六、遇到的問(wèn)題1、 由于是第一次接觸到Createprocess函數(shù)和TerminateProcess函數(shù),所以對(duì)函數(shù)內(nèi)部的參數(shù)意義并不是很明朗,導(dǎo)致無(wú)法順利地創(chuàng)建與終止進(jìn)程,因此也花了較多的時(shí)間去了解各個(gè)參數(shù)實(shí)際的作用;2、在實(shí)驗(yàn)的過(guò)程中碰到了不同編譯器對(duì)有效地址字符串的處理問(wèn)題,如在cfree編輯器正常運(yùn)行的代碼在VS中報(bào)錯(cuò),強(qiáng)制轉(zhuǎn)換后出現(xiàn)指針溢出等問(wèn)題。經(jīng)過(guò)反復(fù)思考與去網(wǎng)上所搜答案得知VS在處理字符串時(shí)轉(zhuǎn)化成Unicode編碼進(jìn)行,在改過(guò)后VS無(wú)報(bào)錯(cuò)現(xiàn)象;3、在上面的敘述中也有提到,針對(duì)這次試驗(yàn)的特殊性,并沒(méi)有使用OpenProcess函數(shù)去獲取相應(yīng)進(jìn)程的句柄并加以控制,而是用了比較取巧的方法保留了每個(gè)進(jìn)程的狀態(tài)信息,雖然

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝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ù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 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)論