- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
操作系统实验第三讲进程的创建解析
操作系统
实 验 报 告
课程名称 操作系统实验 实验项目名称 进程的创建 学号 班级 姓名 专业 计算机科学与技术 学生所在学院 计算机科学
与技术学院 指导教师 初妍 实验室名称地点 21#428
哈尔滨工程大学
计算机科学与技术学院
一、实验概述
1. 实验名称 进程的创建
实验目的 (1)练习使用 EOS API 函数 CreateProcess 创建一个进程,掌握创建进程的方法,理解进程和程序的区别。
调试跟踪 CreateProcess 函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。
3. 实验类型 验证型实验
实验内容 3.1 准备实验
3.2 练习使用控制台命令创建 EOS 应用程序的进程
3.3 练习通过编程的方式让应用程序创建另一个应用程序的进程
3.4 调试 CreateProcess 函数
3.5 调试 PsCreateProcess 函数
3.6 练习通过编程的方式创建应用程序的多个进程
二、实验环境
操作系统 windos xp
编译器 OS Lab
语言 c语言
实验过程
1. 设计思路
创建10个进程时,可以使用 PROCESS_INFORMATION 类型定义一个有 10 个元素的数组,每一个元素对应一个进程。使用一个循环创建 10 个子进程,然后再使用一个循环等待 10 个子进程结束,得到退出码后关闭句柄。
2
问题3:思考与练习,在源代码文件NewTwoProc.c提供的源代码基础上进行修改,要求使用hello.exe同时创建10个进程。要给出源代码及解释和运行界面截图。(代码见“源程序并附上注释”部分)
4. 源程序并附上注释
使用 hello.exe 同时创建 10 个进程
3.1 准备实验
EOS Kernel 项目 EOS 应用程序项目。3.2 练习使用控制台命令创建 EOS 应用程序的进程
将本实验文件夹中的Hello.exe文件拖动到FloppyImageEditor工具窗口的文件列表中释放,Hello.exe文件即被添加到软盘镜像文件中按F5启动调试在EOS的控制台中输入命令“A:\Hello.exe”后回车
3.3 练习通过编程的方式让应用程序创建另一个应用程序的进程
使用 NewProc.c 文件中的源代码替换之前创建的 EOS 应用程序项目中的 EOSApp.c 文件内的源代码F5 启动调试激活虚拟机窗口查看应用程序输出的内容
3.4 调试 CreateProcess 函数
F5 启动调试 EOS 应用程序在 main 函数中调用 CreateProcess 函数的代码行(第 57 行)添加一个断点。按 F5 继续调试,在断点处中断。 按 F11 调试进入 CreateProcess 函数。在“调试”菜单的“窗口”中选择“反汇编”,会在“反汇编”窗口中显示 CreateProcess 函数的指令对应的反汇编代码。“反汇编”窗口的左侧显示的是指令所在的虚拟地址。可以看到所有指令的虚拟地址都大于 0说明内核( kernel.dll) 处于高 2G 的虚拟地址空间中
设置 main 函数的调用堆栈帧为活动的。在“反汇编”窗口中查看 main 函数的指令所在的虚拟地址都是小于 0说明应用程序( eosapp.exe)处于低 2G 的虚拟地址空间中
3.5 调试 PsCreateProcess 函数
在 PsCreateProcess 函数中找到调用 PspCreateProcessEnvironment 函数的代码行( create.c文件的第 163 行), 并在此行添加一个断点。 按 F5 继续调试,到此断点处中断。按 F11 调试进入 PspCreateProcessEnvironment 函数。
在调用 ObCreateObject 函数的代码行( create.c 文件的第 418 行)添加一个断点。按 F5 继续调试,到此断点处中断。按 F10 执行此函数后中断。将表达式*NewProcess 添加到“监视”窗口中进程控制块的成员变量
接下来调试初始化进程控制块中各个成员变量的过程:
当从 PspCreateProcessEnvironment 函数返回到 PsCreateProcess 函数后,停止按 F10。此时“监视”窗口中已经不能再显示表达式*NewProcess 的值了,在PsCreateProcess 函数中是使用ProcessObject 指针指向进程控制块的,所以将表达
文档评论(0)