2023年操作系统实验报告 2.docx





《2023年操作系统实验报告 2.docx》由会员分享,可在线阅读,更多相关《2023年操作系统实验报告 2.docx(24页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、华北电力大学实验报告实验名称操作系统实验课程名称 操作系统综合实验专业班级:学 号:指导教师:学生姓名:成 绩:实验日期:营状态的线程也应当可以被挂起并被恢复,读者可以参考第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
2、 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
3、);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信号量的工作过程,理解进程同
4、步的原理。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启动调试。O
5、S La b会一方面弹出一个调试异常对话框。4)在调试异常对话框中选择否“,继续执行。5)立即激活虚拟机窗口查看生产者消费者同步执行的过程,如图16)待应用程序执行完毕后,结束本次调试。CONSOLE-1 (Press Ctr1+F1F8 to switch console window.)Meleone to EOS shellAutorun A AEOSApp.exeProducea 0Consumea0Producea 1Producea ZProducea 3Producea 4Consumea1Producea 5Producea 6Producea 7Producea 8Consu
6、meazProducea 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)等待信号量(不阻塞):生产者和消费者刚开始执行时,用来放产品的缓冲区都是空 的,所以生产者在第一次调用W
7、aitFo r SingleObject函数等待Empty信号量时, 应当不需要阻塞就可以立即返回2)释放信号量(不唤醒):生产者线程通过等待Empty信号量使空缓冲区数量减少 了 1,通过释放Fu 1 1信号量使满缓冲区数量增长了 1,这样就表达生产者线程生产了 一个产品并占用了一个缓冲区。3)等待信号量(阻塞):由于开始时生产者线程生产产品的速度较快,而消费者线程消 费产品的速度较慢,所以当缓冲池中所有的缓冲区都被产品占用时,生产者在生产新的产品 时就会被阻塞.4)释放信号量(唤醒):只有当消费者线程从缓冲池中消费了一个产品,从而产生一介 空缓冲区后,生产者线程才会被唤醒并继续生产14号产
8、品.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项
9、目生成完全版本的SDK文献夹,并覆盖之前的 生产者消费者应用程序项目的SDK文献夹。b.按F 5调试执行原有的生产者消费者应用程序项目,结果必须仍然与图1 一致。 假如有错误,可以调试内核代码来查找错误,然后在内核项目中修改,并反复环节a。实验六时间片轮转调度-实验目的及规定1 .调试E O S的线程调度程序,熟悉基于优先级的抢先式调度。2 .为EOS添加时间片轮转调度,了解其它常用的调度算法。二 .实验内容及环节1 .准备实验2 .阅读控制台命令r r ”相关的源代码3 .调试线程调度程序a)调试当前线程不被抢先的情况b)调试当前线程被抢先的情况=.为EOS添加时间片轮转调度a )规定:修改
10、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
11、_ 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):2239
12、4Thread9 (8):22540Thread10 (8):Z1858Thread11 (8):Z2176Thread1Z (8):22240Thread13 (8):22297Thread14 (8):Z253ZThread15 (8):21618Thread16 (8):22409Thread17 (8):22407Thread18 (8):22436Thread19 (8):21875b) T 工 CKS_OF_T 工 ME_SLICE 的值为 2 0OS Lab PC - Microsoft Virtc 27I Action Edit CD Floppy HelpCONSOLE-1(
13、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): 20924Thr
14、ead 14(8): Z0550Thread 15(8): ZZ111Thread 16(8): 20848Thread 17(8): Z09Z0Thread 18(8): 21869Thread 19(8): 20701c) 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): 22242T
15、hread 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
16、 (8): 2Z133Thread 18 (8): 22247Thread 19 (8): 2247411实验七物理存储器与进程逻辑地址空间的管理一 .实验目的及规定1 .使用E O S的信号量,编程解决生产者一消费者问题,理解进程同步的意义。2.通过为线程增长挂起状态,加深对线程状态的理解。2 .调试跟踪EOS信号量的工作过程,理解进程同步的原理。3 .修改EOS的信号量算法使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。二 .实验内容及环节(1)、准备实验(2)、执行控制台命令pm”,查看物理存储器的信息(3)、分派物理页和释放物理页:a.在pm命令函数中添加分派物理页和释放
17、物理页的代码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
18、 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%xnnf*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,等待 1
19、0秒钟。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
20、 t urn 0;.心得体会本次实验重要问题在于如何解决异常情况,也就是程序的健壮性。最开始调试结果不对 的,在老师指导下进行了分步调试,修改了部分代码,最后成功了。最大的收获是:纯熟对 代码分步调试,找犯错误。实验八分页存储器管理-实验目的与规定1 .学习i386解决器的二级页表硬件机制,理解分页存储器管理原理。2 .查看EOS应用程序进程和系统进程的二级页表映射信息,理解页目录和页表的 管理方式。3 .编程修改页目录和页表的映射关系,理解分页地址变换原理。二.实验环节与代码:设计代码P RIVATEVOIDCon s oleCmdMemoryM a p(I N HAN DLE S td H
21、andle)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 = P
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2023年操作系统实验报告 2023 操作系统 实验 报告

限制150内