进程的创建实验报告_第1页
进程的创建实验报告_第2页
进程的创建实验报告_第3页
进程的创建实验报告_第4页
进程的创建实验报告_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、操作系统实验报告课程名称操作系统实验实验项目名称进程的创建学号班级20100612专业电脑科学与技人学生所在学院电脑科学与技术指导教师实验室名称地点电脑基础第七实验室21B475哈尔滨工程大学电脑科学与技术学院、实验概述1 .实验名称进程的创建2 .实验目的(1)练习使用EOSAPI函数CreateProcess&J建一个进程,掌握创建进程的方法,理解进程和程序的区别。(2)调试跟踪CreateProcess函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位3 .实验类型验证性实验4 .实验内容二、实验环境EO魄作系统三、实验过程1. 设计思路和流程图2. 算法实现3. 需要

2、解决的问题及解答在源代码文件NewTwoProc.碌1供的源代码基础上进行修改,要求使用hello.exe同时创建10个进程。提示:可以使用PROCESS_INFORMATOte义一个有10个元素的数组,每一个元素对应一个进程。使用一个循环创建10个子进程,然后再使用一个循环等待10个子进程结束,得到退出码后关闭句柄。答:后文中,有此题解决方案。(2)尝试根据之前对PsCreateProcess函数和PspCreateProcessEnvironment函数执行过程的跟踪调试,绘制一幅进程创建过程的流程图。(3)在PsCreateProcess函数中调用了PspCreateProcessEnv

3、ironment函数后又先后调用了PspLoadProcessImag琲口PspCreateThread函数,学习这些函数的主要功能。能够交换这些函数被调用的顺序吗?思考其中的原因。答:PspCreateProcessEnvironment的主要功能是创建进程控制块并且为进程数被调用的顺序是不能够改变的创建了地址空间和分配了句柄表。PspLoadProcessImagel1将进程的可执行映像加载到了进程的地址空间中。PspCreateThread创建了进程的主线程。这三个函就向上面描述的加载可执行映像之前必须已经为进程创建了地址空间这样才能够确定可执行映像可以被加载到内存的什么位置在创建主线程

4、之前必须已经加载了可执行映像这样主线程才能够知道自己要从哪里开始执行,执行哪些指令。因此不能交换他们的顺序。4 .主要数据结构、实现代码及其说明主要使用PROCESS_INFORMATOte义一个有10个元素的数组,每一个元素对应一个进程。使用一个循环创建10个子进程,然后再使用一个循环等待10个子进程结束,得到退出码后关闭句柄。5 .源程序并附上注释使用hello.exe同时创建10个进程的原代码及注释如下:#include"EOSApp.h"/main函数参数的意义:/argc-argv数组的长度,大小至少为1,argc-1为命令行参数的数量。/argv-字符串指针数组

5、,数组长度为命令行参数个数+1。其中argv0固定指向当前/进程所执行的可执行文件的路径字符串,argv1及其后面的指针指向各个命令行/参数。/例如通过命令行内容"a:hello.exe-a-b"启动进程后,hello.exe的main函/数的参数argc的值为3,argv0指向字符串"a:hello.exe",argv1指向/参数字符串"-a",argv2指向参数字符串"-b"。intmain(intargc,char*argv口)/启动调试EOS应用程序前要特别注意下面的问题:/1、如果要在调试应用程序时能够调

6、试进入内核并显示对应的源码,/必须使用EOS核心项目编译生成完全版本的SDK文件夹,然/后使用此文件夹覆盖应用程序项目中的SDK文件夹,并且EOS/核心项目在磁盘上的位置不能改变。/2、在启动调试应用程序之前必须首先删除/禁用所有的断点,在断/点中断(int3)被命中后才能重新添加/启用断点,否则启动/调试会失败。STARTUPINFOStartupInfo;PROCESS_INFORMATIONProcInfo10;ULONGulExitCode;/子进程退出码INTnResult=0;/main函数返回值。0表示成功,非0表示失败。inti,j;/#ifdef_DEBUG/_asm(&qu

7、ot;int$3nnop");/#endifprintf("Create10processesandwaitfortheprocessesexit.nn");/使子进程和父进程使用相同的标准句柄。StartupInfo.StdInput=GetStdHandle(STD_INPUT_HANDLE);StartupInfo.StdOutput=GetStdHandle(STD_OUTPUT_HANDLE);StartupInfo.StdError=GetStdHandle(STD_ERROR_HANDLE);/为一个应用程序同时创建10个子进程。for(i=0;i&

8、lt;10;i+)if(CreateProcess("A:Hello.exe",NULL,0,&StartupInfo,&ProcInfoi);elsefor(j=0;j<i;j+)WaitForSingleObject(ProcInfoj.ProcessHandle,INFINITE);/得到并输出子进程的退出码。GetExitCodeProcess(ProcInfoj.ProcessHandle,&ulExitCode);printf("nTheprocess%dexitwith%d.n",j,ulExitCode);/

9、关闭不再使用的句柄。CloseHandle(ProcInfoj.ProcessHandle);CloseHandle(ProcInfoj.ThreadHandle);printf("CreateProcessFailed,Errorcode:0x%X.n",GetLastError();nResult=1;returnnResult;for(i=0;i<10;i+)/创建子进程成功,等待子进程运行结束。WaitForSingleObject(ProcInfoi.ProcessHandle,INFINITE);/得到并输出子进程的退出码。GetExitCodeProce

10、ss(ProcInfoi.ProcessHandle,&ulExitCode);for(i=0;i<10;i+)printf("nTheprocess%dexitwith%d.n",i,ulExitCode);/关闭不再使用的句柄。CloseHandle(ProcInfoi.ProcessHandle);CloseHandle(ProcInfoi.ThreadHandle);returnnResult;6.程序运行时的初值和运行结果a.使用控制台命令创建EOSE用程序进程b.查看应用程序创建另一个应用程序的进程的执行结果(OSLabPC-licrosoftVi

11、rtualPC2004ActionEditCDJloppxMeLpCflNSriLE-l(FrfissCtrI+F1FBtnsuitchcnnsnlf:uindou.r)HeicametoEOSshe11>iitnnmArsEOSApprext?CreateaprocessanduwitfortheprocesssitHello,world1HeiLo,uorIdfHello,world*Mcllo.uorld*Heilojuorldlycbye?Ticprocessexitmith0,p;ED3App.exeexituItii0x00000060.15c.调试进程控制块的创建过程监视输

12、巴名称*Hewri wee is调试Syittci -。血 Pr) ori +y = 0w0H F« - OxBOQfM ObjectTsble = 0x0, Thr a a.lLi = tJHa -a. - lesct = OyO, Fr#v = ChdJPr i m aryThread - OkO VaitListKfted = Tmki - 口才1 Prpv = DuO制作软盘蜡舞.正在启动Virtual PC 用邰,或,.EL q喘毕丽砌¥,Im*geJamE - OiiO, CmJLig s Ok0j = 0x0, ImugeEntry 二。 St虹nput -

13、OzOj stdOu:put obp StJError = 0x0, Exi tC»d« = 0x0行439季崇完0J:)二1eVltlD.将鼠标移动到“监视”窗口中此表达式的“值”属性上,会弹出一个临时窗口,在临时窗口中会按照进程控制块的结构显示各个成员变量的值可以参考PROCESS构体的定义。由于只是新建了进程控制块,还没有初始化其中成员变量,所以值都为00d.接下来调试初始化进程控制块中各个成员变量的过程:1 .创建进程的地址空间,即4Gs拟地址空间。在代码行create.c文件的第437行NewProcess->Pas=MmCreateProcessAddre

14、ssSpace();添加一个断点。2 .按F邮续调试,到此断点处中断。3 .按F10执行此行代码后中断。“监视”窗口中查看进程控制块的成员变量Pas的值已经不再是0。说明已经初始化了进程的4Gg拟地址空间。使用F10L步步调试PspCreateProcessEnvironment函数中后面的代码,在调试的过程中根据执行的源代码,查看“监视”窗口中*NewProcessg达式的值结果如名称*MewPrcessSyshea=Qb<(XPriority=MO,Fas=0*803£1048,Objftcl.Table=OK803fc2a8,Thr«tdLiitatd=lT*t

15、-。延Frav=(h(口就转J*_PrimaryThread-OtetO,WaitLiStHead=M色ict=MO,Pr&v=ObtOLm,整Nm,e二Qm。,CmUin。-SQ,Em号菖eBase=QscQ1gImasgelntry二口)Stdllnput-0x0,Si.dOu.tputQM/StiError=0x0,ExitCod*=0x0Q乂类sti一李崇亮S:)AdobeReader,监视名称«NewPro<tKi箱出国西腌果1司查檄IEyTam二OiO,Priorily-0x8,PasHOsSOSffeJBeS),3bj«tTbH«=0x

16、603fc2Tkr«adListlie4d=fHext=OiD,ftev-0X0LPrir»aryThr*ad=OicD,faitListMetd=Hext=OzOPrev-0x0类:0x8,F&m=Ojl.Itla-rt>h调试制作软盘镜像二正在自动VirTualHJ.开始调试.<111就绪hIm自钾Hs电-OkOCmdLine=0k&rn=Ok0),ImageEnjry-0,StdlnpuL-0x0,StdOutpit=OxO;Stdlrror=0x0,ExitCodg;=DkO输出0新点J舱廊堆根行际监视JIAdobeRaid.44XaPP

17、_r名褥*HwFr&ctssSyttn=0x04Priority=&&Fas=OMSOSfibfieSjObjectTable-0x303£c2a8,Tlu"(Nsx<=OxaOSfbTfc,Frev=Q*8Q3fbT3PrimaryThread-Ox。,iitListHtad=N(xt=OmO,Prev-0x0tQX输出1类调试Sc瓦Fu-0k.xti制作软盘镜像一.正在启动VirtualPC.,.开始调试.ai金阕!1m喻出口新思册调用逐事查找结果:不查找更就绪高m:)*第三讲j,ImgelfairTie=3x0CrhniLliLe-。闻j

18、Imtgelas=3x0,ImagtEntry=0,5tdimjut=OkOpStdOntput=DxO,StdError-OteO,ExitC0de=OteD3IAdobeRe.ei>sapp一,.行47Microsof.,奋视名称*HewFrocess力修第三讲不查找结果11事董曲Systcm-0工口工Priority=口响Pas=QkEQ3fb6用ObjectTatie=Ox&CG&ZaS.ThreadLi.*stMead=:=01x003£17Xc,Prev"0x003£t7fcLPrifliaryrhr-tad=0x0,WaitListlk鼠二Next=0x003fbaCB,Prev=&K8O3a0C8匕m*gwN孙。-0x0,CmUiTte-Qk。.工mHgef监电QkO,ImageEntry=QStdlnjjul-OkO,StdOutpat=OMOfStdError=0x0,Exi=0x0PC输出葵5:口党的Pas镜盘动试软启作在始制正开I官输出断点的调用墙/行4g中文(中国)信AdobeReader".号口辐ppTev

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论