版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
华先电力#号课程设计(综合实验)报告(2023--2023年度第一学期)名称:操作系统综合实验题目:OSlab综合实验院系:计算机系班级:计科1202学号:学生姓名:指导教师:赵文清王新奇设计周数:第八、九周成绩:日期:2023年10月29日3.使用低优先级线程也能获得执行机会的调度算法:在ke/sysproc.c文献中的ConsoleCmdRoundRobin函数调用Sleep函数语句的后面添加下面的语言,即可以演优先级线程抢占解决器后,低优先级线程无法运营的情况,待高优先级线程结束后,低优先级线程才可以继续运营。HANDLEThreadHandie;THREAD_PARAMETERThreadParameter;_asm("cli");ThreadParameter.Y=20;ThreadParameter.StdHandle=StdHandle;ThreadParameter=(HANDLE)CreatcThread{0,ThreadFunction,(PVOID)&ThreadParameter,0,NULL);PsSetThreadPi'iority(ThreeadHandie,9);_asm(“sti”);Slecp(10*1000);TerminateThread(ThreadHandle,0);CloseHandle(ThreadHand1e);Sleep(10*1000);解决该问题的最简朴的方法是实现动态优先级算法。动态优先级是指在创建进程时所赋予的优先级,可以随线程的推动而改变,以便获得良好的调度性能。例如,可用规定,在就绪队列中的线程,随着其等待时间的增长,其优先级以速率X增长,并且正在执行的线程,其优先级以速率y下降。这样,在各个线程具有不同优先级的情况下,对于优先级低的线程,在等待足够的时间后,其优先级便也许升为最高,从而获得被执行的机会。此时,在基于优先级的抢占式调度算法、时间片轮转调度算法和动态优先级算法的共同作用下,可防止一个高优先级的长作业长期的垄断解决器。4.EOS内核时间片大小取60ms(和Wind。ws操作系统完全相同),在线程比较多时,就可以观测出线程轮流执行的情况(由于此时一次轮转需要60ms,20个线程轮流执行一次需要60X20=1200ms,也就是需要1秒多的时间,所以EOS的控制台上可以清楚地观测到线程轮流执行的情况)。但是在Windows、Linux等操作系统启动后,正常情况下都有上百个线程在并发执行,为什么觉察不到它们被轮流执行,并且每个程序都运营的很顺利呢?答:在Windows、linux等操作系统中,虽然都提供了时间片轮转调度算法却很少真正被派上用场,下面解释因素,在Windows任务管理器中,即使系统中已经运营了数百个线程,但CPU的运用率仍然很低,甚至为0.由于这些线程在大部分时间都处在阻塞状态,阻塞的因素是各种各样的,最重要的因素是等待I/O完毕或者等待命令消息的到达。例如,在编辑Word文档时,每敲击一次键盘,Kord就会立即作出反映,并且文档中插入字符。此时会感觉Word运营的非常流畅。事实上,并非如此,Word主线程大部分时间都处在阻塞等待状态,等待用户敲击键盘。在用户没有敲击键盘或没有使用鼠标点击时,Nord主线程处在阻塞状态,它将让出解决器给其它需要的线程。当用户敲击一个按键后,Word主线程将会立刻被操作系统唤醒,此时Word开始解决请求。Word在解决输入请求时所用的CPU时间是非常短的(由于CPU非常快),是微秒级的,远远低于时间片轮转调度的时间片大小(Windows下是60亳秒),解决完毕后W。rd又立刻进入阻塞状态,等待用户下一次敲击键盘。或者拿音乐播放器来分析,表面上感觉播放器在不断地播放音乐,但是CPU的运用率仍然会很低。这是由于播放器将一段声音编码交给声卡,由声卡来播放,在声卡播放完这段声音之前,播放器都是处在阻塞等待状态的。当声卡播放完片段后,播放器将被唤醒,然后它将下一个声音片段交给声卡继续播放。掌握了上面的知识后,就可以很容易解释为什么这么多线程同时在运营而一点都感觉不到轮替现象。实验7物理存储器与进程逻辑地址空间的管理一、实验目的通过杳看物理存储器的使用情况,并练习分派和回收物理内存,从而掌握物理存储器的管理方法。通过杳看进程逻辑地址空间的使用情况,并练习分派和1口|收虚拟内存,从而掌握进程逻辑地址空间的管理方法。二、实验内容1、准备实验2、阅读控制台命令“pm”相关的源代码,并查看其执行的结果(pm命令的执行结果)3、分派物理页和释放物理页(配物理页或者释放物理页后物理存储器的变化情况)4、阅读控制台命令“vni”相关的源代码,并查看其执行的结果使用“vm”命令查看系统进程虚拟地址描述符的结果5、在系统进程中分派虚拟页和释放虚拟页6、在应用程序进程中分派虚拟页和释放虚拟页三、问题答案及参考代码INT*d;aif(d=Virtua1A11oc(0,sizeof(int),MEMRESERVE|MEM.COMMIT)){//调用API函数VirtualAl1oc,分派一个整型变量所需的空间,并使用一个整型变显的指针指向这个空间printf("Al1ocated%dbytesvirtua1memoryofOx%x\n\n”,sizeof(int),d);printfCvirtualmemoryoriginalvalue:Ox%x\n\n〃,*d);*d=OxFFFFFFFF;//修改整型变量的值为OxFFFFFFFFprintf(uvirtualmemorynewvalue:0x%x\n\nz,,*d);printf(,z\nWaitfor10seconds\n"):Sleop(lOOOO);//调用API函数Sleep,等待10秒钟。if(VirtualFree(d,0,MEM_RELEASE))//调用API函数VirtualFree,ft放之前分派的整型变量的空间printf("\nRealeasevirtualmemorysuccess!\n");aelseaprintf(z,realeaseerror\n");printfC\nEndlessloop!");afor;
e1seaprintf("error\n");areturnT;〃若不能成功分派,打印出crror,返回T.a}aprintf("HolloworId!\n");ae1seaprintf("error\n");aretur.在本实验3.3中,假如分派了物理页后,没有回收,会对EOS操作系统导致什么样的影响?目前EOS操作系统内核函数MiAllocateAnyPages能解决所有物理页被分派完毕的情况吗?例如在没有可分派的物理页的情况下调用该内核函数,是否会返回失败?假如内核函数MiAllocateAnyPages还不能解决这种极端情况,尝试修改代码解决这个问题。答:假如分派了物理页后没有回收,EOS操作系统将不能再使用未回收的物理页,假如分派的物理页都没有进行刚攵也许会导致EOS没有可用的物理贝,从而导致EOS停止运营。目前E0S操作系统内核函数MiAl1ocateAnyPages还没有解决没有物理页可分派的情况。.在本实验3.3中,在分派物理页时是调用的内核函数MiAl1ocateAnyPages,该函数会优先分派空闲页,尝试修改代码,调用内核函数MiAl1ocateZeroedPages优先分派零页,并调试分派零页的情况。尝试从性能的角度分析内核函数MiA1locateAnyPages和MiA1locateZeroedPages0尝试从安全性的角度分析分派零页的必要性。答:从性能的角度来分析,调用MIAU。cateAnyPages函数分派物理页在某些情况下比调用MiAllocateZerocdPagos.函数要快速。从安全行的角度来分析,分派零页更加安全。例如,一个物理页被操作系统存储过重要的密码信息后被释放,假如没有清零就被分派给用户程序,则用户程序就也许从这个物理页中获得重要的密码信息。.观测本实验3.4中使用“vm”命令输出的系统进程的虚拟地址描述符(图15-3),可以看到在2号描述符和3号描述符之间有两个虚拟页的空隙,尝试结合虚拟页的分派和释放说明产生这个空隙的因素。答:产生的空隙是由于有虚拟页被释放导致的,在EOS启动时有一个初始化线程在初始化完毕后就退出了,线程的堆栈所占用的虚拟页就被释放了。5.在本实验3.5中,调用MmA1locateVirtuaIMemory函数分派虚拟页时只使用了MEM_RESERVE标志,没有使用MEM_COM\IIT标志,尝试说明这两个标志的区别。修改代码,在调用MmAl1ocateVirtualMemory函数时增长使用MEM_COMM1T标志,并调试为虚拟页映射物理页的过程。答:使用MEM_RESERVE标志分派虚拟页时,没有为其映射实际的物理页。使用MEM_COMUIT表达分派虚拟页时,会为其映射实际的物理页。实验8分页存储器管理一、实验目的学习i386解决器的二级贞表硬件机制,理解分贝存储器管理原理。查看EOS应用程序进程和系统进程的二级页表映射信息,理解页目录和页表的管理方式。编程修改页目录和页表的映射关系,理解分页地址变换原理。二、实验内容1、准备实验2、查看EOS应用程序进程的页目录和页表三、问题答案及参考代码1.观测之前输出的页目录和页表的映射关系,可以看到页目录的第Ox300个PDE映射的页框号就是页FI录自身,说明页目录被复用为了页表。而恰恰就是这种映射关系决定了4K的页目录映射在虚拟地址空间的0x0)300000—OxC0300FFF,4M的页表映射在0XC0000000-0xC03FFFFF。现在,假设修改了页目录,使其第0x100个PDE映射的页框号是页目录自身,此时页目录和页表会映射在4G虚拟地址空间的什么位置呢?说明计算方法。答:假设修改了页目录,使其第0x10()个PDE映射的页框号是页目录自身,此时页目录和页表会映射在4G虚拟地址空间的什么位置呢?说明计算方法。页目录:PDE标号0x100做为虚拟地址的高10位,PTE标号0x100做为虚拟地址的12-22位,得到虚拟地址0x40100000。页表:PDE标号0x100做为虚拟地址的高10位,PTE标号0x0做为虚拟地址的12-22位,得到虚拟地址0x40000000。3.修改EOSApp.c中的源代码,通过编程的方式记录并输出页目录和页表的数目。注意页目录被复用为页表答:编写代码将申请到的物理页从二级页表映射中移除,并让内核回收这些物理页。参见源代码文献MapNcwPagcEx.c。使用该文献中的ConsoleCmdMemoryMap函数替换ke/sysproc.c中的ConsoleCmdMemoryMap函数即可。在移除映射的物理页时,只需要将PTE/PDE的存在标志位设立为0即可,要先修改PTE,再修改PDE。此外,要注意刷新快表。调用MiFreePages函数即可|可收物理页,具体的用法可以参考其函数定义处的注释和源代码(mm/pfn1ist.c第248行)。.既然所有1024个页表(共4M)映射在虚拟地址空间的OxC0000000-0xC03FFFFF,为什么不能从页表基址0xC0000000开始遍历,来查找有效的页表呢?而必须先在页目录中查找有效的页表呢?编写代码尝试一下,看看会有什么结果。答:不能从页表基址OxC0000000开始遍历查找有效的页表由于:只有当一个虚拟地址通过二级页表映射关系可以映射到实际的物理地址时,该虚拟地址才可以被访问,否则会触发异常。由于并不是所有的页表都有效,所以不能从页表基址OxC000()000开始遍历。.学习EOS操作系统内核统一管理未用物理页的方法(可以参考本书第6章的第6.5节)。尝试在本实验第3.5节中ConsoleCmdMemoryMap函数源代码的基础上进行修改,将申请到的物理页从二级页表映射中移除,并让内核回收这些物理页。参见源代码文献MapNewPagcEx.c。使用该文献中的ConsoleCmdMemoryMap函数替换ke/sysproc.c中的ConsoleCmdMemoryMap函数即可。在移除映射的物理页时,只需要将PTE/PDE的存在标志位设立为0即可,要先修改PTE,再修改PDE。调用UiFrccPages函数即可回收物理页,具体的用法可以参考其函数定义处的注释和源代码(mm/pfn1ist.c第248行)。源代码:ULONGPfnArray[2];//访问未映射物理内存的虚拟地址会触发异常。//必须注释或者删除该行代码才干执行后面的代码。//*((PINT)OxEOOOOOOO)=100;。。////从内核申请两个未用的物理页。//由PfnArray数组返回两个物理页的页框号。//MiA11ocateZeroedPages(2,PfnArray);OutputFormat="Newpageframenumber:0x%X,0x%X\n";fprintf(StdHandle,OutputFormat»PfnArray[0],PfnArray[1]);KdbPrint(OutputFormat,PfnArray[0],PfnArray[1]);////使用PfnArray[0]页做为页表,映射基址为OxE00000000的4M虚拟地址。//Index()fDirEntry=(0xE0000000»22);//虚拟地址的高10位是PDE标号((PMMPTEHARDWARE)0xC0300000)[IndexOfDirEntry].PageFrameNumber=PfnArray[0];((PMMPTE_HARDWARE)OxC0300000)[IndexOfDirEntry].Valid=1;。//有效((PMMPTE_HARDWARE)OxC0300000)[IndexOfDirEntry].Writable=1;〃可写MiFlushEntireT1b();<>//刷新快表//根据PDE的标号计算其映射的页表所在虚拟地址的基址//PagcTablcBase=0xCOOOO000+IndcxOfDirEntry*PAGESIZE;////将PfnArray[1]放入页表PfnArray[0]的两个PTE中,//分别映射基址为OxE0000000和OxE0001000的4K虚拟地址//IndexOfTab1eEntry=(0xE0000000>>12)&0x3FF;。//虚拟地址的12-22位是PTE标号((PMMPTEHARDWARE)PageTableBasc)[IndexOfTableEntry].PageFrameNumber=PfnArmy[1];((PMMPTE_HARDWARE)PageTab1oBase)[IndexOfTab1eEntry].Va1id=1;。。〃有效((PMMPTE_HARDWARE)PageTab1eBase)[IndexOfTableEntry].Writab1e=1;//可写MiFlushEntireTlbO;//刷新快表IndexOfTableEntry=(OxE0001000»12)&()x3FF〃虚拟地址的12-22位是PTE标号((PMMPTEHARDWARE)PageTableBasc)[IndexOfTablcEntry].PagcFrameNumber=PfnArray[1];((PMMPTE_HARDWARE)PagcTab1eBase)[IndexOfTableEntry].Va1id=1;。//有效((PMMPTE_HARDWARE)PageTab1eBase)[IndexOfTableEntry].Writab1e=1;〃可写MiF1ushEntireTlb();<>//刷新快表////测试//0utputFormat="RoadMemoryOxEOOOlOOO:%d\n”;fprintf(StdHandle,OutputFormat,*((PINT)OxEOOOlOOO));KdbPrint(OutputFormat,*((PINT)0xE0001000));*((PINT)OxEOOOOOOO)=100;//写共享内存fprintf(StdHandie,OutputFormat,*((PINT)0xE0001000));KdbPrint(OutputFormat,*((PINT)OxE0001000));7.思考页式存储管理机制的优缺陷。答:优点:1、由于它不规定作业或进程的程序段和数据在内存中连续存放,从而有效地解决了碎片问题。2、动态页式管理提供了内存和外存统一管理的虚存实现方式,使用户可以运用的存储空间大大增长。这既提高了主存的运用纽,又有助于组织多道程序执行。缺陷:1、规定有相应的硬件支持。例如地址变换机构,缺页中断的产生和选择淘汰页面等都规定有相应的硬件支持。这增长了机器成本。2、增长了系统开销,例如缺页中断解决机,3、请求调页的算法如选择不妥,有也许产生抖动现象.4、虽然消除了碎片,但每个作业或进程的最后一页内总有一部分空间得不到运用果页面较大,则这一部分的损失仍然较大。实验9串口设备驱动程序一、实验目的调试EOS串口驱动程序向串口发送数据的功能,了解设备驱动程序的工作原理。为EOS串口驱动程序添加从串口接受数据的功能,进一步加深对设备驱动程序工作原理的理解。二、实验内容1准备实验2练习使用EOS应用程序向串口发送数据3调试EOS串口驱动程序向串口发送数据的功能4为EOS串口驱动程序添加从串口接受数据的功能CONSOLE-1(PressCtrl+F1~F8tosuitchconsolewindow...)UelcometoEOSshe11>serialThisprogramisusedtotestserialport,andit'susedwisureterminal.exeisrunningonUindous.>>hello<<hello>>howareyou?<<Ianfine,thankyou,andyou?>>Ianfinetoo.«-EOSTerainalhellohellohowareyou?Iamfine,thankyou,andyou?Iamfinetoo.三、问题答案及参考代码在向串口发送数据时可以不使用缓冲区,将SrIWite函数体修改为CHARData;ULONGCout;PDEVICE_EXTENSIONExt=(PDEVICE_EXTENSION)DeviceObject->DeviceExtension;PsResetEvent(&Ext->CompietionEvent);For(Count=0;Count<Request;Count++){Data=((PCHAR)Buffer)[count];WRITE_PORT_UCIIAR(REG_P0RT(DeviceObjict.TIIR),Date);实验3进程的创建一、实验目的练习使用EOSAPI函数CreateProcess创建一个进程,掌握创建进程的方法,理解进程和程序的区别。调试跟踪CroatcProcess函数的执行过程,了解进程的创建过程,理解进程是资源分派的单位。二、实验内容1准备实验2练习使用控制台命令创建EOS应用程序的进程3练习通过编程的方式让应用程序创建另一个应用程序的进程调试CreateProcess函数调试PsCreateProcess函数6练习通过编程的方式创建应用程序的多个进程三、问题答案及参考代码1.在源代码文献NewT*oProc,c提供的源代码基础上进行修改,规定使用hello,exe同时创建10个进程。提醒:可以使用PROCESS.INFORMATION类型定义一个有10个元素的数组,每一个元素相应一个进程。使用一个循环创建10个子进程,然后再使用一个循环等待1。个子进程结束,得到退出码后关闭句柄。STARTUPINFOStartupInfo;PROCESS_INFORMATIONProcinfo[l0];ULONGulExitCode;INTnResult=0;。inti,j;//#ifdcf_DEBUG_asm("intS3\nnop");#endifprintf(^Create1Op//rocessesandwaitfortheprocessesexit...\n\n");PsWaitForEven(&Ext—>Comp1etionEvent,INFINITE);*Rcsu1t=Count;ReturnSTATUS_SUCCESS;)4.在io/driver/seria1.c文献的SrlRead函数中,访问接受数据缓冲区时必须关闭中断,思考这样做的因索。在SrlWrite函数中访问缓冲区时为什么不需要关闭中断呢?思考中断在设备I/0中的重要作用和意义。答:由于SrlWrite函数和Srllsr函数对发送数据缓冲区的访问是同步进行的,在Sr1Write函数中访问发送数据缓冲区时就不需要关闭中断了。使用中断方式可以让进程在等待硬件设备的响应时让出解决器,调度程序会选择其他进程在解决器上继续执行,从而提高解决器的运用率,并支持多道程序和I/O设备并行操作。同时,由于中断方式是异步执行的,所以在访问临界资源时需要进行同步。实验10磁盘调度算法一、实验目的通过学习EOS实现磁盘调度算法的机制,掌握磁盘调度算法执行的条件和时机。观测EOS实现的FCFS、SSTF和SCAN磁盘调度算法,了解常用的磁盘调度算法。编写CSCAN和N-Step-SCAN磁盘调度算法,加深对各种扫描算法的理解。二、实验内容1、准备实验2、验证先来先服务(FCFS)磁盘调度算法3、验证最短寻道时间优先(SSTF)磁盘调度算法4、验证SSTF算法导致的线程“饥饿”现象三、问题答案及参考代码1.在执行SCAN、N・Step-SCAN磁盘调度算法时,假如在EOS控制台中多次输入“ds”命令,调度的顺序会发生变化,说明导致这种现象的因素(提醒:注意这两种算法使用的全局变量)。尝试修改源代码,使这两种算法在多次执行时,都能保证调度的顺序一致(提醒:可以参考io/b1ock.c文献中IopReceiveRequest函数和IopProcessNextRequest函数判断磁盘调度算法开始工作和结束工作的方法)。答:SCAN算法使用了全局变最Scanlnside记录磁头移动的方向,每次执行“ds”时,磁头的移动方向都也许不同样,所在磁道也也许不同样,所以在每次执行时距离最短的线程也不同,所以调度的顺序会发生变化,例如在第一次执行“ds”命令时,Scaninside初始化为true则开始磁头是从外向内移动的,结束时磁头变为从内向外移动,所以在下次执行“ds”命令时,开始磁头就继续从内向外移动了。要解决这个问题,可以lopProcessNextRcquest函数中,每次检测到磁盘调度算法结束工作时,将这些全局变量恢复为默认值。4.分析已经实现的各种磁盘调度算法的优缺陷,尝试实现更多其它的磁盘调度算法。先来先服务FCFS:公平,简朴,每个进程的请求都能依次得到解决。没有对寻道优化,平均寻道时间长。最短时间优先调度算法SSTF:规定访问的磁道是当前磁头所在的磁道最近,每次寻道时间最短,但不能保证平均寻道时间最短。也许导致一些请求无限期推延,产生饥饿现象。电梯调度算法SCAN:不仅考虑当前磁道的距离,优先考虑在磁道前进方向的最短时间,排除磁头在盘面上的往复运动,避免了出现“饥饿”现象。电梯原理。C-SCAN:磁头单项移动。实验总结:操作系统实验中我们亲自动手操作,分别实现了进程、存储器管理等功能,将课上所学到的知识与实际操作结合到一起,领略到了各个功能实现的过程原理,加深了对于操作系统意义、作用的理解,对于此后计算机的相关课程的学习打下了基础。实验的课程中思考题的部分更是对课程内容的进一步理解,让我们有许多收获。最后,感谢老师的悉心教导。Startupinfo.StdInput=GetStdHand1e(STD.INPUT_HANDLE);StartupInfo.StdOutput=GetStdHand1e(STD_OUTPUT_HANDLE);StartupInfo.StdError=GetStdlland1c(STD_ERRORHANDLE);for(i=0;i<10;i++)if(CreateProcess("A:\\Hello.exe",NULL,0,&StartupInfo,&ProcInfo[i]));else{for(j=0;j<i;j++){WaitForSingleObject(Proclnfo[j].ProcessHandie,INFINITE);GetExitCodeProcess(ProcInfo[j].ProcessHand1e,ftulExitCode);printf(,z\nTheprocess%dexitwith%d.\nj,ulExitCode);CloseIIand1e(ProcInfo[j].ProcessHandie);CloseHandle(Proclnfo[j].ThreadHandle);}printf("CreateProcessFailed,Errorcode:Ox%X.\n”,GetLastError());nResuIt=1;returnnResuit;}for(i=0;i<10:i++){WaitForSingleObject(Proclnfo[i].Proccssllandle,INFINITE);GetExitCodeProcess(Proclnfo[i].ProcessHandie,&ulExitCode);}for(i=0i<10:i++)(printf("\nTheprocess%dexitwith%d.\n”,i,ulExitCode);C1oseHand1e(ProcInfo[i].ProcessHandle);CloseHandle(ProcInfo[i].Threadllandle);}returnnResult;3.在PsCreateProcess函数中调用TPspCreateProcessEnvironmenl函数后又先后调用了PspLoadProcessimage和PspCreateThread函数,学习这些函数的重要功能。可以互换这些函数被调用的顺序吗?思考其中的因素。PspCreateProcessEnvironment的重要功能是创建进程控制块,并且为进程创建了地址空间和分派了句柄表。PspLoadProcessImage是将进程的可执行映像加载到了进程的地址空间中。PspCreateThread创建了进程的主线程。这三个函数被调用的顺序是不可以改变的。就向上面描述的加载可执行映像之前必须已经为进程创建了地址空间,这样才可以拟定可执行映像可以被加载到内存的什么位置。在创建主线程之前必须已经加载了可执行映像,这样主线程才可以知道自己要从哪里开始执行,执行哪些指令。因此不能互换他们的顺序。实验4线程的状态和转换一、实验目的调试线程在各种状态间的转换过程,熟悉线程的状态和转换。通过为线程增长挂起状态,加深对线程状态的理解。二、实验内容1准备实验2调试线程状态的转换过程(阻塞一就绪、运营一就绪、就绪一运营、运营一阻塞)3为线程增长挂起状态三、问题答案及参考代码PsResumThread(INHANDLEhThread){STATUSStatus;BOOLIntState;PTHREADThread;Status=0bRefObjectByHand1e(hThrcad,PspThreadType,(PV0ID*)&Thread);if(EOS_SUCCESS(Status)){IntState=KeEncibleInterrupts(FALSE);if(Zero==Thread—>Statc){ListRemoveEntry(&Thread->StateListEntry);PspReadyThread(Thread);PspThreadSchedule();Status=STATUS_SUCCESS;}elsetStatus=STATUS_NOT_SUPPORTED;)KoEnab1elnterrupts(IntState);//开中断0bDerefObject(Thread);}returnStatus;}resume命令执行的效果如图:1.思考一下,在本实验中,当1。口线程处在运营状态时,EOS中尚有哪些线程,它们分别处在什么状态。可以使用控制台命令pt查看线程的状态。,OSLabPC-MicrosoftVirtualPC2007ActionEditCDFloppyHelpCONSOLE-2(PressCtrl*Fl~F8toswitchconsolewindow...)Ue1cometoEOSshel1>pt********ProcessList(1Process)xxmxxxIDtSystem?!PriorityIThreadCount•PrimaryThreadID•ImageNane1Y24112M\AD0123456781一*****ThreadList(111System?;PriorityThread)****;State1ParentProcessID:StartAddressY0Ready10x8001817CY24Uaiting10x80015E9A丫24Waiting10x8001826DY24Running10x80018Z6D¥24Uaiting10x8001826DY24Uaiting10x80018Z6DY24Uaiting10x80018Z6D¥24Uaiting10x80018Z6D丫Z4Uaiting10x80018Z6DY24Uaiting10x80018Z6D丫8Ready10x80018D9AI22222222223>2.当1oop线程在控制台1中执行,并且在控制台2中执行suspend命令时,为什么控制台1中的loop线程处在就绪状态而不是运营状态?答:当在控制台2中执行suspend命令时,实质上是优先级为24的控制台2线程抢占了解决器,也就是控制台2线程处在运营状态,所以此时1。op线程处在就绪状态了。4.总结一下在图5-3中显示的转换过程,哪些需要使用线程控制块中的上下文(将线程控制块中的上下文恢复到解决器中,或者将解决器的状态复制到线程控制块的上下文中),哪些不需要使用,并说明因素。答:一个进程在运营过程中或执行系统调用,或产生了一个中断事件,解决器都进行一次模式切换,操作系统接受控制权,有关系统例程完毕必须的操作后,或恢复被中断进程或切换到新进程。当系统调度新进程占有解决器时,新老进程随之发生上下文切换,因此,进程的运营被认为是在进程的上下文中执行,这时的控制权在操作系统手中,它在完毕必要的操作后,可以恢复被中断的进程或切换到别的进程。实验5进程的同步一、实验目的使用EOS的信号量,编程解决生产者一消费者问题,理解进程同步的意义。调试跟踪EOS信号量的工作过程,理解进程同步的原理“修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理。二、实验内容1、准备实验2、使用EOS的信号量解决生产者一消费者问题3、调试EOS信号量的工作过程4、修改EOS的信号量算法if(Semaphore->Count>0){Semaphore->Count—;aflag=STATUS_SUCCESS;2〃假如信号量大于零,说明尚有资源,可认为线程分派elseflag=PspWait(&Semaphore->WaitListHead,Milliseconds);KeEnablelnterrupts(IntState);//原子操作完毕,恢复中断。returnf1ag;}〃否则,说明资源数量不够,不能再为线程分派资源,因此要使线程等待if(Semaphore->Count+Re1easeCount>Semaphore->MaximumCount){Status=STATUS_SI':MAPH0RE_LIMiT_EXCEEDEI);}Else{a//记录当前的信号量的值//if(NULL!=PreviousCount){*PreviousCount=Semaphore->Count;}intmm=Semaphore—>Count;//目前仅实现了标准记录型信号最,每执行一次信号晟•的释放操作只能使信号量的值增长1.〃while((!ListIsEmpty(&Semaphore->WaitListHead))&&(Re1easeCount)){PspWakeThread(&Semaphore->WaitListHead,STATUS_SUCCESS);APspThre
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 《习作他了》课件:2024年文学世界之旅
- JOINSET卓英社科技股份有限公司简介 产品介绍(2)一级代理分销经销KOYUELEC光与电子
- 2024版《工程制图》教案:全面升级
- 2故宫课件:2024年冬季特别课程发布
- 2024年春季课程:《长恨歌》的全新探索
- 黑色可爱卡通传统节日下元节宣传介绍(诗词鉴赏)
- 2024年视角下的《将进酒》深度解读
- 2024年地球形状教案:从古至今的演变历程
- 2024年VB程序设计课程教案:创新与传承
- 2024视角下的VB程序设计课程教案设计
- 【公开课】《农业专题复习》【课件】
- 第7课《大雁归来》课件(共15张ppt) 部编版语文八年级下册
- 培训的方式和方法课件
- 三年级下册口算天天100题(A4打印版)
- 三基选择题(东南大学出版社)
- 2021年大唐集团招聘笔试试题及答案
- DBJ53/T-39-2020 云南省民用建筑节能设计标准
- 2022版义务教育数学课程标准解读课件PPT模板
- 实验五 PCR扩增课件
- 马拉松运动医疗支援培训课件
- 中医药宣传手册
评论
0/150
提交评论