【精品】PPT课件 Windows进程与线程实验
- 格式:ppt
- 大小:1.06 MB
- 文档页数:21
Windows进程与线程实验一.问题描述汽车司机与售票员之间必须协调工作,一方面只有当汽车停下,售票员才能开门使乘客上下车,所以司机停车后应该通知售票员;另一方面只有售票员把车门关好了司机才能开车,所以售票员管好车门后应该通知司机开车。
假设汽车当前正在始发站停车等待乘客上车,设置必要的信号量并赋初值,写出它们的同步过程。
在公共汽车上,司机和售票员的活动分别是:司机:启动车辆正常运行到站停车售票员:关车门售票开车门在汽车不断地到站,停车,行驶过程中,这两个同步过程的实现用信号量和P,V操作实现二.同步过程理论分析(1)Windows系统的线程状态图如下:设信号量S1和S2分别是司机和售票员的私用信号量,初值都为0,则司机与售票员的同步过程课描述为:P司机 P售票员正常行车售票到站,停车 P(S2)V(S1)开车门P(S2)关车门离站开车 V(S1)综上所述,两个进程的同步模型为:P(1) P(2)…………P(S) V(S)…………三.编程实现P(Semaphore &s,HANDLE hT);//P操作,用于控制每一步骤的时间,时间步骤函数,线程同步void P(Semaphore &s,HANDLE hT){s-=1;if(s<0){SuspendThread(hT);}}V(Semaphore &s,HANDLE hT)//V操作与P操作类似用于线程同步void V(Semaphore &s,HANDLE hT){s+=1;if(s<=0){ResumeThread(hT);}}下面是几个具体动作实现函数:void DriverStartup();//司机启动void DriverRun();//司机行车void DriverStop();//司机停车void ConductorUp();//乘客上车void ConductorClose();//售票员关门void ConductorSell();//售票员售票void ConductorOpen();//售票员开门void ConductorDown();//乘客下车以下为司机售票员同步函数:DWORD WINAPI Driver(LPVOID lpParam)//Driver线程回调函数,司机动作:{do{P(run,hDriver);DriverStartup();DriverRun();DriverStop();V(stop,hConductor);}while(1);return 0;}DWORD WINAPI Conductor(LPVOID lpParam)//Conductor线程回调函数,售票员动作:{do{ConductorUp();ConductorClose();V(run,hDriver);ConductorSell();P(stop,hConductor);ConductorOpen();ConductorDown();}while(1);return 0;}主函数:描述具体实现int main(){hDriver=CreateThread(NULL,0,Driver,&dwDriverParam,0,&dwDriverId);hConductor=CreateThread(NULL,0,Conductor,&dwConductorParam,0,&dwConductorId);_getch();system("pause");return 0;}四.WRK下的同步观测1.观察多线程现在Windows XP环境下运行进程同步程序,产生caouoxitong.exe程序,如图所示:再启动WinDbg到内核调试模式,复制caozuoxitong.exe程序到虚拟机上,程序运行结果如下:2.相关命令使用与观察记录中断目标机运行,输入“!process 0 0”命令查找caozuoxitong.exe程序进程的虚地址,截图如下:可以看到caozuoxitong.exe程序虚地址为:8139cab8输入:kd>!process 8139cab8 2 截图如下:由上图可见:此程序存在3个线程,主线程,司机线程,售票员线程五.结论分析通过对这个应用程序的学习,利用多线程应用程序实现同步过程,掌握其中的系统调度原理与过程,基本上了解与掌握了现成的创建,终止与同步过程,掌握了进程调度。