资源预览内容
第1页 / 共11页
第2页 / 共11页
第3页 / 共11页
第4页 / 共11页
第5页 / 共11页
第6页 / 共11页
第7页 / 共11页
第8页 / 共11页
第9页 / 共11页
第10页 / 共11页
亲,该文档总共11页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
精选优质文档-倾情为你奉上操作系统实验实验二 进程管理 学号 姓名 陈鑫 班级 集成电路 华侨大学电子工程系实验二 进程管理实验目的 1、 理解进程的概念,明确进程和程序的区别。2、 理解并发执行的实质。3、 掌握进程的创建、睡眠、撤销等进程控制方法。 实验内容与基本要求 用C语言编写程序,模拟实现创建新的进程;查看运行进程;换出某个进程;杀死进程等功能。 实验报告内容 1、 进程、进程控制块等的基本原理。2、 程序流程图。3、 程序及注释。4、 运行结果以及结论。原理:C语言是顺序执行语言,没有多线程编程.所以在此,只是利用链表的操作模拟了一个进程管理.通过创建3条单向链表:run运行态进程链表 ready就绪态进程链表 wait等待态进程链表 通过链表节点的插入,退出,删除,增加.可以实现进程管理的模拟.源码:#include #include#pragma warning(disable:4996)typedef struct PCBint UID;int Prio;char name10;struct PCB *next;PCB;PCB *ready, *run, *wait;int insert(PCB *head, PCB *node)PCB *p;p = head;if (p-next = NULL)head-next = node;return 1;while (p)if (p-next = NULL)p-next = node;return 1;elsep = p-next;PCB *dequeue(PCB *head)PCB *p;p = head;if (p-next = NULL)return NULL;elsep = p-next;head-next = p-next;p-next = NULL;return p;int init()system(cls);PCB *p;ready = (PCB *)malloc(sizeof(PCB);ready-next = NULL;run = (PCB *)malloc(sizeof(PCB);run-next = NULL;wait = (PCB *)malloc(sizeof(PCB);wait-next = NULL;printf(输入进程UID和进程名,优先级来创建一个新的进程:n);while (1)p = (PCB *)malloc(sizeof(PCB);p-next = NULL;scanf(%d %s %d,&p-UID,&p-name,&p-Prio);if (p-UID = 0)printf(初始进程已经被创建n);break;elseinsert(ready, p);printf(t%dt%st%dn,p-UID,p-name,p-Prio);return 1;int create()PCB *p;p = (PCB *)malloc(sizeof(PCB);p-next = NULL;printf(输入进程UID和进程名,优先级来创建一个新的进程n);scanf(%d %s %d, &p-UID, &p-name,&p-Prio);if (insert(ready, p)printf(创建了一个新进程:UID =%d NAME =%s Prio= %dn, p-UID, p-name,p-Prio);elseprintf(创建失败n);return 1;int runqueue()PCB *p = dequeue(ready);if (p = NULL)printf(就绪队列中没有进程! n);return 0;elseinsert(run, p);printf(运行进程队列中插入了一个进程:UID = %d NAME= %s Prio= %dn, p-UID, p-name,p-Prio);return 1;int waitqueue()PCB *p = dequeue(run);if (p = NULL)printf(等待进程队列中没有进程);return 0;elseinsert(wait, p);printf(等待进程队列中插入一个进程:UID = %d NAME= %s Prio= %dn, p-UID, p-name,p-Prio);return 1;int readyqueue()PCB *p = dequeue(wait);if (p = NULL)printf(等待进程队列中没有进程 n);return 0;elseinsert(ready, p);printf(就绪进程队列中插入一个进程: UID= %d NAME= %s Prio= %dn,p-UID,p-name,p-Prio);return 1;int outputqueue(PCB *head)PCB *p;if (head-next = NULL)printf(队列为空n);return 1;p = head-next;while (p)printf(UID= %d NAME= %s Prio= %dn,p-UID,p-name,p-Prio);p = p-next;return 0;int outputs()printf(就绪队列:n);outputqueue(ready);printf(运行队列:n);outputqueue(run);printf(等待队列:n);outputqueue(wait);return 1;int main()char COMMAND;if (init() = 1)printf(初始化.n);elseprintf(初始化失败:n);printf(创建一个新的进程请输入c;n);printf(就绪队列转向运行队列请输入r;n);printf(运行队列转向等待队列请输入w;n);printf(等待队列转向就绪队列请输入d;n);printf(请输入命令(支持大小写均识别);n);while (1)scanf(%c,&COMMAND);switch (COMMAND)case n:break;case c:create(); break;case r:runqueue(); break;case w:waitqueue(); break;case d:readyqueue(); break;caseo:outputs(); break;case C:create(); break;case R:runqueue(); break;case W:waitqueue(); break;case D:readyqueue(); break;caseO:outputs(); break;开始流程图:进程状态转换(插入不同的链表的)进程调度删除一个进程增加一个进程等待指令输入创建3条空链表 首先是初始进程的创建.管理进程专心-专注-专业
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号