下载此文档

实验4,线程的状态和转换.doc


文档分类:IT计算机 | 页数:约5页 举报非法文档有奖
1/5
下载提示
  • 1.该资料是网友上传的,本站提供全文预览,预览什么样,下载就什么样。
  • 2.下载该文档所得收入归上传者、原创者。
  • 3.下载的文档,不会出现我们的网址水印。
1/5 下载此文档
文档列表 文档介绍
华北电力大学
实验报告
|
|
实验名称线程的状态和转换
课程名称计算机操作系统
|
|
专业班级:软件1002 学生姓名:赵策
学号:201009020228 成绩:
指导教师:宋亚奇实验日期:

1. 调试线程在各种状态间的转换过程,熟悉线程的状态和转换。
2. 通过为线程增加挂起状态,加深对线程状态的理解。


OS Lab集成实验环境


1)启动OS Lab。
2)新建一个EOS Kernel项目。

1) Kernel项目。
2)按F5启动调试。
3)待EOS启动完毕,在EOS控制台中输入命令“loop”后按回车。
4)结束此次调试。
loop命令执行的效果可以参下图
3. 线程由阻塞状态进入就绪状态
1)在虚拟机窗口中按下一次空格键。
2)此时EOS会在PspUnwaitThread函数中的断点处中断。在“调试”菜单中选择“快速监视”,在快速监视对话框的表达式编辑框中输入表达式“*Thread”,然后点击“重新计算”按钮,即可查看线程控制块(TCB)中的信息。其中State域的值为3(Waiting),双向链表项StateListEntry的Next和Prev指针的值都不为0,说明这个线程还处于阻塞状态,并在某个同步对象的等待队列中;StartAddr域的值为IopConsoleDispatchThread,说明这个线程就是控制台派遣线程。
3)关闭快速监视对话框,激活“调用堆栈”窗口。根据当前的调用堆栈,可以看到是由键盘中断服务程序(KdbIsr)进入的。当按下空格键后,就会发生键盘中断,从而触发键盘中断服务程序。在该服务程序的最后中会唤醒控制台派遣线程,将键盘事件派遣到活动的控制台。
4)在“调用堆栈”窗口中双击PspWakeThread函数对应的堆栈项。可以看到在此函数中连续调用了PspUnwaitThread函数和PspReadyThread函数,从而使处于阻塞状态的控制台派遣线程进入就绪状态。
5)在“调用堆栈”窗口中双击PspUnwaitThread函数对应的堆栈项,先来看看此函数是如何改变线程状态的。按F10单步调试直到此函数的最后,然后再从快速监视对话框中观察“*Thread”表达式的值。此时State域的值为0(Zero),双向链表项StateListEntry的Next和Prev指针的值都为0,说明这个线程已经处于游离状态,并已不在任何线程状态的队列中。仔细阅读PspUnwaitThread函数中的源代码,理解这些源代码是如何改变线程状态的。
6)按F5继续执行,在PspReadyThread函数中的断点处中断。按F10单步调试直到此函数的最后,然后再从快速监视对话框中观察“*Thread”表达式的值。此时State域的值为1(Ready),双向链表项StateListEntry的Next和Prev指针的值都不为0,说明这个线程已经处于就绪状态,并已经被放入优先级为24的就绪队列中
4. 线程由运行状态进入就绪状态
1)按F5继续执行,在PspSelectNextThread函数中的断

实验4,线程的状态和转换 来自淘豆网www.taodocs.com转载请标明出处.

非法内容举报中心
文档信息
  • 页数5
  • 收藏数0 收藏
  • 顶次数0
  • 上传人260933426
  • 文件大小134 KB
  • 时间2017-08-16