下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
操作系統(tǒng)實(shí)驗(yàn)報(bào)告課程名稱操作系統(tǒng)實(shí)驗(yàn)課程編號0920311實(shí)驗(yàn)工程名稱進(jìn)程的創(chuàng)立學(xué)號2023061419年級20230614姓名史勇專業(yè)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)生所在學(xué)院計(jì)算機(jī)學(xué)院指導(dǎo)教師初妍實(shí)驗(yàn)室名稱地點(diǎn)21B376實(shí)驗(yàn)室哈爾濱工程大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院第三講進(jìn)程的創(chuàng)立一、實(shí)驗(yàn)概述1.實(shí)驗(yàn)名稱進(jìn)程的創(chuàng)立2.實(shí)驗(yàn)?zāi)康木毩?xí)使用EOSAPI函數(shù)CreateProcess創(chuàng)立一個(gè)進(jìn)程,掌握創(chuàng)立進(jìn)程的方法,理解進(jìn)程和程序的區(qū)別。調(diào)試跟蹤C(jī)reateProcess函數(shù)的執(zhí)行過程,了解進(jìn)程的創(chuàng)立過程,理解進(jìn)程是資源分配的單位。3.實(shí)驗(yàn)類型驗(yàn)證型實(shí)驗(yàn)4.實(shí)驗(yàn)內(nèi)容準(zhǔn)備實(shí)驗(yàn)練習(xí)使用控制臺命令創(chuàng)立EOS應(yīng)用程序的進(jìn)程練習(xí)通過編程的方式讓應(yīng)用程序創(chuàng)立另一個(gè)應(yīng)用程序的進(jìn)程調(diào)試CreateProcess函數(shù)調(diào)試PsCreateProcess函數(shù)練習(xí)通過編程的方式創(chuàng)立應(yīng)用程序的多個(gè)進(jìn)程二、實(shí)驗(yàn)環(huán)境WindowsXP系統(tǒng)、EOS實(shí)驗(yàn)系統(tǒng)、C語言三、實(shí)驗(yàn)過程1.設(shè)計(jì)思路和流程圖練習(xí)使用控制臺命令創(chuàng)立EOS應(yīng)用程序進(jìn)程的具體步驟如下:1.在EOS應(yīng)用程序工程的“工程管理器〞窗口中雙擊Floppy.img文件,使用FloppyImageEditor工具翻開此軟盤鏡像文件。2.將本實(shí)驗(yàn)文件夾中的Hello.exe文件拖動到FloppyImageEditor工具窗口的文件列表中釋放,Hello.exe文件即被添加到軟盤鏡像文件中。Hello.exe一個(gè)EOS應(yīng)用程序,其源代碼可以參見本實(shí)驗(yàn)文件夾中的Hello.c源文件。3.在FloppyImageEditor中選擇“文件〞菜單中的“保存〞后關(guān)閉FloppyImageEditor。4.按F7生成EOS應(yīng)用工程。5.按F5啟動調(diào)試。OSLab會彈出一個(gè)調(diào)試異常對話框,并中斷應(yīng)用程序的執(zhí)行。6.在調(diào)試異常對話框中選擇“否〞,忽略異常繼續(xù)執(zhí)行應(yīng)用程序。7.激活虛擬機(jī)窗口,待該應(yīng)用程序執(zhí)行完畢后,在EOS的控制臺中輸入命令“〞后回車。8.Hello.exe應(yīng)用程序開始執(zhí)行,觀察其輸出如圖11-1。9.待Hello.exe執(zhí)行完畢后可以重復(fù)第7步,或者結(jié)束此次調(diào)試。按照下面的步驟查看應(yīng)用程序創(chuàng)立另一個(gè)應(yīng)用程序的進(jìn)程的執(zhí)行結(jié)果:1.使用NewProc.c文件中的源代碼替換之前創(chuàng)立的EOS應(yīng)用程序工程中的EOSApp.c文件內(nèi)的源代碼。2.按F7生成修改后的EOS應(yīng)用程序工程。3.按F5啟動調(diào)試。OSLab會首先彈出一個(gè)調(diào)試異常對話框。4.在調(diào)試異常對話框中選擇“否〞,繼續(xù)執(zhí)行。5.激活虛擬機(jī)窗口查看應(yīng)用程序輸出的內(nèi)容,如圖11-2。結(jié)合圖11-1,可以看到父進(jìn)程〔EOSApp.exe〕首先開始執(zhí)行并輸出內(nèi)容,父進(jìn)程創(chuàng)立了子進(jìn)程〔Hello.exe〕后,子進(jìn)程開始執(zhí)行并輸出內(nèi)容,待子進(jìn)程結(jié)束后父進(jìn)程再繼續(xù)執(zhí)行。6.結(jié)束此次調(diào)試。按照下面的步驟調(diào)試CreateProcess函數(shù)創(chuàng)立進(jìn)程的過程:1.按F5啟動調(diào)試EOS應(yīng)用程序,OSLab會首先彈出一個(gè)調(diào)試異常對話框。2.選擇“是〞調(diào)試異常,調(diào)試會中斷。3.在main函數(shù)中調(diào)用CreateProcess函數(shù)的代碼行〔第57行〕添加一個(gè)斷點(diǎn)。4.按F5繼續(xù)調(diào)試,在斷點(diǎn)處中斷。5.按F11調(diào)試進(jìn)入CreateProcess函數(shù)。此時(shí)已經(jīng)開始進(jìn)入EOS內(nèi)核進(jìn)行調(diào)試。調(diào)試PspCreateProcessEnvironment函數(shù)的步驟如下:1.在PsCreateProcess函數(shù)中找到調(diào)用PspCreateProcessEnvironment函數(shù)的代碼行〔create.c文件的第163行〕,并在此行添加一個(gè)斷點(diǎn)。2.按F5繼續(xù)調(diào)試,到此斷點(diǎn)處中斷。3.按F11調(diào)試進(jìn)入PspCreateProcessEnvironment函數(shù)。接下來調(diào)試初始化進(jìn)程控制塊中各個(gè)成員變量的過程:1.首先創(chuàng)立進(jìn)程的地址空間,即4G虛擬地址空間。在代碼行〔create.c文件的第437行〕NewProcess->Pas=MmCreateProcessAddressSpace();添加一個(gè)斷點(diǎn)。2.按F5繼續(xù)調(diào)試,到此斷點(diǎn)處中斷。3.按F10執(zhí)行此行代碼后中斷。4.在“監(jiān)視〞窗口中查看進(jìn)程控制塊的成員變量Pas的值已經(jīng)不再是0。說明已經(jīng)初始化了進(jìn)程的4G虛擬地址空間。5.使用F10一步步調(diào)試PspCreateProcessEnvironment函數(shù)中后面的代碼,在調(diào)試的過程中根據(jù)執(zhí)行的源代碼,查看“監(jiān)視〞窗口中*NewProcess表達(dá)式的值,觀察進(jìn)程控制塊中哪些成員變量是被哪些代碼初始化的,哪些成員變量還沒有被初始化。6.當(dāng)從PspCreateProcessEnvironment函數(shù)返回到PsCreateProcess函數(shù)后,停止按F10。此時(shí)“監(jiān)視〞窗口中已經(jīng)不能再顯示表達(dá)式*NewProcess的值了,在PsCreateProcess函數(shù)中是使用ProcessObject指針指向進(jìn)程控制塊的,所以將表達(dá)式*ProcessObject添加到“監(jiān)視〞窗口中就可以繼續(xù)觀察新建進(jìn)程控制塊中的信息。7.接下來繼續(xù)使用F10一步步調(diào)試PsCreateProcess函數(shù)中的代碼,同樣要注意觀察執(zhí)行后的代碼修改了進(jìn)程控制塊中的哪些成員變量。當(dāng)調(diào)試到PsCreateProcess函數(shù)的最后一行代碼時(shí),查看進(jìn)程控制塊中的信息,此時(shí)所有的成員變量都已經(jīng)被初始化了〔注意觀察成員ImageName的值〕。8.按F5繼續(xù)執(zhí)行,EOS內(nèi)核會為剛剛初始化完畢的進(jìn)程控制塊新建一個(gè)進(jìn)程。激活虛擬機(jī)窗口查看新建進(jìn)程執(zhí)行的結(jié)果。9.在OSLab中選擇“調(diào)試〞菜單中的“停止調(diào)試〞結(jié)束此次調(diào)試。10.選擇“調(diào)試〞菜單中的“刪除所有斷點(diǎn)〞。2.算法實(shí)現(xiàn)4.主要數(shù)據(jù)結(jié)構(gòu)、實(shí)現(xiàn)代碼及其說明5.源程序并附上注釋#include"EOSApp.h"http://main函數(shù)參數(shù)的意義://argc-argv數(shù)組的長度,大小至少為1,argc-1為命令行參數(shù)的數(shù)量。//argv-字符串指針數(shù)組,數(shù)組長度為命令行參數(shù)個(gè)數(shù)+1。其中argv[0]固定指向當(dāng)前//進(jìn)程所執(zhí)行的可執(zhí)行文件的路徑字符串,argv[1]及其后面的指針指向各個(gè)命令行//參數(shù)。//例如通過命令行內(nèi)容"a:\hello.exe-a-b"啟動進(jìn)程后,hello.exe的main函//數(shù)的參數(shù)argc的值為3,argv[0]指向字符串"a:\hello.exe",argv[1]指向//參數(shù)字符串"-a",argv[2]指向參數(shù)字符串"-b"。//intmain(intargc,char*argv[]){ // //啟動調(diào)試EOS應(yīng)用程序前要特別注意下面的問題: // //1、如果要在調(diào)試應(yīng)用程序時(shí)能夠調(diào)試進(jìn)入內(nèi)核并顯示對應(yīng)的源碼, //必須使用EOS核心工程編譯生成完全版本的SDK文件夾,然 //后使用此文件夾覆蓋應(yīng)用程序工程中的SDK文件夾,并且EOS //核心工程在磁盤上的位置不能改變。 //2、在啟動調(diào)試應(yīng)用程序之前必須首先刪除/禁用所有的斷點(diǎn),在斷 //點(diǎn)中斷(int3)被命中后才能重新添加/啟用斷點(diǎn),否那么啟動 //調(diào)試會失敗。STARTUPINFOStartupInfo; PROCESS_INFORMATIONProcInfo[10]; inta[10],i,j; ULONGulExitCode; //子進(jìn)程退出碼 INTnResult=0; //main函數(shù)返回值。0表示成功,非0表示失敗。#ifdef_DEBUG __asm("int$3\nnop");#endifprintf("Createtenprocessesandwaitfortheprocessesexit...\n\n");//使子進(jìn)程和父進(jìn)程使用相同的標(biāo)準(zhǔn)句柄。 StartupInfo.StdInput=GetStdHandle(STD_INPUT_HANDLE); StartupInfo.StdOutput=GetStdHandle(STD_OUTPUT_HANDLE); StartupInfo.StdError=GetStdHandle(STD_ERROR_HANDLE); //為一個(gè)應(yīng)用程序同時(shí)創(chuàng)立10個(gè)子進(jìn)程。 for(i=0;i<10;i++) { if(CreateProcess("A:\\Hello.exe",NULL,0,&StartupInfo,&ProcInfo[i])) a[i]=1; elsea[i]=0; }for(j=0;j<10;j++) { if(a[j]){ //創(chuàng)立子進(jìn)程成功,等待子進(jìn)程運(yùn)行結(jié)束。 // WaitForSingleObject(ProcInfo[j].ProcessHandle,INFINITE); //得到并輸出子進(jìn)程的退出碼 GetExitCodeProcess(ProcInfo[j].ProcessHandle,&ulExitCode); } else{printf("CreateProcessFailed,Errorcode:0x%X.\n",GetLastError()); nResult=1;} for(j=0;j<10;j++) {printf("\nTheprocess%dexitwith%d.\n",j,ulExitCode); CloseHandle(ProcInfo[j].ProcessHandle); CloseHandle(ProcInfo[j].ThreadHandle);} }returnnResult;}6.程序運(yùn)行時(shí)的初值和運(yùn)行結(jié)果四、實(shí)驗(yàn)體會本次實(shí)驗(yàn)較為簡單,屬于驗(yàn)證型實(shí)驗(yàn)。實(shí)驗(yàn)過程中,在調(diào)試時(shí)添加監(jiān)視對象時(shí),因?yàn)樯倭?導(dǎo)致結(jié)果不正確,后請教同學(xué)后解決了,另外在動手實(shí)現(xiàn)10個(gè)進(jìn)程創(chuàng)立的問題時(shí),一開始沒有頭緒,后來和原創(chuàng)立2個(gè)進(jìn)程的程序比照以及for循環(huán)提示,寫出了程序,并和同學(xué)討論后,修正了對進(jìn)程創(chuàng)立失敗時(shí)的操作。用PROCESS_INFORMATION類型定義一個(gè)有10個(gè)元素的數(shù)組,每一個(gè)元素對應(yīng)一個(gè)進(jìn)程。使用一個(gè)循環(huán)創(chuàng)立10個(gè)子進(jìn)程,然后再使用一個(gè)循環(huán)等待10個(gè)子進(jìn)程結(jié)束,得到退出碼后關(guān)閉句柄。對于不能創(chuàng)立成功的進(jìn)程那么直接結(jié)束這個(gè)進(jìn)程并且彈出錯(cuò)誤信息,之后轉(zhuǎn)到下一個(gè)進(jìn)程,使進(jìn)程之間不互相影響。通過這次實(shí)驗(yàn),我對進(jìn)程的相關(guān)知識增加了理解。有了動手實(shí)踐的時(shí)機(jī)讓我對于課本上進(jìn)程的相關(guān)知識有了新的認(rèn)識和更深的記憶。學(xué)習(xí)了如何創(chuàng)立進(jìn)程和關(guān)閉句柄等,豐富了編程的相關(guān)知識。附:1.在PsCreateProcess函數(shù)中調(diào)用了PspCreateProcessEnvironment函數(shù)后又先后調(diào)用了PspLoadProcessImage和PspCreateThread函數(shù),學(xué)習(xí)這些函數(shù)的主要功能。能夠交換這些函數(shù)調(diào)用的順序嗎?思考其中的原因。答:PspCreate
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廣東水利電力職業(yè)技術(shù)學(xué)院《建筑學(xué)前沿及研究方法》2023-2024學(xué)年第一學(xué)期期末試卷
- 廣東汕頭幼兒師范高等專科學(xué)?!吨袊鴳蚯费芯俊?023-2024學(xué)年第一學(xué)期期末試卷
- 廣東茂名農(nóng)林科技職業(yè)學(xué)院《歷史學(xué)課程教學(xué)論》2023-2024學(xué)年第一學(xué)期期末試卷
- 當(dāng)政府遇上互聯(lián)網(wǎng)(復(fù)旦大學(xué))學(xué)習(xí)通測試及答案
- 【優(yōu)化探究】2022屆高三物理一輪復(fù)習(xí)知能檢測:7-1電場力的性質(zhì)-
- 【全程復(fù)習(xí)方略】2020-2021學(xué)年高中數(shù)學(xué)(人教A版選修2-2)課時(shí)作業(yè)-2.2.1.2-分析法
- 永州市2025屆高三高考第二次模擬考試(二模)地理試卷
- 2025年人教版八年級數(shù)學(xué)寒假預(yù)習(xí) 第08講 平行四邊形的判定(1個(gè)知識點(diǎn)+6大考點(diǎn)舉一反三+過關(guān)測試)
- 《產(chǎn)品知識講解》課件
- 河南省周口市第三初級中學(xué)2024-2025學(xué)年七年級上學(xué)期期末測試英語試卷(含答案無聽力部分)
- 橫版榮譽(yù)證書模板可修改打印 (9)
- 義務(wù)教育《道德與法治》課程標(biāo)準(zhǔn)(2022年版)
- 乙肝五項(xiàng)詳解(課堂PPT)
- TD汽車維修公司管理制度和崗位職責(zé)匯編-30頁
- 數(shù)字化設(shè)計(jì)與制造PPT課件
- 個(gè)人信息查詢使用授權(quán)書
- 工作證明(通用)
- 試析運(yùn)城市水資源可持續(xù)利用分析
- 通達(dá)信-低位放量公式(已驗(yàn)證)
- 第四章 船舶動力管路系統(tǒng)
- 太上正一天尊說鎮(zhèn)宅消災(zāi)龍虎妙經(jīng)
評論
0/150
提交評論