1、1*大学计算机科学系实 验 报 告 书实验题目: pcb 的组织与维护课程名称: 操作系统 主讲教师: 辅导教师: 课程编号: 班 级: 实验时间: 2一、 实验目的:1、通过编写和调试 pcb 组织与维护的模拟程序以加深对 pcb 组织与维护方案的理解。2、通过编写和调试 pcb 组织与维护的模拟程序以加强对进程的基本情况以及进程的运行变化过程的进一步理解。 二、 实验环境:VC 6.0+三、 实验内容1、通过线性方式对以 pcb 为唯一标志的进程进行创建、查询、添加、删除等操作。2、通过索引方式对以 pcb 为唯一标志的进程进行创建、查询、添加、删除等操作。3、通过链接方式对以 pcb 为
2、唯一标志的进程进行创建、查询、添加、删除等操作。四、 实验设计原理1、系统利用 PCB 来描述进程的基本情况以及进程的运行变化过程。PCB 是进程存在的唯一标志,当系统创建一个进程时,为进程设置一个 PCB,再利用 PCB 对进程进行管理和控制。撤销进程时,系统收回它的 PCB,进程也随之消亡。进程是由程序、数据和进程控制块 PCB 三部分组成.PCB 是进程的“灵魂”,由于进程控制块中保存了进程的地址信息,通过 PCB 可以得到进程程序的存储位置,也可以找到整个进程。2、为了便于管理,系统把所有的 PCB 用适当方式组织起来。一般来说,大致有以下三种组织方式:1、线性方式;2、索引方式;3、
3、连接方式。通过这三种方式的组织进而对进程进行高效的管理。五、 算法设计与流程程序设计流程图如下:1、线性方式流程图:3否是是 是否否是开始读入选择选择输入输入是否是 1 否线性方式是否是 2索引方式输出:输入有误!请重新输入请输入进程的个数读入进程的个数 n保存这 n 个进程的信息,并创建 n 个进程选择相应的操作查询 添加 删除返回首菜单在已有的进程信息中查找对应进程号的进程信息是否存在输出进程信息 无该进程把新的进程信息保存在已有的进程信息中查找对应进程号的进程信息是否存在删除该进程 无该进程线性方式代码:4#include #include using namespace std;#de
4、fine FALSE 0#define TRUE 1#define TASK_READY 3#define TASK_WAITE 4#define TASK_RUNNING 5struct task_structstring pname; /进程名int pid;/进程号int state;/进程当前状态/*3 就绪状态 4 等待状态 5 运行状态*/task_struct *next;/指向下一个的;/void showInput();void menu(task_struct *pcb);/int inputNum()/提示输入进程数int n;coutn;coutnext=NULL;ta
5、sk_struct *p=new task_struct;p=pcb;for(int i=0;ipid=i+1;coutq-pname;loop: couttmp;if(tmp!=3if(p-next=NULL)q-next=NULL;p-next=q;/p=q;coutnext=NULL;p=p-next;p-next=q;/p=q;coutnext;p!=NULL;p=p-next)coutpidpnamestate)case 3:coutpidpnamestate)case 3:coutpid;task_struct *p;for(p=pcb-next;p!=NULL;p=p-next)
6、7if(p-pid=pid)output(pcb, p);return;coutnext!=NULL;q=q-next);/if(q-next=NULL)if(pcb-next=NULL)p-pid=1;elsep-pid=q-pid+1;coutp-pname;loop1:couttmp;if(tmp!=3p-next=NULL;/if(q-next=NULL)if(pcb-next=NULL)pcb-next=p;8elseq-next=p;couttmp;for(p=pcb;p!=NULL;p=p-next)q=p-next;if(q-pid=tmp)p-next=q-next;dele
7、te q;display(pcb);coutnext!=NULL)q=p-next;p-next=q-next;delete q;delete pcb;9void menu(task_struct *pcb)/提示选择相应的操作int m;coutm;couttmp;coutendlendl;switch(tmp)case 1:List();break;/case 2:Hash();break;default:cout“输入有误!请重新输入。“endlendl;showInput();void main()showInput();六、实验调试与结果分析(问题的发现、分析、解决方案与创新)实验结果展示:*进程号 进程名 当前状态1 a TASK_WAITE2 s TASK_READY3 d TASK_RUNNING*1. 查询2. 添加3. 删除