操作系统进程管理系统实验

上传人:hs****ma 文档编号:464831008 上传时间:2023-03-08 格式:DOC 页数:15 大小:721.50KB
返回 下载 相关 举报
操作系统进程管理系统实验_第1页
第1页 / 共15页
操作系统进程管理系统实验_第2页
第2页 / 共15页
操作系统进程管理系统实验_第3页
第3页 / 共15页
操作系统进程管理系统实验_第4页
第4页 / 共15页
操作系统进程管理系统实验_第5页
第5页 / 共15页
点击查看更多>>
资源描述

《操作系统进程管理系统实验》由会员分享,可在线阅读,更多相关《操作系统进程管理系统实验(15页珍藏版)》请在金锄头文库上搜索。

1、word理工大学信息工程与自动化学院学生实验报告( 2010 2011学年 第二学期)课程名称:操作系统 开课实验室:信自楼4442011 年 4 月 10日年级、专业、班学号成绩实验项目名称进程管理指导教师教师评语 教师签名: 年 月 日一、实验目的通过编写进程管理的算法,要求学生掌握整个进程管理的各个环节,进程的数据结构描述,进程的各种状态之间的转换,以及进程的调度算法。以加深对进程的概念及进程调度算法的理解,并且提高链表的应用能力,达到提高编程能力的目的。二、实验原理及基本技术路线图(方框原理图)用C语言或C+语言开发。需要定义PCB的数据结构,用链表的形式管理进程,采用多级反馈队列调度

2、的算法模拟进程的控制。要求有创建、撤销、调度、阻塞、唤醒进程等功能。进程的状态转换图创建就绪运行终止等待创建调度选中剥夺结束等待事件事件发生数据结构定义、主要变量的说明、函数的说明及各原语的功能说明typedef struct PCB 定义结构体PCB进程控制块;char NAME20 定义结构体变量,进程名;long ID 定义进程id;int RUNTIME 定义进程运行时间;char STATE6 定义进程状态有 ready 、wait 、run;int PRIORITY定义权值。 typedef struct QNode PCB pcb;struct QNode *next;Queue

3、Ptr;定义单链表,有定义指针next。typedef struct LinkQueue int prior; QueuePtr *front; QueuePtr *rear; int PartTime; LinkQueue;链队列中定:优先级、结构体里的QueuePtr类型指针变量,指向该优先级的进程的头结点和尾结点,还运行的时间片。LinkQueue Readyqueue10 链队列的单链表。void schedule() 声明调度函数,用来调度进程的运行;void show() 声明输出函数,用来输出的一个函数;void Create()声明创建进程的函数,用来创建进程。yunxings

4、hijian=1+(int)(rand()%30); 此语句是随机生成一个整数赋给运行时间RUNTIME;youxianji=1+(int)(rand()%9); 该语句随机生成一个整数(19)赋给优先级; strcpy(p-pcb.NAME,name)将名字赋给PCB块;strcpy(p-pcb.STATE,Ready)将进程状态赋给PCB块; p-pcb.PRIORITY=youxianji将优先级赋给PCB块; p-pcb.RUNTIME=yunxingshijian; 将运行时间赋给PCB块; p-pcb.ID=id 将id号赋给PCB块。Readyqueuei.front-next=

5、p-next; Readyqueuei+1.rear-next=p; Readyqueuei+1.rear=p; p-next=NULL; p移到下一队列的队尾,使Readyqueuei+1.rear指向最后一个结点。Readyqueuei.front-next=p-next; Readyqueue9.rear-next=p; p-next=NULL;Readyqueue9.rear=p; /p-next前移,把p移到运行结束的队列Readyqueue9.rear。多级反馈队列调度算法的描述一个进程被调度,则其运行时间有p-pcb.RUNTIME=p-pcb.RUNTIME-(int )pow

6、(2,i+1),此后如果该进程的p-pcb.RUNTIMEpcb.RUNTIME=0,此进程就结束且加入到Readyqueue9.rear-next=p且p-next=NULL。没有结束就移加到下一队列的尾部且优先级减“1”(Readyqueuei.front-next=p-next;Readyqueuei+1.rear-next=p;Readyqueuei+1.rear=p;p-next=NULL; )。然后往下执行。如此循环.iv Readyqueuei.front-next!=NULL发生时,就往下一优先级运行。直到所有进程结束。程序功能结构图、流程图 创建进程函数Create()(左图

7、) 调度函数schedule()(右图)开 始调用InitQueue()函数输入m1=j输入name随机生成优先级、运行时间for i=0 to 9youxianji=9-ik=Readyqueuei.front; strcpy(p-pcb.NAME,name); strcpy(p-pcb.STATE,Ready); p-pcb.PRIORITY=youxianji; p-pcb.RUNTIME=yunxingshijian; p-pcb.ID=id;Yk-next=nullNk=k-nextk-next=p; p-next=NULL; Readyqueuei.rear=pYprintf(“创

8、建成功”);jmNY调用show()结 束开 始p=Readyqueuei.front-next; Sleep(int)pow(2,i+1); p-pcb.RUNTIME=p-pcb.RUNTIME-(int)pow(2,i+1); strcpy(p-pcb.STATE,run); N调用show();函数p-pcb.RUNTIMEnext=p-next; Readyqueue9.rear-next=p; p-next=NULL;Readyqueue9.rear=p; strcpy(p-pcb.STATE,finish);调用show()Readyqueuei.front-next=p-nex

9、t;Readyqueuei+1.rear-next=p; Readyqueuei+1.rear=p; p-next=NULL;strcpy(p-pcb.STATE,ready);YReadyqueuei.front-next=NULL1=iYNi9结 束三、所用仪器、材料(设备名称、型号、规格等)。所用仪器:计算中心201;操作系统:Microsoft Visual C+;软件平台:Microsoft Visual C+四、实验方法、步骤#include#include#include#include#includetypedef struct PCB /定义结构体PCB进程控制块char N

10、AME20; /结构体变量,进程名long ID; /进程idint RUNTIME; /进程运行时间char STATE6; /进程状态 ready wait runint PRIORITY; /权值 PCB; typedef struct QNode /单链表 PCB pcb;struct QNode *next;QueuePtr;typedef struct LinkQueue /链队列 int prior; /优先级QueuePtr *front; /结构体里的QueuePtr类型指针变量,指向该优先级的进程的头结点QueuePtr *rear; /结构体里的QueuePtr类型指针变

11、量,指向该优先级的进程的尾结点int PartTime; /时间片LinkQueue;LinkQueue Readyqueue10; /链队列的单链表int N; /N为当前进程数void schedule(); /声明调度函数void show(); /声明输出函数 void InitQueue() / 队列的初始化、给每个队列加个头结点 for(int i=0;inext=NULL; /初始化时Readyqueuei.front-next为空 /*创建进程*void Create() InitQueue();char name20; long id=201031101; /定义ID和初始化为201031101 int m;QueuePtr *p;int yunxingshijian,youxianji; /运行时间、优先级printf(ntt请输入要创建进程的数目:);fflush(stdin);scanf(%d,&m); for(int j=1;j=m;j+) /创建用户所需进程m个printf(tt输入进程名:); /用户输入用户名scanf(%s,&name);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号