全球旧事资料 分类
复为就绪状态。但是PsResumThread函数中的这部分代码(第119行)还没有实现,要求在这个练习中完成这部分代码。43思考与练习在实验4中,当loop线程在控制台1中执行,并且在控制台2中执行suspe
d命令时,为什么控制台1中的loop线程处于就绪状态而不是运行状态?答:当在控制台2中执行suspe
d命令时,控制台派遣线程被唤醒,由阻塞状态进入就绪状态。因为其优先级(24)比当前处于运行状态的loop线程的优先级要高,根据EOS已实现的基于优先级的抢先式调度算法,loop线程会进入就绪状态,控制台派遣线程会抢占处理器从而进入运行状态。实质上是优先级为24的控制台派遣线程抢占了处理器,也就是控制台派遣线程处于运行状态,所以此时loop线程就处于就绪状态了。
实验5:进程的同步
51实验目的:1使用EOS的信号量,编程解决生产者消费者问题,理解进程同步的意义。2调试跟踪EOS信号量的工作过程,理解进程同步的原理。3修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程
同步的原理。52实验内容:1准备实验:启动OSLab,新建一个EOSKe
el项目,新建一个EOS应用程序项目2使用EOS的信号量解决生产者-消费者问题使用pcc文件中的源代码,替换之前创建的EOS应用程序项目中EOSAppc文件内的
源代码;按F7生成修改后的EOS应用程序项目;按F5启动调试。在调试异常对话框中选择“否”,继续执行。立即激活虚拟机窗口查看生产者-消费者同步执行的过程,待应用程序执行完毕后,结束此次调试。
3调试EOS信号量的工作过程:创建信号量(1)按F5启动调试EOS应用项目;在第77行添加一个断点。按F5继续调试,到此断点处中断。按F11调试进入CreateSemaphore函数;按F11调试进入semaphorec文件中的PsCreateSemaphoreObject函数。在semaphorec文件PsI
itializeSemaphore函数第一行代码处添加一个断点。(2)按F5继续调试,到断点处中断。观察PsI
itializeSemaphore函数中用来初始化信号
f量结构体成员的值,应该和传入CreateSemaphore函数的参数值是一致的。按F10单步调试PsI
itializeSemaphore函数执行的过程,查看信号量结构体被初始化的过程。
(3)打开“调用堆栈”窗口,查看函数的调用层次。
等待、释放信号量(1)等待信号量(不阻塞):删除所有的断点,在eosappc文件的Producer函数中,
第144行添加一个断点;按F5继续调试,到断点处中断。在semaphorec文第68行添加一个断点;按F5继续调试,到断点处中断。按F10单步调试,直到完成PsWaitForSemaphore函数中r
好听全球资料 返回顶部