操作系統實驗三進程的創建_第1頁
操作系統實驗三進程的創建_第2頁
操作系統實驗三進程的創建_第3頁
操作系統實驗三進程的創建_第4頁
操作系統實驗三進程的創建_第5頁
免費預覽已結束,剩余12頁可下載查看

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

1、操作系統實驗報告課程名稱操作系統實驗課程編號0920311實驗項目名稱進程的創建學號年級2011 級姓名專業軟件工程學生所在學院軟件學院指導教師王紅濱實驗室名稱地點軟件工程實驗室21B282哈爾濱工程大學軟件學院第一講實驗環境的使用一、實驗概述1 .實驗名稱進程的創建2 .實驗目的練習使用EOS API函數CreateProcess創建一個進程,掌握創建進程的方 法,理解進程和程序的區別。調試跟蹤CreateProcess函數的執行過程,了解進程的創建過程,理解進 程是資源分配的單位。3 .實驗類型(驗證、設計)驗證4 .實驗內容準備實驗練習使用控制臺命令創建 EOS應 用程序的進程練習通過編

2、程的方式讓應用程序 創建另一個應用程序的進程0調試 CreateProcess 函數二、實驗環境操作系統:windows xp編譯環境:OS Lab語言: 匯編語言、C 語言三、實驗過程(每次實驗不一定下面 6條都寫,根據實際情況定)1 .設計思路和流程圖main函數開始定義調用CreateProcess函數需要使用的 結構體變量(包括 STARTUPINFO 和 PROCESS_INFORMA TION 結構體)調用三次GetStdHandle函數獲取父進程 的標準輸入、輸出、錯誤句柄,賦值給 STARTUPINFO結構體變量的對應成員調用CreateProcess函數創建軟盤中應用 程序H

3、ello.exe的進程創建成功?失敗調用CloseHandle函數關閉子進程句柄和 子進程的主線程句柄main函數返回main函數流程圖162 .需要解決的問題及解答(1)在源代碼文件NewTwoProc.c提供的源代碼基礎上進行修改,要求使用 hello.exe 同時創建10個進程。提示:可以使用 PROCESS_INFORMATION定 義一個有10個元素的數組,每一個元素對應一個進程。使用一個循環創建10個 子進程,然后再使用一個循環等待 10個子進程結束,得到退出碼后關閉句柄。答:后文中,有此題解決方案。嘗試根據之前對 PsCreateProcess 函數和 PspCreateProc

4、essEnvironment 函 數執行過程的跟蹤調試,繪制一幅進程創建過程的流程圖。開始為進程創建了地址空間為進程分配了句柄表PsploadprocessImage 是將進程的可執行映像加載到了進程的地址空間1PspCreateThread 創建了進程的主線程(3)在 PsCreateProcess 函數中調用了 PspCreateProcessEnvironment 函數 后又先后調用了 PspLoadProcessImage和PspCreateThread函數,學習這些函數 的主要功能。能夠交換這些函數被調用的順序嗎?思考其中的原因。答:PspCreateProcessEnvironme

5、nt 勺要功能是創建進程控"L夬.昨且為, 進程創建了地址空間和分配了句柄表。PspLoadProcessImage是將進程的可執行 映像加載到了進程的地址空間中。 PspCreateThread創建了進程的主線程。這三 個函數被調用的順,是不能夠改變的就向k面描述的加載可執行映像之前 必須已繹為進程創建了地址空間這樣才能夠確定可執行映像可以被加栽到內 存的什么位置在創建土線程之前必須已經加載了可執行映像這樣主線程才 能夠知道自己要從哪里開始執行,執行哪些指令。因此不能交換他們的順序。3 .主要數據結構、實現代碼及其說明主要定義一個有10個元素的數組,每一個元素對應一個進程。使用一個

6、循 環創建10個子進程,然后再使用一個循環等待10個子進程結束,得到退出碼后 關閉句柄4 .源程序并附上注釋#include "EOSApp.h"/ main函數參數的意義:/ argc - argv數組的長度,大小至少為1 , argc - 1為命令行參數的數量。/ argv -字符串指針數組,數組長度為命令行參數個數+ 1。其中argv0周定指向當前/進程所執行的可執行文件的路徑字符串,argv1及其后面的指針指 向各個命令行/參數/例如通過命令行內容"a:hello.exe -a -b" 啟動進程后,hello.exe的 main 函/數的參數ar

7、gc 的值為 3 , argv0 指向字符串"a:hello.exe" ,argv1 指向/參數字符串"-a" , argv2 指向參數字符串"-b" 。/int main(int argc, char* argv)int i;/ 啟動調試EOS 應用程序前要特別注意下面的問題:/ 1 、如果要在調試應用程序時能夠調試進入內核并顯示對應的源碼,/ 必須使用EOS 核心項目編譯生成完全版本的SDK 文件夾,然/后使用此文件夾覆蓋應用程序項目中的SDK 文件夾,并且EOS/核心項目在磁盤上的位置不能改變。/ 2 、在啟動調試應用程序之前必

8、須首先刪除/禁用所有的斷點,在斷/點中斷(int 3) 被命中后才能重新添加/啟用斷點,否則啟動/調試會失敗。/STARTUPINFO StartupInfo;PROCESS_INFORMATION P10;ULONG ulExitCode; / 子進程退出碼INT nResult = 0;/ main 函數返回值。0 表示成功,非0 表示失敗。BOOL num10;#ifdef _DEBUG_asm("int $3n nop");#endifprintf("Createten processesand wait for theprocessesexit.nn&q

9、uot;);/ 使子進程和父進程使用相同的標準句柄。/StartupInfo.StdInput = GetStdHandle(STD_INPUT_HANDLE);StartupInfo.StdOutput = GetStdHandle(STD_OUTPUT_HANDLE);StartupInfo.StdError = GetStdHandle(STD_ERROR_HANDLE);/ 為一個應用程序同時創建十個子進程。/for( i=0;i<10;i+)numi=CreateProcess("A:Hello.exe", NULL, 0, &StartupInfo

10、, &Pi);for(i=0;i<10;i+)if(numi)/ 創建子進程成功,等待子進程運行結束。/WaitForSingleObject(Pi.ProcessHandle, INFINITE);for(i=0;i<10;i+)if(numi)/ 得到并輸出子進程的退出碼。/GetExitCodeProcess(Pi.ProcessHandle, &ulExitCode); printf("nThe process %d exit with %d.n", ulExitCode);for(i=0;i<10;i+)if(numi)/ 關閉不

11、再使用的句柄。/CloseHandle(Pi.ProcessHandle); CloseHandle(Pi.ThreadHandle);for(i=0;i<10;i+)if(!numi)0x%X.n",printf("CreateProcess Failed, Error code: GetLastError();nResult = 1;return nResult;5. 程序運行時的初值和運行結果a.使用控制臺命令創建EOSE用程序進程b.查看應用程序創建另一個應用程序的進程的執行結果CONSOLE-1 (Press Ctrl+F1F8 to switch cons

12、ole uindou, r.) We leone to EOS shell >Autorun A AEOSApp.exe Create a process and ua it for tJie process exit.Heilo,warId! 1 Hella.uorld! Z HelloruorId! 3 Heilojuorldf 4 Hello/worldf 5 Bye-bye!The process ex it uith 0,A:E03App.exe exit with OxOOOOOOOQ.c.調試進程控制塊的創建過程輸出盛視名掰*Htwhroc«»Syxta

13、a = 0x0,Priority = 0x0, Fu = (fad03 fb6 *6j bjectTable = 口 x0 ThreadLi s tHe ad - West = Dx0?Prev = 0x0類 st調試制作軟盤錯像,芷在啟動 Virtual PC.開始調試.Pn«*ryThread = 0x0>行439<司篇出J曜斯點曲調用堆極V» lLiiiK«td = 天查找結果1國查找英沈緒ImaeName = OxOj, C«dLine = 0x0 IkageEftse - 00j 1軍 堂 Entry* = 0, Sldlhput

14、= 0x0, SldOutput " 。乂0 StdError - 0k0, Exi tCode = 0k0He«t = OkO, frev = DkO將鼠標移動到“監視”窗口中此表達式的“值”屬性上,會彈出一個臨時窗 口,在臨時窗口中會按照進程控制塊的結構顯示各個成員變量的值(可以參考 PROCESS構體的定義)。由于只是新建了進程控制塊,還沒有初始化其中成員 變量,所以值都為00d.接下來調試初始化進程控制塊中各個成員變量的過程:1 .創建進程的地址空間,即4G虛擬地址空間。在代碼行(create.c文件的 第 437 行)NewProcess->Pas = Mm

15、CreateProcessAddressSpace();添加一個斷 點。2 .按F5繼續調試,到此斷點處中斷。3 .按F10執行此行代碼后中斷。4 .在“監視”窗口中查看進程控制塊的成員變量Pas的值已經不再是00說明已經初始化了進程的4G虛擬地址空間監視輸出名稱*N*Pr«ctiiSyiUrn = 口 kQ Pri pj-j ty - 0x0, Fas =。蛀0 3£B6 闋, Obj ectTable = dx/ ThreadLi s tMe ad = West = DkO, Prev = 0x0婁It調試制作軟盤情像,正在啟動 Virtual PC.開始調試.FriB

16、tryThread = 0x0,VutLii iMthd = N蟻 t 二 0x0.Prev = 0x0就緒ImageName = Ox。, CndLine = 1x0, = 口*口I»aeEntry = 0, Sdlnput = QxQ, SldOutput = 0x0 StdErrir = 0x0 ExtCode - 0m0行439<目冷出|口斷點曲調用堆棧使用F10一步步調試PspCreateProcessEnvironment函數中后面的代碼,在調試的過程中根據執行的源代碼,查看“監視”窗口中 *NewProcess表達式的值結果如下:監視名稱*NewFrocessSy

17、stem = 0x0 Priority = OjcO,Fai - QiBOSfbBeB1OljeetTable = 0x8Q3£c2aB,ThreadLiEtHtftd - N«it - 0x0, Frsv - 0x0調試制作軟秀鏡像. 正在啟動Virtual 開始調試,一不查找結果1 留查找型就緒>3輸出;新壬白iFrimaryThrcAl = OkO7 Wqi tLi EtHead - Nftwt = 0x0, Frav = QxOImageNune - 0x0, CmdLine =。霹0,= 0x0, IniageEntry = 0, Stdlzut = 0x0

18、, StdOutput = 0x0, StdError - 0延 ExiiCtda -面監視輸出名稱NtwFroc<«System = QxQ,Priority = 0x8,Pas - OxBOSfieeS/Object! tbit = Ux 5 Q3fc2t£,Thrt4.4ListHtad = Next = OxOj, Py*v = OkOFrimaryThread, = 口乂口)WtitLiitHtd = Kejtt = 0x0.Prev = QxO類St調試制作軟叁鏡像.正在啟動Virtual FC.開始調試.司查找結果1品宜E嚙就緒J *Imagedam e

19、 = QxD3 CmdLine - 0x0-Imftg4Btst = QM, ImageEntry = O, Stdlnput = Ox。 StdOtitput - OxQ S t dErr or = OxO, Exi tCedt = OxO±.|>J口輸出13斷點外調用推投行煙監視名稱*NewPrccess嚴 宅查找結果1 司查莪支就緒Syittm = 0x0,Priority = 0x8,P*s - OH803fM詬*bj *ctrablt =。前。3£2汨,Thr e adLi z tHe ad - iM*Kt = Chc803fb7fc,Prav = 0x00

20、3£b7fc上FriaaryThread = OxflWai tLi stKead - Next 二 口 kQjFrev = 0x0LImageffajTie = 0x0,CmdLin 世=Ok 口.ImaeBase = 0x0 jiImageEntry = 0StdlnpTit - 0x0StdOutput = DsCjStdErr&r = 0x0,Exi tCode = 0x0, V X輸出1類調試 QxB*= Ok. . st制作軟盤錯像.一 止在啟動Virtual PC,.開始調試, .Ia1圜輸出口新點|協調用網 Q X輸出名稱值+Ne*Fr?cfr55M緒Sy S

21、 t em = 口疝.,Priority = Qx瓦Pas - OxeOSfbGeSjDbjtctT«bl« =。蛇 D3fc240.Thr e adLi f tHe ad - Hext = OxSO3£b7fcHIrev = Qj<303ft7fcLPriffiiryThrtiid = 0x0WaitListHead = Ntxt = 0x80300®,Frev = 0x8D3fb806LXnaigeName = 0x0 CdLiit 電=ChtiO,ImageBase - 0x0.ImageEntry = , Stdlnput = QkO. S

22、tdDutput = OxO> StdError = 0x0 ExitCode = 0x0調試制作軟疊鏡像正在啟動Virtual PC,.開始調試.I 帖出10點|給調用堆梗監視S稱*HewProcess司重找結果1司查搬1System = 0x0, Priority = Ohr8 P&s =。間3外6咆 ObjitctTble = 0x003 fc2iB, ThreadLi stMead = Next = 0x803 fbTfc, Prev - 0x803 fbTfcL.FriSiaryThread - 0*) WaitListHead = Hext = 0x803 £

23、;b80a:, Py” = 0x803 ft808類螞試制作軟承鏡像二正在啟動Virtual PC開始調試.就緒SyEtenPriority - 0x45.P«s - Ox的的 fD45Dbj«ctTabl« = 0x55 c3c9£D,Thr«&dLislKeaid = Kext 二 0xec33eS6flPw =能弼 58dlW工ma空Name = 0x803 fb 035 "A: WEOEApp. 二Cm 4.lie = 口 M# ImtftBMt = ImageEntry - 0sl Stdlnput = 0x0,St

24、dDutput OkD3 Stdlrror = OW0sl Eiii tC*de = 0x0<11I n輸出嘶點型調用堆棧行4BS給出*內調試制作軟盤橇匹丁正在啟動Virtual PC.開始調試.一Ft iwyThr2sJ =。工 424448 兄WaitLiEtHts.a = Next 三 0*E£2404cTjPrtv = Oaee0ffffff】,工巾"窗/s 二 0x2563 <Addr4EE口*2563 out cf b。皿ds"CmdLine Dx83£a4569 QddruMQ,83氏45的 out of boimdE二I輸出I 1斷點I附調用堆行3 379ins按F5繼續執行,EO汕核會為剛剛初始化完畢的進程控制塊新建一個進程。激活虛擬機窗口查看新建進程執行的結果。PC -lcios¥irtCONSOLE-1 (Press Ctrl+F1F0 to switch cansole uindoui.,) Ue1come to EDS shell>Autorun A:、EOSApp.uxeCreate a process and uait f or the process exit.,.Hei lojimrldf 1Heilo,uorId! ZHello.uorld! 3HeilouarId!

溫馨提示

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

評論

0/150

提交評論