1、Windows进程与线程实验,操作系统课程组,-2-,内容提要,实验一:观察进程线程的相关数据结构 实验二:线程的同步与互斥,-3-,实验一:观察进程线程的相关数据结构,实验目的 通过WinDbg观察进程线程的相关数据结构,加深对Windows进程线程结构和相关概念的理解。 实验内容 观察执行体进程块(EPROCESS) 观察内核进程块(KPROCESS) 观察系统中的正在运行的进程 观察进程的相关信息 观察线程的相关信息 观察某个未知的对象,-4-,实验一:观察进程线程的相关数据结构,预备知识 Windows进程线程的相关数据,-5-,实验一:观察进程线程的相关数据结构,EPPEOCESS结
2、构,-6-,实验一:观察进程线程的相关数据结构,KPROCESS结构,-7-,实验一:观察进程线程的相关数据结构,ETHREAD结构,-8-,实验一:观察进程线程的相关数据结构,KTHREAD结构,KTHREAD,-9-,实验一:观察进程线程的相关数据结构,实验步骤 启动WRK到内核调试模式,-10-,实验一:观察进程线程的相关数据结构,查看执行体进程块(EPROCESS) 键入命令“dt _eprocess”或“dt _EPROCESS”,-11-,实验一:观察进程线程的相关数据结构,查看内核进程块(KPROCESS) 键入命令“ dt _kprocess ”或“dt _KPROCESS”,
3、-12-,实验一:观察进程线程的相关数据结构,查看系统中的正在运行的进程 键入命令“!process 0 0”,-13-,实验一:观察进程线程的相关数据结构,查看进程的相关信息 键入命令“!process 813b6770 1”(813b6770是被观察进程的地址),-14-,实验一:观察进程线程的相关数据结构,查看线程的相关信息 Step1: 输入命令“!process 0464 2”,-15-,实验一:观察进程线程的相关数据结构,Step2:键入命令“!thread 81221db 0”和“!thread 81221db0 6”,-16-,实验一:观察进程线程的相关数据结构,查看某个未知的
4、对象 用“!Object address”来查看此地址的对象信息。例:,更过实验信息参见实验一:观察进程线程的相关数据结构(实验指导),-17-,实验二:线程的同步与互斥,实验目的 通过WinDbg观察线程的同步和互斥过程,加深对同步和互斥问题的理解。 实验内容 编写生产者消费者模拟程序 在WRK平台下观察线程的同步互斥过程 分析结果,-18-,实验二:线程的同步与互斥,问题阐述 生产者和消费者问题,生产者进程的功能:生产东西,供消费者消费; 消费者进程的功能:消费生产者生产的东西。,-19-,实验二:线程的同步与互斥,生产者和消费者P、V操作描述,生产者: P(生产者的信号量) /如果P操作
5、之后此值小于0,那么不可以继续执行 P(互斥体状态) /如果临界区没被占用,就可以继续执行 生产1个产品 V(互斥体状态) /释放已占的临界区 V(消费者的信号量) /消费者可消费的个数增加1,消费者: P(消费者的信号量) /如果P操作之后此值小于0,那么不可以继续执行 P(互斥体状态) /如果临界区没被占用,就可以继续执行 消费1个产品 V(互斥体状态) /释放已占的临界区 V(生产者的信号量) /生产者可生产的个数增加1,-20-,实验二:线程的同步与互斥,编写模拟程序 使用VC6.0编写代码模拟生产者和消费者(参考代码保存在 “ Source codetestthread.cpp文件中)。 编译并运行,-21-,实验二:线程的同步与互斥,在WRK平台下观察结果 将编译好的程序(exe文件)拷贝到虚拟机与宿主机的共享目录(D:WRK-v1.2)下,以便在虚拟机上也可以直接运行 运行程序,并使用Break命令停止虚拟机运行,用WinDbg进行观察。,更多信息参见实验二:线程的同步与互斥(实验指导),