计算机操作系统综合设计实验三实验名称:进程撤销模拟实现实验类型:设计型实验实验环境:VisualC++6.0指导老师:范太华专业班级:姓名:学号:联系电话:实验地点:东六E座4-06实验日期:2014年12月4日实验报告日期:2014年12月4日成绩:__________________________一、实验目的1)理解进程撤销相关理论;2)掌握进程撤销流程。二、实验平台windows7VisualC++6.0三、实验步骤1、实验内容1)采用动态或静态方法生成一颗进程树(进程数目≥20);2)设计进程撤销算法;3)实现进程撤销函数,采用级联方式撤销;4)可动态撤销进程;5)可动态观察进程树的情况;6)测试程序并得到正确结果。2、实验步骤1)输入给定的实验指导书中提供的代码A、打开VisualC++6.0;B、新建c++文件,创建basic.h头文件,并且创建deletepc.cpp;2)进行功能测试并得出正确结果A、编译、运行deletepc.cpp:B、输入createpc命令创建进程,再输入showdetail显示每个进程及其子进程的信息。C、输入deletepc命令删除进程,再输入showdetail显示删除后的每个进程及子进程信息。如果输入是两个参数,则会提示。如果输入一个参数,则正常运行,并且相关进程以及其子进程均被删除了。D、解决了内存泄露问题:用delete(),将当前节点删除。而不是仅仅跳过当前满足条件的节点。E、输入exit命令退出程序:3)deletepc函数程序流程图分析deletepc函数的代码,画出如下流程图:Deletepc函数入口当前节点的左子树是否为空判断父节点的左子树是不是当前节点当前节点的兄弟节点赋给父节点的左子树遍历父节点的所有子节点是是否结束函数遍历所有节点判断临时节点的id是否等于当前节点的id是将临时节点的下下一个节点赋给临时节点的下一节点删除当前节点结束循环否找到父节点左子树的兄弟节点为当前节点将当前节点的兄弟节点赋给子节点的兄弟节点否将当前节点的左子树作为参数,调用deletepc函数将当前节点作为参数,调用deletepc函数否四、实验总结在这次实验中,输入createpc(进程,父进程,优先级)指令来创建进程,因为默认有个父进程0,所以第一次输入时可以输入createpc(1,0,1),在多次输入createpc指令后,可以通过showdetail指令来查看已经创建好进程。进程撤销的核心内容是:进入函数后,判断当前节点的左子树是不是为空。当不为空的时候,递归调用以当前节点左子树为参数的deletepc函数以及当前节点为参数deletepc函数。如果为空,则说明当前节点没有子节点,判断父节点的左子树是不是当前节点,如果是,将当前节点的兄弟节点赋给父节点的左子树;如果不是,遍历父节点的子节点,找到临时节点的兄弟节点为当前节点,然后将当前节点的兄弟节点赋给临时节点的兄弟节点。最后遍历所有节点找到当前节点的位置,并把它删除。