操作系统实验第三讲进程的创建0814000244.docx
- 文档编号:10091155
- 上传时间:2023-02-08
- 格式:DOCX
- 页数:19
- 大小:62.26KB
操作系统实验第三讲进程的创建0814000244.docx
《操作系统实验第三讲进程的创建0814000244.docx》由会员分享,可在线阅读,更多相关《操作系统实验第三讲进程的创建0814000244.docx(19页珍藏版)》请在冰豆网上搜索。
操作系统实验第三讲进程的创建0814000244
操作系统
实验报告
课程名称
操作系统实验
实验项目名称
进程的创建
学号
班级
姓名
专业
计算机科学
与技术
学生所在学院
计算机科学
与技术学院
指导教师
初妍
实验室名称地点
21#428
哈尔滨工程大学
计算机科学与技术学院
、实验概述
1.实验名称进程的创建
2.实验目的
(1)练习使用EOSAPI函数CreateProcess创建一个进程,掌握创建进程的方法,理解进程和程序的区别。
(2)调试跟踪CreateProcess函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。
3.实验类型验证型实验
4.实验内容准备实验
练习使用控制台命令创建EOS应用程序的进程练习通过编程的方式让应用程序创建另一个应用
程序的进程
调试CreateProcess函数调试PsCreateProcess函数
练习通过编程的方式创建应用程序的多个进程
二、实验环境
操作系统windosxp
编译器OSLab
语言c语言
语言c语言
三、实验过程
1.设计思路
创建10个进程时,可以使用PROCESS_INFORMATI类型定义一
个有10个元素的数组,每一个元素对应一个进程。
使用一个循环创建10个子进程,然后再使用一个循环等待10个子进程结束,得到退出码后关闭句柄。
2.算法实现
在创建10个进程的程序中,为了保证只有在10个进程都创建成
功的情况下才执行后续操作,引入一个变量locked,只有10个程序
都创建成功时locked=1,出现创建失败的情况时locked=0,当
locked=1时再执行后续操作
3.需要解决的问题及解答
问题1:
程序创建2个进程创建的情况下,实验指导P133-4的
*NewProcess和6的*ProcessObject变化情况,监控变量界面截图。
(答案见)
问题2:
尝试根据之前对PsCreateProcess函数和
PspCreateProcessEnvironment函数执行过程的跟踪调试,绘制一幅进程创建过程的流程图。
问题3:
思考与练习,在源代码文件提供的源代码基础上进行修
改,要求使用同时创建10个进程。
要给出源代码及解释和运行界面
截图。
(代码见“源程序并附上注释”部分)
OTISOLE-I(PressCtrl*Fl^FBtosultch(yebycf
AAEOfinpi>.cxt:
exituithOxGOO&OOOO
Theprocess1
TheprocessZ
Theprocess3
Theprocess4
Theprocess5
TheprocessB
Theprocess7
TJ)eprocessH
Theprocess9
Theprocess1'exitwith0.ekitulth0.exituith0rexituithD.exituith6.exitwith0,exituithD”exituithe.exituith0.
*exitwith0■
4.源程序并附上注释
使用同时创建10个进程,代码如下:
#include""
intmain(intargc,char*argv[])
{
STARTUPINFOStartupInfo;
PROCESS_INFORMATIONjincheng[10];
ULONGulExitCode;.\n\n");
n",GetLastError());
nResult=1;
locked=0;
rocessHandle,INFINITE);
}
rocessHandle,&ulExitCode);
exit
printf("\nTheprocess%dwith%d.\n",l+1,ulExitCode);
}
rocessHandle);
CloseHandle(jincheng[m].ThreadHandle);
}
}程序运行时的初值和运行结果
准备实验
建立一个EOSKernel项目和EOS应用程序项目
练习使用控制台命令创建EOS应用程序的进程
将本实验文件夹中的文件拖动到FloppylmageEditor工具窗口的
文件列表中释放,文件即被添加到软盘镜像文件中,按F5启动调试,在EOS的控制台中输入命令“A:
”后回车,结果如下图:
OMSOLE-1(PressCtrl+Fl^Ffitosuitchccnsoleuindou...)elcomEtoEOSshell
>AuftoruinA:
\EOSApp.cxc
He1lcworld!
A:
\EOSApp.exeexituithex©00G0OOO.
>A;\He11oexe
Error:
CreateprocessfailedwithstatuscodeOxcOQGOOla>A:
She11o»exe
Hello.world!
1
Hella^ijorld!
Z
Hcllo^utirld!
3
lie1lojworId*4
Hello,world*5
Bye-bije?
A:
\HEila.exeexitwith0x00000600.
练习通过编程的方式让应用程序创建另一个应用程序的进程
使用文件中的源代码替换之前创建的EOS应用程序项目中的
文件内的源代码,F5启动调试,激活虚拟机窗口查看应用程序输出
的内容:
rflNSOLE-l(PressCtrl+n~r0toswitchronsoleuindou,.,)UelecnetoEOSshell
>AuLtii'unA:
\E03App.exe
CreateaprocessanduaitfortJieprocessexit,..
Hello,uopMt1lellc^uorM*2
Hello,worMr3
HellcruorM!
4
Hello,uorMt5
Dyebye*
Theprocessexituitli0.
n:
\E0SnppckcexitwithOxOOGOOOOO»
调试CreateProcess函数
F5启动调试EOS应用程序,在main函数中调用
CreateProcess函数的代码行(第57行)添加一个断点。
按F5继续调试,在断点处中断。
按F11调试进入CreateProcess函数。
在“调试”菜单的“窗口”中选择“反汇编”,会在“反汇编”窗口
中显示CreateProcess函数的指令对应的反汇编代码。
“反汇编”窗口的左侧显示的是指令所在的虚拟地址。
可以看到所有指令的虚拟
地址都大于Ox,说明内核()处于高2G的虚拟地址空间中,如图:
OiSDI.lldSC
C.CreaLeFruce*寸Cl):
futih
ebp
A
OxSOClldST
(CrciiTriFrroce曽弓卜1》:
nrav
eb]>*c*r
gQClld&g
cub 5*QkL8 .OaSOOll^c JLOV D^OFI1PTRLet+0k13] OaSOOlldSf eFrxe$: JEOV DWORDFIB[e=1^+0110] (ht80DLld63 : nzciw Efli,DWDEID? TKtbp+DiL4] 0x30011d66 KOV LWO? nPTE[二wp+Uxg]」u” OaSOClldSa xCreat已珀处此甘那》: KCV eaE.DWFDPTE[eU+OjtlO] ¥ > 设置main函数的调用堆栈帧为活动的。 在“反汇编”窗口中查 Dx00401cfB 0x00401 0x00431IOC JU口誓njovJDDV cbIL EWJRDPTR[Ctfp<-0x4LQtu[W: (RDPTR[esp],0140201,Cea^ds: Old04060 cu '+0x000dflE test eai,eax 0x00401 je 0i401d&2 LWJKL'PTR[eep+Qx^.OaffffffEf 0x00401dl2 JDDV 七肚』柚细: ebpThJ訂 V 看main函数的指令所在的虚拟地址都是小于Ox,说明应用程序() 处于低2G的虚拟地址空间中,如图: 调试PsCreateProcess函数 在PsCreateProcess函数中找到调用 PspCreateProcessEnvironment函数的代码行(文件的第163行),并在此行添加一个断点。 按F5继续调试,到此断点处中断。 按F11调试进入PspCreateProcessEnvironment函数。 在调用ObCreateObject函数的代码行(文件的第418行)添加一个断点。 按F5继续调试,到此断点处中断。 按F10执行此函数后中断。 将表达式*NewProcess添加到“监视”窗口中,继续一步步调试可以观察到进程控制块的成员变量的值的变化,如下图: Priority-0x0,Fu=OUDj.01bji«etT«Ble-血0』TkrttdLtstH«*4=1 Ift¥tsOmD, Prt*=ObdO £W*SAPriwHy=QkO$Pu二OxSCDfMie^01hj«clTtbl«=OxO^ThrttCistKttd={ H«%1=0x0, FrwrsOkO Prinj-yllurtad=QxQl41lL4^Uf.t4d={lext三OmO,Fr*v=ChfO FriBaryThr**4=ObrfXfuiListMvkd={ ■tjtl=OsQL ftw=0x0 ! »*£•¥«! ■二Ox①CvdLirw=OtrO, Li«4*3ei4=0x0^ Xaa^Zntry=0』 StdUnput*0M, -0x0^StiErr-sr-(hQExitC? d«二0x0 j* we二OxOj, CndLint=0x0. =0x0, Ini^LgftZntry=0, Stdlnput-0曲# StOulput=0x0^ StdError=0x0, IxitCtAa=0x0 Syitifli■CUQ Friojity=枫 Fas-0x803fb966,□t>ject7able=0®S03£bdC6, ThretdListHf-ad=t Next=QieO, Fr*v-OtO L_ FrimoryThraed.-OiOjWadtListMe^d-|[ ■Htjji电*CkOj,Trtv二OWJ h IrnegeH^re-0^0, OndLint=0x0^ 1^£: 诃如e二(MX Im-ags-En'try—0』 St^Lt-pnl-Qttflj StdOictjut■OnOj Std£xF9T=QkQp ExitCWii—Cixtl Trioi'ity=血① Fas-0x803 'Ubject'Iible=UiBOJtbdtG, ThraidListdtad=f Hext=CteSOSfkaEc. Fr=CHffKfliafc Firimtry-TJuraed-OsO,WutListll^d-[ Fexl-OaO,. Trtv二0x0 lmEgeHajiE-UkO^Qnd^ine=JxO.口>有百*Ba耳e二0x0.Im-agsEntry=0』StdlEpUt-QkOj ■ChiQi*St^£rrgr=Qk-0,)EKitCode=CbcO Sy> Friwity=XS*r&s-Ox前mftaeE OMscliable=listUd上b弓 Tkrwd£i毎tlie显-( Nsxt=Dx303£b«.fcB F”廿-DseSCGfb^fe Syctan--OaiC; Friority二Os: 孔 Pn=t缺3ffe9施 □tjwtTable=0x813fb9SPH TJueadLiait-He^d=[K®ct二Ih已昭fb就匚=OjiCODfLiaXt £y^m■0x0, Frion冷二0-nSa Fh=0龙CDftS附 ObjietTtbU=0边岀的伯& Thre*dLi5tSe=&d-{ lasrt二口丸02应厘 frev-OaEOOSftitfc SyEt^Fi=QmO,friarLty二DxB. Pis=(1油03锂能密 O'hjectlftbL*=叶BMfbH冃$ Jhxe-a.dI4-SiJle-ad={ lf«t=lha)3fbaf^ Ti«¥-(hCOJfLudk Prin^ryThflrwd~QxQ#InitListHead-{ N^l且OxJCOfblOQ,Fray二0x5C3fbl0a PrirfcarjTteeid二0前』 WdiLictHtad={ =OKeoa^we. Pi-ex=0Ke03±l: .bJ8 Frin: iryltiraad-CxO=[彷吋二nTfir^fbhrR.Pr«r=Oiec3£Kiioa Prim^rvThfead=0盂心 Wd.tLLStKftad=j Esst=OxEOaftfeW. Prev=fe8O3£LBBe Ina^eM^me-LbcLl』Cndliw=OteO,.IneBase-ftcC1.Ina^oEritry二0^ -丁wO#S^dJu^put・0x0,St(Error=0310#Exi.tCode=(9曲 Irx^sKtrnw=OxOCOOlOD"AIVHelJo.欄 ■ZudLine—OjdO,TrmgaBt<*=OmO^ImageEjitry斗Q, StdinpTit-CicD, StdJOitfUft.=0»0. Stdlrror-GmD;EjitCute二OdJi InttitNuit-QxDO3fblj3C> CniLine-lJiCp =GmDa IhUKefiJitry-0,Stdinput-OhI,StJDiarlgt=OxD.StJIrr^r_OnO,EwritCode-UsO ] Iik^tK^hiq-gBCOElbSD CnrlTiTLE-0討0[ Tim刖=OkD, InageEaU"^占口丿 51dlEip-u-t-Gxlfl ScdDu^ut=W StdErrer-QkD3 EiitCDie二DxD 接下来调试初始化进程控制块中各个成员变量的过程: 当从PspCreateProcessEnvironment函数返回至U PsCreateProcess函数后,停止按F10。 此时“监视”窗口中已经不能再显示表达式*NewProcess的值了,在PsCreateProcess函数中是使用ProcessObject指针指向进程控制块的,所以将表达式*ProcessObject添加到“监视”窗口中就可以继续观察新建进程控制块中的信息。 接下来继续使用F10一步步调试PsCreateProcess函数中的代码,同样要注意进程控制块中的成员变量的变化: Syxt&n>=QkD^ Triori"二OrEI*fas=心血俎9迫 CbjsetT^l-奮Cw833fl0e3,ThraaJLirtH^d-{=口曲OJfb址匚r;M-3? t&OOaa£E I Ernaz-ylliraid=OzO,ftaHL]? tX*a4=t Hwx=3«M3rbbJ0.P“r=0^303fbLle L Ima^tWwn^-OMfriirhb^ri"A/\\He11o.翱e< GmdLiLHe-D=Qj Im归時电匚0=0»C^ JmA^aE-ctry二fl. StdLilptt-010,StJJulpul=0码 EtdZrrcr=GzQ#feeitfUa=QxO g严电飾■OwO, Priority二Q^Sf Fz二o^aosfbses,OKjtetTshil#=DwBO3ft4r08jT丘備讥Ml加: 詞=iFfiMrt二OiBOrSfbafc, Ire*-0x803fbifc FrimaryThrtail二DuO. WaitLiStHecd-{ Fax*=n-ifinjfbhriB.Irev=OxBDSfbbQSh I"述-DxGODnrLOO 'ii-LVHsllo池a"” CndLijtemChD. Ia«*aJ««-IhQ Intpe-Zatry=Q, ifJ*Trtpii<=Os.1jStdun: jut=DlDdSlcErrflr-OttO,EriiCDtle-Dwil Sfitw-(hq frioTLly=OxB. F沙十 □hjKtTabla=QriBUJfM舐 T*E4,dLi=\He4d—[Eatl=(h<8O3fbafe, -0就OJflvIk } PrimsuvThresd二0^0, W・itL起IK心胡s( Me联二OK6O3ft-tre.Prev=0KEO3n: .BBe L 工叶“IT«陌=0N.6CSfbb3D A: VSHeLR.exe* CndLijlc—0x0, -OkO^In^geELU"^=片 S^dinpiLt-OarljStdCM^ut-OjcO., SitdErrer-0x0^ EnttDde=DxD Syittn-OvQ, Fricrtty-GcEL P辽三缶铀3ft站缶01jj*crT*hL*=(liriBOJfhAtfSB,T}itca.ILis-{ fext=0s603fb*fe, =O^COSfbttfQ FrimaryTtuesd二0x0,和itL注IH自扁-{ IF*=OM603fbbD&Pfareir=血SO言fU>DE L IvKigsMunv-Qk9QO£IL3D nA'^Hello詡k Zn>iLiAc—Oj? On Tm电■触"=Osrf), In^feZiLtry二耳 St-GkJL“ StiOii^jut-0x2』St^rrflr-OhDp EzitCodie-QcD } Syetan=OmC^friorLty二CkB. =t闊 ObjectTabL*=OxB03fb9KL TJixeadListH零皿=[U&El-(h803ifbaf—Tier=OjtC03att£t }. Friifcar^ThTeid-OixO? WdiLLcMtad={ UCKL=CKeO5fW>30.Pirsir=0Ke03£BbJ8 L T A: l\: HeLlo.鶴君二 ■Jmdl_iA.*e■=■OjdO,Tfl«£AKt^4=HkO,IfiageEiLtry-D,Stdlrtput-Hl,SldOtiipul=OkZ^StiErrflr-CwO,JIiitCn.de二CkDi Systsn-QkO』 Friority二Cbc34 Pw=OiiBOaAM^ O^jeetT*hl*=n«R03fb^^ ThrueiliintHud~{Hest=方fb吐巳 Ii«v-OjhCOSflyXc L FrimaryThresd-0^0, ¥exx=OszEOSftbQ®.Trev=0xEO3£tbD8hIn5Da6C3E¥IO3 卞MMfeLlante". ChviLijiE-0jiD[ Tn.此応.=dvO, IniseliLijry-比 SLunput.-QkIj5^40u: put二gj St^dErrar-QkJ^ EiitCiide-DkJ Syetan-伽心 Frionty二CxB. F«l==t缺倔9皑□kjwnabU=nxW3fb9^ TJu={ lf®ct=0ji8O3fbafc.Ii*r=OzC03£L }. PriifcarjTteeid二OxO? V&ilLLttHiads{ UexL=0k6O3^W6.Fkf=0K803±bb! JS L ImtgQKim*=OxBCOrblSD A: lYHelJo.欄 ■ZridU.ne―OjdO, Tn昭=OmO^ ImageEntry壬Qz Stjinput- StdOunut=0«Z, StdSrrxir-Gk3z J■■-•ri_二H 瓦y電5DrfD^ Ftt>ai-1tjr—DmS# l-it"Ci昶iDlft泌3,伽』/竹“”二rh^Mfih丽民 TkreafiListreadl-{ lest=■6<0? fb卷itrFrsv二rWTPfhsi斤 〕. rrsHyTLi电制-go. ¥mLk5tKtfrd={ lexl=■CM6Cefbtgfitv■CMOC'fbbDO L.—*
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 实验 第三 进程 创建 0814000244
![提示](https://static.bdocx.com/images/bang_tan.gif)