10执行
此函数后中断。将表达式NewProcess添加到“监视”窗口中。将鼠标移动到“监视”窗口中此表达式的“值”属性上,会弹出一个临时窗口,在临时窗口中会按照进程控制块的结构显示各个成员变量的值,值都为0。在代码行NewProcessPasMmCreateProcessAddressSpace添加一个断点,按F5继续调试,按F10执行此行代码后中断。使用F10一步步调试PspCreateProcessE
viro
me
t函数中后面的代码,查看“监视”窗口中NewProcess
f表达式的值。当从PspCreateProcessE
viro
me
t函数返回到PsCreateProcess函数后,停止按F10。将表达式ProcessObject添加到“监视”窗口中。继续使用F10一步步调试PsCreateProcess函数中的代码。当调试到PsCreateProcess函数的最后一行代码时,查看进程控制块中的信息,按F5继续执行。激活虚拟机窗口查看新建进程执行的结果。
6练习通过编程的方式创建应用程序的多个进程;使用NewTwoProcc文件中的源代码替换EOS应用程序项目中EOSAppc文件
内的源代码,生成后启动调试,查看多个进程并发执行的结果。
33思考与练习1在源代码文件NewTwoProcc提供的源代码基础上进行修改,要求使用helloexe同
时创建10个进程。然后尝试调试PspCreateThread函数,观察线程控制块(TCB)初始化的过程。
3在实验3中,在PsCreateProcess函数中调用PspCreateProcessE
viro
me
t函数后又先后调用了PspLoadProcessImage和PspCreateThread函数,分析这些函数的主要功能。能够交换这些函数被调用的顺序吗?为什么
答:不能调换顺序;创建进程最主要的操作就是创建进程控制块PCB并初始化其中的各种信息(也就是为进程分配各种资源)。所以在PsCreateProcess函数中首先调用了PspCreateProcessE
viro
me
函数来创建进程控制块。因为PspCreateProcessE
viro
me
t函数的主要功能是创建进程控制块并初始化其中的部分信息,并且为进程创建了地址空间和分配了句柄PspLoadProcessImage是将进程的可执行映像加载到了进程的地址空间中。PspCreateThread创建了进程的主线程。这三个函数被调用的顺序是不能够改变的,就向上面描述的,加载可执行映像之前必须已经为进程创建了地址空间,这样才能够确定可执行映像可以被加载到内存的什么位置;在创建主线程之前必须已经加载了可执行映像,这样主线程才能够知道自己要从哪里开始执行,执行哪些指令。
实验4:线程的状态和转换
41实验目的:1调试线程在各种状态间的转换过程,熟悉线程的状态和转换
f2通过为线程增加挂起状态,加深对线程状态的理解42实验内容:
1准备实验:启动OSLab,新建一个EOSKe
el项r