操作系统实验-第三讲-进程的创建_第1页
操作系统实验-第三讲-进程的创建_第2页
操作系统实验-第三讲-进程的创建_第3页
操作系统实验-第三讲-进程的创建_第4页
操作系统实验-第三讲-进程的创建_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、精选优质文档-倾情为你奉上操作系统实 验 报 告课程名称操作系统实验实验项目名称进程的创建学号班级姓名专业计算机科学与技术学生所在学院计算机科学与技术学院指导教师初妍实验室名称地点21#428 哈尔滨工程大学计算机科学与技术学院一、实验概述1. 实验名称进程的创建2. 实验目的(1)练习使用 EOS API 函数 CreateProcess 创建一个进程,掌 握创建进程的方法,理解进程和程序的区别。(2)调试跟踪 CreateProcess 函数的执行过程,了解进程的创 建过程,理解进程是资源分配的单位。3. 实验类型验证型实验4. 实验内容3.1 准备实验3.2 练习使用控制台命令创建 EO

2、S 应用程序的进程3.3 练习通过编程的方式让应用程序创建另一个应用程序的进程3.4 调试 CreateProcess 函数3.5 调试 PsCreateProcess 函数3.6 练习通过编程的方式创建应用程序的多个进程二、实验环境操作系统 windos xp编译器 OS Lab语言 c语言3、 实验过程1. 设计思路创建10个进程时,可以使用 PROCESS_INFORMATION 类型定义一个有 10 个元素的数组,每一个元素对应一个进程。使用一个循环创建 10 个子进程,然后再使用一个循环等待 10 个子进程结束,得到退出码后关闭句柄。2. 算法实现在创建10个进程的程序中,为了保证只

3、有在10个进程都创建成功的情况下才执行后续操作,引入一个变量locked,只有10个程序都创建成功时locked=1,出现创建失败的情况时locked=0,当locked=1时再执行后续操作。3. 需要解决的问题及解答问题1: 程序创建2个进程创建的情况下,实验指导P133-4的*NewProcess和6的*ProcessObject变化情况,监控变量界面截图。(答案见3.5)问题2:尝试根据之前对PsCreateProcess函数和PspCreateProcessEnvironment函数执行过程的跟踪调试,绘制一幅进程创建过程的流程图。问题3:思考与练习,在源代码文件NewTwoProc.

4、c提供的源代码基础上进行修改,要求使用hello.exe同时创建10个进程。要给出源代码及解释和运行界面截图。(代码见“源程序并附上注释”部分) 4. 源程序并附上注释使用 hello.exe 同时创建 10 个进程,代码如下:#include"EOSApp.h"int main(int argc,char*argv)STARTUPINFO StartupInfo; PROCESS_INFORMATION jincheng10;ULONG ulExitCode;/子进程退出码INT nResult=0;/main函数返回值。0表示成功,非0表示失败。 #ifdef_DEBU

5、G_asm("int$3n nop"); #endifprintf("Create two processes and wait for the processes exit.nn");/使子进程和父进程使用相同的标准句柄。StartupInfo.StdInput=GetStdHandle(STD_INPUT_HANDLE);StartupInfo.StdOutput=GetStdHandle(STD_OUTPUT_HANDLE);StartupInfo.StdError=GetStdHandle(STD_ERROR_HANDLE);int i,j,k,

6、l,m,n;int locked=1;for(j=0;j<10;j+)/同时创建10个进程if(CreateProcess("A:Hello.exe",NULL,0,&StartupInfo,&jinchengj);/创建成功什么都不执行else/创建失败,输出失败信息printf("CreateProcess Failed,Error code:0x%X.n",GetLastError();nResult=1;locked=0; /locked为o,则说明10个进程中有失败的,后续操作不再进行 if(locked=1) /创建子进

7、程成功,等待子进程运行结束。for(k=0;k<10;k+)WaitForSingleObject(jinchengk.ProcessHandle,INFINITE);/得到并输出子进程的退出码。for(l=0;l<10;l+)GetExitCodeProcess(jinchengl.ProcessHandle,&ulExitCode);printf("nThe process%d exit with%d.n",l+1,ulExitCode);/关闭不再使用的句柄。for(m=0;m<10;m+)CloseHandle(jinchengm.Proc

8、essHandle);CloseHandle(jinchengm.ThreadHandle); /end ifreturn nResult;5. 程序运行时的初值和运行结果3.1 准备实验建立一个EOS Kernel 项目和 EOS 应用程序项目。3.2 练习使用控制台命令创建 EOS 应用程序的进程将本实验文件夹中的Hello.exe文件拖动到FloppyImageEditor工具窗口的文件列表中释放,Hello.exe文件即被添加到软盘镜像文件中,按F5启动调试,在EOS的控制台中输入命令“A:Hello.exe”后回车,结果如下图:3.3 练习通过编程的方式让应用程序创建另一个应用程序的

9、进程使用 NewProc.c 文件中的源代码替换之前创建的 EOS 应用程序项目中的 EOSApp.c 文件内的源代码,F5 启动调试,激活虚拟机窗口查看应用程序输出的内容:3.4 调试 CreateProcess 函数F5 启动调试 EOS 应用程序,在 main 函数中调用 CreateProcess 函数的代码行(第 57 行)添加一个断点。按 F5 继续调试,在断点处中断。 按 F11 调试进入 CreateProcess 函数。在“调试”菜单的“窗口”中选择“反汇编”,会在“反汇编”窗口中显示 CreateProcess 函数的指令对应的反汇编代码。“反汇编”窗口的左侧显示的是指令所

10、在的虚拟地址。可以看到所有指令的虚拟地址都大于 0x,说明内核( kernel.dll) 处于高 2G 的虚拟地址空间中,如图:设置 main 函数的调用堆栈帧为活动的。在“反汇编”窗口中查看 main 函数的指令所在的虚拟地址都是小于 0x,说明应用程序( eosapp.exe)处于低 2G 的虚拟地址空间中,如图:3.5 调试 PsCreateProcess 函数在 PsCreateProcess 函数中找到调用 PspCreateProcessEnvironment 函数的代码行( create.c文件的第 163 行), 并在此行添加一个断点。 按 F5 继续调试,到此断点处中断。按

11、F11 调试进入 PspCreateProcessEnvironment 函数。在调用 ObCreateObject 函数的代码行( create.c 文件的第 418 行)添加一个断点。按 F5 继续调试,到此断点处中断。按 F10 执行此函数后中断。将表达式*NewProcess 添加到“监视”窗口中,继续一步步调试可以观察到进程控制块的成员变量的值的变化,如下图:接下来调试初始化进程控制块中各个成员变量的过程:当从 PspCreateProcessEnvironment 函数返回到 PsCreateProcess 函数后,停止按 F10。此时“监视”窗口中已经不能再显示表达式*NewProcess 的值了,在PsCreateProcess 函数中是使用ProcessObject 指针指向进程控制块的,所以将表达式*ProcessObject 添加到“监视”窗口中就可以继续观察新建进程控制块中的信息。接下来继续使用 F10 一步步调试 PsCreateProcess 函数中的代码,同样要注意进程控制块中的成员变量的变化:3.6 练习通过编程的方式创建应用程序的多个进程用 NewTwoProc.c 文件中的源代码替换 EO

温馨提示

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

评论

0/150

提交评论