ImageVerifierCode 换一换
格式:DOCX , 页数:47 ,大小:21.22MB ,
资源ID:2404704      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/2404704.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(操作系统实验.docx)为本站会员(b****1)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

操作系统实验.docx

1、操作系统实验操作系统实 验 报 告课程名称操作系统实验课程编号201420110学号2015201128班级20152011姓名赵子翔专业软件工程年级2015级指导教师王红滨实验室名称地点21#B 427实验室 哈尔滨工程大学软件学院 实验一:进程的创建一、实验概述1. 实验目的 (1)练习使用EOS API函数CreateProcess创建一个进程,掌握创建进程的方法,理解进程和程序的区别。 (2)调试跟踪CreateProcess函数的执行过程,了解进程的创建过程,理解进程是资源分配的单位。2. 实验内容 (1)准备实验 (2)使用控制台命令创建EOS应用程序的进程 (3)练习练习通过编程

2、的方式让应用程序创建另一个应用程序的进程 (4)调试CreateProcess函数 (5)调试PsCreateProcess函数 (6)练习通过编程的方式创建应用程序的多个进程2、实验环境实验环境:OS Lab集成环境操作系统:EOS操作系统三、实验过程1. 设计思路和流程图2. 算法实现 略3. 需要解决的问题及解答 略4. 主要数据结构、实现代码及其说明 略5. 源程序并附上注释#include EOSApp.h/ main 函数参数的意义:/ argc - argv 数组的长度,大小至少为 1,argc - 1 为命令行参数的数量。/ argv - 字符串指针数组,数组长度为命令行参数个

3、数 + 1。其中 argv0 固定指向当前进程所执行的可执行文件的路径字符串,argv1 及其后面的指针指向各个命令行参数。/例如通过命令行内容 a:hello.exe -a -b 启动进程后,hello.exe 的 main 函/数的参数 argc 的值为 3,argv0 指向字符串 a:hello.exe,argv1 指向/参数字符串 -a,argv2 指向参数字符串 -b。int main(int argc, char* argv)/ 启动调试 EOS 应用程序前要特别注意下面的问题:/ 1、如果要在调试应用程序时能够调试进入内核并显示对应的源码,/ 必须使用 EOS 核心项目编译生成完

4、全版本的 SDK 文件夹,然/ 后使用此文件夹覆盖应用程序项目中的 SDK 文件夹,并且 EOS/ 核心项目在磁盘上的位置不能改变。/ 2、在启动调试应用程序之前必须首先删除/禁用所有的断点,在断/ 点中断 (int 3) 被命中后才能重新添加/启用断点,否则启动/ 调试会失败。 STARTUPINFO StartupInfo; PROCESS_INFORMATION ProcInfo10; int i=0; ULONG ulExitCode;/ 子进程退出码 INT nResult = 0;/ main 函数返回值。0 表示成功,非 0 表示失败。#ifdef _DEBUG _asm(int

5、 $3n nop);#endif#endif / _DEBUG printf(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); / 为一个应用程序同时创建两个

6、子进程。 for( i=0; iPas=MmCreateProcessAddressSpace();添加一个断点,继续调试,并查看监视窗口,此时进程控制块的成员变量 Pas 的值已经不再是 0。说明已经初始化了进程的 4G 虚拟地址空间;15)逐过程一步步调试PspCreateProcessEnvironment 函数中后面的代码,在调试的过程中根据执 行的源代码,查看“监视”窗口中*NewProcess 表达式的值,观察进程控制块中哪些成员变量是 被哪些代码初始化的,哪些成员变量还没有被初始化;当进入if(NULL=NewsProcess-Pas) 进入NewProcess-PrimaryT

7、hread=NULL 时 16)当从PapCreateProcessEnvironment函数返回到PsCreateProcess函数后,停止逐过程调试,。此时“监 视”窗口中已经不能再显示表达式*NewProcess 的值了,在 PsCreateProcess 函数中是使用 ProcessObject 指针指向进程控制块的,所以将表达式*ProcessObject 添加到“监视”窗口中就 可以继续观察新建进程控制块中的信息; 17)接下来继续使用 F10 一步步调试 PsCreateProcess 函数中的代码,同样要注意观察执行后的代码 修改了进程控制块中的哪些成员变量。当调试到 PsCr

8、eateProcess 函数的最后一行代码时,查看 进程控制块中的信息,此时所有的成员变量都已经被初始化了(注意观察成员 ImageName 的值); 进入if(!EOS_SUCCESS(Status))时 18)继续执行,EOS 内核会为刚刚初始化完毕的进程控制块新建一个进程。激活虚拟机窗口查看 新建进程执行的结果,结束此次调试,并删除所有的断点; 19)使用 OS Lab 打开本实验文件夹中的参考源代码文件 NewTwoProc.c,仔细阅读此文件中的源代码。使 用 NewTwoProc.c 文件中的源代码替换 EOS 应用程序项目中 EOSApp.c 文件内的源代码,生成后启动调试, 查看多个进程并发执行的结果。 多个进程并发时,EOS 操作系统中运行的用户进程如下图,验证一个程序(hello.exe)可 以同时创建多个进程。两个进程:十个进程:四实验体会 通过本次试验了解了进程的创建过程,并利用添加断点、监视的方式观察每一步的执行状况,加深了对进程、程序区别的理解。1) 进程是动态的,而程序是静态的;2) 程序是可以长时间存在的,而进程是暂时的,当程序运行时进行创建,是程序的一次执行;3) 进程是计算机分配资源的单位,而程序不是;4) 程序和进程不是一一对应的,一个程序可以有多个进程。 在进行程序调试的时候,了解逐过程和逐语句执行

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1