2023年操作系统实验报告 2.docx
华北电力大学实验报告实验名称操作系统实验课程名称 操作系统综合实验专业班级:学 号:指导教师:学生姓名:成 绩:实验日期:营状态的线程也应当可以被挂起并被恢复,读者可以参考第5 . 2.4节中的内容以及图55 来完毕此项改善。注意要设计一些方案对所修改的代码进行全面的测试,保证所做的改善是 对的的。假如完毕了以上改善,请思考一下控制台命令pt需要进行哪些相应的修改? 设计代码STATUS PsResumTh r e ad( 4N HAND L E hTh r ead )(oS T A T US Sta t us;o B 00L In t S t ate;oP THREAD Th read;St a tus = ObR e f 0 bjec t ByHandle(hThrea d , Psp T hreadType, (PV OID 火) &Th r e a d );oif (EOS_SUCCESS(S t a t us) Int S t a te = KeE n ablel n t e rru p t s (F ALSE) ;“/ 关中断 ®®if (Zero = Thread> S tat e ) L i st R e moveE n try (&T h r e a d ->S t a t e L i s t Entr y );o ®Ps p R ea d yThread (Thre ad);P s pThrea d Sc h edule();。 Status = STATUS_SUCCESS;o。 else S t a t us = STATUS_NOT_S U P P OR T ED;®K e Enablelnte r ru p t s (IntState);。 开中断 aObDerefOb j e c t(Thr e ad);°)® r etu r n S t a tus; )实验5进程的同步实验目的和规定.使用E OS的信号量,编程解决生产者一消费者问题,理解进程同步的意义。2 .通过为 线程增长挂起状态,加深对线程状态的理解。1 .调试跟踪EOS信号量的工作过程,理解进程同步的原理。2 .修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同 步的原理。二.实验内容及环节.实验准备1)启动OS Lab。2)新建一介EOS Ker nel项目。3 )生成E OS Kernel项目,从而在该项目文献夹中生成SDK文献夹。4)新建一个EOS应用程序项目。5 )使用在第3步生成的SDK文献夹覆盖E OS应用程序项目文献夹中的SDK文献 夹。2.使用E OS的信号量解决生产者消费者问题1)使用pcc文献中的源代码港换之前创建的EOS应用程序项目中EOS A pp.c文献 内的源代码。2)按F 7生成修改后的EOS应用程序项目。3)按F 5启动调试。OS La b会一方面弹出一个调试异常对话框。4)在调试异常对话框中选择否“,继续执行。5)立即激活虚拟机窗口查看生产者消费者同步执行的过程,如图16)待应用程序执行完毕后,结束本次调试。CONSOLE-1 (Press Ctr1+F1F8 to switch console window.)Meleone to EOS shell>Autorun A AEOSApp.exeProducea 0Consumea0Producea 1Producea ZProducea 3Producea 4Consumea1Producea 5Producea 6Producea 7Producea 8ConsumeazProducea 9Producea 10Producea 11Producea 12Consumea3Producea 13Consumea4Producea 14113调试E O S信号量的工作过程.1 .创建信号量:信号量结构体(SEMAPHO R E)中的各个成员变量是由API函数 Cre a teS e ma p ho r e的相应参数初始化的直看main函数中创建Emp t y和Full 信号量使用的参数有哪些不同,又有哪些相同,思考其中的因素。2 .等待、释放信号量1)等待信号量(不阻塞):生产者和消费者刚开始执行时,用来放产品的缓冲区都是空 的,所以生产者在第一次调用WaitFo r SingleObject函数等待Empty信号量时, 应当不需要阻塞就可以立即返回2)释放信号量(不唤醒):生产者线程通过等待Empty信号量使空缓冲区数量减少 了 1,通过释放Fu 1 1信号量使满缓冲区数量增长了 1,这样就表达生产者线程生产了 一个产品并占用了一个缓冲区。3)等待信号量(阻塞):由于开始时生产者线程生产产品的速度较快,而消费者线程消 费产品的速度较慢,所以当缓冲池中所有的缓冲区都被产品占用时,生产者在生产新的产品 时就会被阻塞.4)释放信号量(唤醒):只有当消费者线程从缓冲池中消费了一个产品,从而产生一介 空缓冲区后,生产者线程才会被唤醒并继续生产14号产品.4.修改EOS的信号量算法1)规定:在目前 EOS Kernel 项目的 p s/semaphore.c 文献中,PsWaitForS em a pho re 函数的 Mil 1 i s e c onds 参数只能是 INFINITE, PsRele ase S e ma p hore函数的ReleaseC otint参数只能是1。现在规定同时修改PsWa itForS e ma pho r e函数和Ps R elease Semap h ore函数中的代码,使这两个参数可以 真正起到作用,使信号量对象支持等待超时唤醒功能和批量释放功能。2 )测试:a,使用修改完毕的EOS Kernel项目生成完全版本的SDK文献夹,并覆盖之前的 生产者消费者应用程序项目的SDK文献夹。b.按F 5调试执行原有的生产者消费者应用程序项目,结果必须仍然与图1 一致。 假如有错误,可以调试内核代码来查找错误,然后在内核项目中修改,并反复环节a。实验六时间片轮转调度-实验目的及规定1 .调试E O S的线程调度程序,熟悉基于优先级的抢先式调度。2 .为EOS添加时间片轮转调度,了解其它常用的调度算法。二 .实验内容及环节1 .准备实验2 .阅读控制台命令r r ”相关的源代码3 .调试线程调度程序a)调试当前线程不被抢先的情况b)调试当前线程被抢先的情况=.为EOS添加时间片轮转调度a )规定:修改p s/sch ed .c文献中的Ps p Roun d Ro bin函数(第3 37行),在其 中实现时间片轮转调度算法。b)测试:三 .实验内容问题及解答修改线程时间片的大小:在成功为EOS添加了时间片轮转调度后,将ps/psp .h第104行定义的TICK S_OF _TIME_SLICE的值修改为1。在EOS控制台中输入命令rr后按回车。观测执行的 效果。还可以按照上面的环节为TICKS_ OF_TIME_SLICE取一些其它的极端值,例 如20或100等,分别观测“r r ”命令执行的效果。通过度析导致执行效果不同的因 素,理解时间片的大小对时间片轮转调度导致的影响。a) TICKS_ OF_TIME_SUC E的值为 19 OS Lab PC - Microsoft Virtual PC 2007*_=. 22 1I Action_Edit_CD_Floppy_HelpCONSOLE-1 (Press Ctrl+F1F8 to switch console uindow.Thread0 (8):22238Thread1 (8):ZZ181ThreadZ (8):ZZ157Thread3 (8):22294Thread4 (8):Z1706Thread5 (8):ZZ393Thread6 (8):22573Thread? (8):Z1871Thread8 (8):22394Thread9 (8):22540Thread10 (8):Z1858Thread11 (8):Z2176Thread1Z (8):22240Thread13 (8):22297Thread14 (8):Z253ZThread15 (8):21618Thread16 (8):22409Thread17 (8):22407Thread18 (8):22436Thread19 (8):21875>b) T 工 CKS_OF_T 工 ME_SLICE 的值为 2 0OS Lab PC - Microsoft Virtc 27I Action Edit CD Floppy HelpCONSOLE-1(Press Ctr1+F1F8 to switch console window.Thread 0(8): ZZ480Thread 1(8): 22819Thread Z(8): Z3356Thread 3(8): Z3117Thread 4(8): 22749Thread 5(8): 21021Thread 6(8): 2244sThread 7C8): ZZZ97Thread 8(8): 23403Thread 9C8): 22612Thread 10(8): Z3757Thread 11(8): ZZZ76Thread 12(8): 21966Thread 13(8): 20924Thread 14(8): Z0550Thread 15(8): ZZ111Thread 16(8): 20848Thread 17(8): Z09Z0Thread 18(8): 21869Thread 19(8): 20701>c) TICKS_OF_TIME_SL ICE 的值为 100$ OS Lab PC- Microsoft Virtual PC 2007I Action Edit CD Floppy HelpCONSOLE-1 (Press Ctrl*FlF8 to switch console window.)Thread 0 (8): 21992Thread 1 (8): 22242Thread 2 (8): 22530Thread 3 (8): ZZ073Thread 4 (8): 22124Thread 5 (8): 21815Thread 6 (8): 21308Thread 7 (8): 22443Thread 8 (8): 22279Thread 9 (8): 21856Thread 10 (8): 22304Thread 11 (8): 21989Thread 12 (8): 21740Thread 13 (8): 22471Thread 14 (8): 2Z053Thread 15 (8): 21952Thread 16 (8): 22166Thread 17 (8): 2Z133Thread 18 (8): 22247Thread 19 (8): 22474>11实验七物理存储器与进程逻辑地址空间的管理一 .实验目的及规定1 .使用E O S的信号量,编程解决生产者一消费者问题,理解进程同步的意义。2.通过为线程增长挂起状态,加深对线程状态的理解。2 .调试跟踪EOS信号量的工作过程,理解进程同步的原理。3 .修改EOS的信号量算法使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。二 .实验内容及环节(1)、准备实验(2)、执行控制台命令pm”,查看物理存储器的信息(3)、分派物理页和释放物理页:a.在pm命令函数中添加分派物理页和释放物理页的代码b.单步调试分派物理页和释放物理页(4 1执行控制台命令"vm”,查看系统进程的虚拟地址描述符信息执行控制台命令"vm”,直看当创建了一个应用程序进程后,系统进程和应用程序进程中虚拟地址描述符的信息(5)、在系统进程中分派虚拟页和释放虚拟页(61在应用程序进程中分派虚拟页和释放虚拟页(7)、结束实验.实现代码及其说明:INT*d ;讦(d = VirtualAllo c(0, s izeof(int) , MEM_R E SERV E |MEM_COMMIT) / /调用API函数Virtu a 1 AH。c ,分派一个整型变量所需的空间,并使用一个整型变量 的指针指向这个空间pr i ntf( " Alloca ted %d byte s v irtu a I mem o ry of 0 x % x n n " ,sizeo f (int),d);printf(" v i rtual memory origina 1 value:0x%xnn"f*d);*d = OxFFFF F F F F;/修改整型变量的值为0 x FFFFF F FFprin tf("vi rtual memory new value : Ox%x n n " ,*d);p rintf ("nWait for 10 se con d s n");SI eep( 10000);/ 调用 API 函数 SI eep,等待 10秒钟。if(V i rtu a IF r e e (d,0,MEM_REL E ASE)/ / 调用 API 函数Vir t ual F ree.释放之前分派的整型变量的空间p r i n t f ( "nRealea s e vi r t u a I memory success ! n");elseprintf ( "re a lea s e errorn");printf("nEnd 1 ess 1 oop!");for (;);else(printf("errorn");retu r n -1;/若不能成功分派,打印出error ,返回1.printf("Hello wo r Id ! n ");ore t urn 0;.心得体会本次实验重要问题在于如何解决异常情况,也就是程序的健壮性。最开始调试结果不对 的,在老师指导下进行了分步调试,修改了部分代码,最后成功了。最大的收获是:纯熟对 代码分步调试,找犯错误。实验八分页存储器管理-实验目的与规定1 .学习i386解决器的二级页表硬件机制,理解分页存储器管理原理。2 .查看EOS应用程序进程和系统进程的二级页表映射信息,理解页目录和页表的 管理方式。3 .编程修改页目录和页表的映射关系,理解分页地址变换原理。二.实验环节与代码:设计代码P RIVATEVOIDCon s oleCmdMemoryM a p(I N HAN DLE S td Handle)BOOL IntState ;U LONG Pf nO f PageDirectory ;ULONG PageTotal = 0;U L ONG Inde x O f D i r E ntry;U LONG IndexO f TableEntry ;P MMPTE_ HARDWARE pPde;0PMMPT E _ HARDWARE pPte;oULONG_PTR PageTab leBa s e;U LONG_PTR Virtu a IBase;o const char * Ou t putForma t = NULL;ASSERT(Psp C urrentProcess = PspSystemPro cess);I ntStat e = Ke E nablelnterru pts ( FALSE); / 关中断oULONG P f nArray2;»MiA 11ocateZeroe d Pages ( 2 , PfnArray);»OutputForma t = "New page f r ame n u mber : 0 x%X, Ox%Xnofp r i nt f (Std Handle, Output Format, PfnArrayO, P f nAr r ayl);Kd b Pr i n t(Out put Form a t, PfnArrayO, PfnArray 1);dndexO f DirEntry = (OxEOOOOO 00 >> 22 );, 虚才以地址的高 10 位是 P DE标号®(PMM PTE_HARDWARE)0xC0300000)IndexOfDi r Entry .PageFrameN umber = P f n Array 0;3(PMMPT E_HARDWARE)0xC03 000 00)IndexOfDirE ntry .Valid = 1?V/有效o ( PMMPTE_HARDWARE)0xC03 0000 0)IndexOf DirEn t ry.W rita ble = 1; o/ 可写®MiFl ushEnti r e Tlb(); / 刷新快表<>P a g e Tabi e B as e = 0 x C 0 000000 + I nd e xO f Di r Ent r y * PAGE_SIZE;JndexOfTableEntry = (OxEOOOOOOO >> 12)& Ox3FF; (PMMPTE_HA R DWAR E )Pa g eTa b leBase I IndexOfTa b leEn t r y.PageFrameNumber = PfnArray 1 ;(P MMPT E _ HA R DWARE ) Pa g eTab 1 eBase) I ndexOf T a bleEntry.Valid = 1; «(PMMPT E _ HARDWARE)PageTableBase ) Ind exO f TableE n t ry.W r itabl e = 1; MiFlu s hEnt i r eTl b (); 刷新快 表JndexOfT ableEn t r y = (OxEOOOlOOO >> 12) & Ox3FF; 。(PMMPT E_HARDWARE) Pag eTa bleBase)In dexO f TableEnt r y.Pa geFram eNumber = P f nArray 1;d(P MM PTE_ HARDWARE ) P ageTabl e Bas e )In d e xO f T a bl e E nt r y.Valid = 1;«( ( PMMPTE_HAR DWA RE)Pa g eTableBase) I ndexOfTabl e Entry .Wr i t a b 1 e = 1 ?Mi FIushEn t ireTlb(); / 刷表<>Ou tputFormat = "Read Memory OxEOOOlOOO : %dnM;fprin t f (StdHandle, Outp utForma t, * (PINT ) OxEOOOlOOO);Kd b P rint(OutputFo rmat r *( ( PINT)0xE 00 01000);3*( (PINT)OxEOO 0 0000) = 100 ;, 写共享内存fprint f ( StdHandle, Outpu t Format, *(PINT ) OxEOOOlOOO);KdbPr i nt(Ou t p utForma t , *( (PINT ) Ox E 0001000 );OutputFo r ma t = " nC R3->0x%Xn "dPfnO f PageDi r ectory = ( ULON G)(P s pSystemPro c e s s-> Pas->Pfn Of Pa g eDir ec t ory);f pr i nt f (StdH a nd 1 e , OutputFormat, Pf n OfPageDirectory);dKdb P r i nt(Out p utFormat r Pf n O f Page Director y );ofor( I ndex OfDi r Entry = 0; IndexOfD i r Entry < PTE_PER_TABLE; Index Of DirEnt ry+) pPde = (PMM P TE_H ARDW A R E)(U LONG _PT R)PDE_BASE +IndexOf Dir Entry* PTE _SIZE);df (!pPd e - > Vai i d) con t inue;oOutp utFormat = "PDE: 0x%X (Ox %X) - > 0x%Xn»VirtualBase = (IndexOfDirEntry << P DI_SHIFT);af p rintf(Std H andl e , Ou t putFo r mat, I n dexO f D i rEntry, VirtualBase , pPde->Pa g eFrameNumber);o®KdbPrint(Outpu t Format, IndexOfDir Ent r y , Virt ualBase, pPde - > Pag eFrameNumb e r);Page Tabi eBase = (U LO N G_ P TR) P T E _ B AS E + IndexOfDir E ntry* PAGE.SIZE;fo r (I n dexOf T ableE n t ry = 0; IndexOfTable E n t ry < PTE _PER_TABL E;Inde xOfTab 1 eEn try+ +)。 pPte = (PMMPT E _ HARDWARE)(Pa g eT a bleB a se + I ndexOfT abl eEn t ry * PTE_SIZ E);。& i f(!pPte-> Valid)3 ,cont i nue;dOutputF orma t = "ttPT E: 0x%X (0x%X)->0x%Xn"1 r t ua 1 Base = (IndexOfDi r Entry < < PDI_SHIFT) | (IndexOfTab leEntry << PTI_S H I FT);print f (Std Handle , Out put Forma t, IndexOf T ab 1 e Ent r y, VirtualBa s e, pPte->PageF r ameN u mber);g K d b Print ( Ou t p u tFormat, Ind exO f TableEn t ry , Vir t ual B a se, pPte->PageFrameNumb e r);dOutput Format = " nPhys i ca 1 Page Tota 1 : %dn"o f prin t f(St d Hand Ie, Out put Format, P a geTo t al);»KdbPrint(OutputFormat, PageTotaI);OutputFo r ma t = "Phy sic a I Memory To t al: %d nn"»f printf(StdHandle, Ou t putFo r mat, PageTotal * PAGE _ SIZ E );<>KdbP r int ( O u tpu t Fo r ma t, Pag e T otal * PAGE_ SIZE); oOutputForma t = "nNon use d Page Count: %dn"f printf ( StdHand 1 e, Outpu t Fo r mat, MiGetAn y PageCount();KdbPrint(Outpu t Format, MiGetAnyPageCo u nt();4nde xOfDi r Entry = (OxEO 0 00000 >> 22); / 虚拟地址的高 10 位是 PDE标号PageTa bleB a se = OxCO000000 + I ndexOfDirEnt r y * PAGE_SIZ E;JndexOfTableEntry = (OxEO000000 >> 12) &0x3FF;( (PMMPTE_HARDWARE) PageT able Base) Ind e xOfTab 1 eE n tr y .V a 1 id = 0; Inde xOfTab leEntry = ( 0 xEOOO 1 000> > 12 ) & Ox 3 F F ;(PMMPTE_ H A RDWARE)PageTableBase )IndexOfTableEntry .Vai i d = 0;(PMMPTE _ HARDWARE )0xC0300 000) I nd exOfD i rEntry.Va I i d = 0;oMiFlush Enti r eTlb();«dMi F reePa g es(2, PfnArr a y);9 u tput F orm at = "nNonused Page Cou n t: %d n"ofp r i ntf ( StdHandle, Outp utFormat, MiGetAn yPageCount ();KdbPrint(Out putFo r mat, MiGetAnyPageCount();»Ke E n a bleln t e r ru pts (IntSta t e)?/ 开中断三.实睑问题内容及解答思考页式存储管理机制的优缺陷。优点:1 .虚存量大,适合多道程序运营,用户不必紧张内存不够的调度操作,动态页式管理提供 反了内存与外存图图统一管理的虚存实现方式。2 .内存运用率高,不常用的页面尽量不留在内存。3 .不规定作业连续存放,有效的解决了内存碎片问题。缺陷:1 .要进行页面中断,缺页中断等解决,系统开销较大;2 .有也许产生"抖动"现象;3 .地址变换机构复杂,一般采用硬件实现,增长了机器成本。实验心得与体会通过操作系统实验,了解了操作系统的启动过程,运营方式,加深了对计算机操 作系统的理解。实验一一.实验目的Q)熟悉操作系统集成实验环境OS Lab的基本使用方法。(2 )练习编译、调试E OS操作系统内核以及EOS应用程序。二.实验内容(1)启动OS La b ;(2)学习OS Lab的基本使用方法:练习使用OS Lab编写一个W i ndow s控制台应用 程序,熟悉OS Lab的基本使用方法(重要涉及新建项目、生成项目、调试项目等);(3 ) EOS内核项目的生成和调试:对EOS内核项目的各种操作(涉及新建、生成和各 种调试功能等)与对W i ndows控制台项目的操作是完全一致的;(4) EOS应用程序项目的生成和调试;(5)退出OS La b 。三.实验内容问题及解答1)练习使用单步调试功能(逐过程、逐语句),体会在哪些情况下应当使用“逐过程调试, 在哪些情况下应当使用“逐语句"调试。练习使用各种调试工具(涉及“监视”窗口、“调 用堆栈”窗口等)。答:逐语句,就是每次执行一行语句,假如碰到函数调用,它就会进入到函数里面。而逐过程,碰到函数时,不进入函数,把函数调用当成一条语句执行。 因此, 在需要进入函数体时用逐语句调试,而不需要进入函数体时用逐过程调试。2 )思考生成EOS SDK文献夹的目的和作用。查看EOS SDK文献夹中的内容,明白文 献夹的组织结构和各个文献的来源和作用。查看EO S应用程序包含了 S D K文献夹中的哪 些头文献,是如何包含的?答:EOS SDK是为应用程序调用系统AP I提供服务,可作为用户编程中可使用的工具包集合。EO S SDK文献夹重要涉及INC头文献、LIB文献夹 导入库文献和B I N文献 夹动态链接库,可执行程序,二进制文献。EO S SDK包含的头文献有:eos. h负责导出AP I函数声明;eosdef.h负责 导出函数类型的定义;err or. h负责导犯错误码。四 .实验过程.新建Windows控制台应用程序生成项目:执行项目:调试项目:int Func (int n); / 声明Fuac函数int n = 0, n = Func (10);Drintf ("Hullo Wcrld!nv):1 .使用断点终端执行:查看 EOS SDK (Software De v e 1 opment Kit)文献夹:修改EOS应用程序项目名称COMSOLE-l (Press Ctrl+F1FR tn switch console uindnu.) Uclcome to EOS shell lRirtQHi3 R: 71uADV.exe五 .实验心得这次是验证性实验,具体环节和操作方法都是与实验教程参考书上一致,实验 很顺利,实验过程没有碰到困难。通过这次实验,我掌握了 OS Lab启动和退 出操作;练习使用OS Lab编写一个W i ndows控制台应用程序,熟悉OS L ab的基本使用方法新建项目、生成项目、调试项目等。实验2操作系统的启动-实验目的1 .跟踪调试EOS在PC机上从加电复位到成功启动的全过程,了解操作系统的启动过程。2 .直看E OS启动后的状态和行为,理解操作系统启动后的工作方式。二.实验内容1 .调试E OS操作系统的启动过程。2 .调试加载程序。Loader程序的重要任务是将操作系统内核(kernel. dll文献)加 载到内存中,然后让C PU进入保护模式并且启用分页机制,最后进入操作系统内核开始执 行(跳转到kernel.d II的入口点执行X3 .调试内核。4 .EOS启动后的状态和行为。查看EOS的版本号:1)在控制台中输入命令"v e r”后按回车。2 )输出E OS版本后的控制台如下图所示。(OS Lab PC - licrosoft Virtual PC 2007Action Edit £D floppyCONSOLE-1 (Press Ctrl+F1F8 to switch console window.) Ue 1come to EOS shell >uerTeuation EOS Version Number 1.05查看有应用程序运营时进程和线程的信息:1)待EOS启动完毕,在EOS控制台中输入命令"hell。”后按回车。itbKHello.ex e应用程序就开始执行。2 )迅速按Ctrl +F2切换到控制台2 ,并输入命令“pt"后按回车。输出的进程和线 程信息如下图所示三.实验内容问题及解答1 .为什么EOS操作系统从软盘启动时要使用b o o t .binfllloa d e r .bin两个程序?使 用一个可以吗?它们各自的重要功能是什么?假如将I。ade r .bi n的功能移动到 boot.b i n文献中,则bootbin文献的大小是否仍然能保持小于512字节?在IDE环境启动执行EOS操作系统时,会将boot. b i n、loader, bin和kerne I.d I I三个二进制写入软盘镜像文献中,然后让虚拟机来执行软盘中的EO S操作系统。仅使用其中一个是不能运营的。2 .软盘引导扇区加载完毕后内存中有两个用户可用的区域,为什么软盘引导扇区程序选择 将loa d er . bin加载到第一个可用区域的0x100 0处呢?这样做有什么好处?这样做会对1 oader . bin文献的大小有哪些限制。一方面用户只用两个可用区域,加载位置非此即彼。第一个可用用户区是低地址区且 空间大小比较小,适合容纳小文献,所以我们选择将占用空I Oder, b i加载到第一用户区。 优点:由低地址开始,便于检索查找。小文献占用小空间,节约资源。限制:loade r . bin文献必须小于1c00k.3 .练习使用Bochs单步调试BIOS程序、软盘引导扇区程序和load erf呈序,加深对操作系 统启动过程的理解。实验3进程的创建一.实验目的一.练习使用EOS API函数Creat ePro cess创建一个进程,掌握创建进程的方法, 理解进程和程序的区别。二. 调试跟踪Crea t eProcess函数的执行过程,了解进程的创建过程,理解进程是资源 分派的单位。二.实验内容1.准备实睑.启动os Lab。2练习使用控制台命令创建EOS应用程序的进程3 .练习通过编程的方式让应用程序创建另一个应用程序的进程4 .调试CreatePro cess 函数5 .调试 PsC r eat e P roces s 函数”。6 .练习通过编程的方式创建应用程序的多个进程.实验内容问题及解答1 .在源代码文献NewTwoProc.c提供的源代码基础上进行修改,规定使用h eHo.exe同时创建10个进程。使用PROC E SS_I N F ORMATION类型定义一个有10个元素的数组,每一个元素相 应一个进程。2 .学习本书第5章中的5.2节,了解关于线程的相关知识,然后尝试调试PspCreat eThread函数,观测线程控制块(TCB )初始化的过程。3 .在 P sCreateP r oc e ss 函数中调用了 Psp C r e a te P r