操作系统实验第三讲进程的创建0814000244.docx

上传人:b****7 文档编号:10091155 上传时间:2023-02-08 格式:DOCX 页数:19 大小:62.26KB
下载 相关 举报
操作系统实验第三讲进程的创建0814000244.docx_第1页
第1页 / 共19页
操作系统实验第三讲进程的创建0814000244.docx_第2页
第2页 / 共19页
操作系统实验第三讲进程的创建0814000244.docx_第3页
第3页 / 共19页
操作系统实验第三讲进程的创建0814000244.docx_第4页
第4页 / 共19页
操作系统实验第三讲进程的创建0814000244.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

操作系统实验第三讲进程的创建0814000244.docx

《操作系统实验第三讲进程的创建0814000244.docx》由会员分享,可在线阅读,更多相关《操作系统实验第三讲进程的创建0814000244.docx(19页珍藏版)》请在冰豆网上搜索。

操作系统实验第三讲进程的创建0814000244.docx

操作系统实验第三讲进程的创建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.—*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 财务管理

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

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