




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、昆明理工大学信息工程与自动化学院学生实验报告( 2010 2011 学年 第 二 学期 )课程名称:操作系统 开课实验室:信自楼444 2011 年 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 *ne
3、xt; QueuePtr; 定义单链表,有定义指针next。typedef struct LinkQueue int prior; QueuePtr *front; QueuePtr *rear; int PartTime; LinkQueue;链队列中定:优先级、结构体里的QueuePtr类型指针变量,指向该优先级的进程的头结点和尾结点,还运行的时间片。LinkQueue Readyqueue10 链队列的单链表。void schedule() 声明调度函数,用来调度进程的运行;void show() 声明输出函数,用来输出的一个函数;void Create()声明创建进程的函数,用来创建进
4、程。yunxingshijian=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.f
5、ront-next=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.RUNTI
6、ME-(int )pow(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发生时,就往下一优先级运行。直到所有进程结束。 程序功能结构图、流程图 创建进程
7、函数Create()(左图) 调度函数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.rea
8、r=pYprintf(“创建成功”);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.fro
9、nt-next=p-next;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 /定义结构体P
10、CB进程控制块char NAME20; /结构体变量,进程名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; /结构体里的
11、QueuePtr类型指针变量,指向该优先级的进程的尾结点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=201031
12、101; /定义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); srand(int)time(0); yunxingshijian=1+(int)(rand()%30); /随机生成一个整数赋给运行时间printf(tt运行时间:%d,yunxi
13、ngshijian); srand(int)time(0); youxianji=1+(int)(rand()%9); /随机生成一个整数(19)赋给优先级printf(t优先级:%d,youxianji); p=(QueuePtr *)malloc(sizeof(QueuePtr); /插入就绪队列QueuePtr *k;for(int i=0;ipcb.NAME,name); /将名字赋给PCB块strcpy(p-pcb.STATE,Ready); /将进程状态赋给PCB块p-pcb.PRIORITY=youxianji; /将优先级赋给PCB块p-pcb.RUNTIME=yunxings
14、hijian; /将运行时间赋给PCB块p-pcb.ID=id; /将id号赋给PCB块if(k-next!=NULL)k=k-next; /k指针在寻找队列末尾进程k-next=p; /将p接到队尾p-next=NULL; /将队尾的next置为空 Readyqueuei.rear=p; N+; /保存当前就绪进程数 id+; /ID自动加1printf(nt第%d个进程创建成功!nn,N);show(); /调用输出函数show()/*调度函数* void schedule()QueuePtr *p;for(int i=0;inext!=NULL)p=Readyqueuei.front-n
15、ext; /p指向Readyqueuei.front-next的结点Sleep(int )pow(2,i+1); /调用函数Sleep()使进程i休眠p-pcb.RUNTIME=p-pcb.RUNTIME-(int )pow(2,i+1); /进程的时间减pow(2,i+1)strcpy(p-pcb.STATE,run); /调用strcpy()把状态run复给p-pcb.STATEp-pcb.PRIORITY-; /权值减减 show();if(p-pcb.RUNTIMEpcb.RUNTIME=0) /判断p-pcb.RUNTIME是否next=p-next; /p前移Readyqueue9
16、.rear-next=p; /把p移到运行结束的队列Readyqueue9.rear p-next=NULL; Readyqueue9.rear=p; /使Readyqueue9.rear指向最后一个结点 strcpy(p-pcb.STATE,finish); /调用strcpy()把状态finish复给p-pcb.STATE show(); /调用输出函数show()else Readyqueuei.front-next=p-next; Readyqueuei+1.rear-next=p; /p移到下一队列的队尾 Readyqueuei+1.rear=p; /使Readyqueuei+1.r
17、ear指向最后一个结点p-next=NULL;strcpy(p-pcb.STATE,ready); /调用strcpy()把状态ready复给p-pcb.STATE/*输出函数*void show() / 队列输出函数QueuePtr *q=NULL;printf(t名字 ID 运行时间 优先级 状态n); for(int j=0;jnext;while(q!=NULL) printf(t%s,t%ld,t%d,t%d,t%sn,q-pcb.NAME,q-pcb.ID,q-pcb.RUNTIME,q-pcb.PRIORITY,q-pcb.STATE);q=q-next ;/*主函数*void
18、main() Create();char choice;printf(请选择是否要对以上进程进行调度?(y(Y)或n(N);scanf(%s,&choice); /输入choicewhile(1)if(choice=Y|choice=y) /判断choice的值 schedule(); /如果choice的值是Y或y 调度schedule()函数 printf(ttt所有进程 (%d个) 运行结束!n,N);break; /调度结束、退出程序if(choice=N|choice=n) /如果choice的值是N或nexit(0); /退出程序if(choice!=Y&choice!=y&choice!=N&choice!=n) /如果choice的值不是Y或或N或nprintf(ttt您的选择有误,请重新输入!n); /输出出错、重新输入scanf(%s,&choice);请加上程序的源代码,需要有详细的注
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 乡村的景色写景作文7篇范文
- 艺术设计创意表现能力评估题
- 公司企业面试题库及答案
- 2025年心理学研究生入学模拟考试试卷及答案
- 2025年心理疏导师职业资格考试试卷及答案
- 2025年消费者权益保护法律法规考试题及答案
- 2025年现代通信技术专业考试试题及答案
- 2025年体育学原理与运动训练技巧考试试卷及答案
- 德阳电工考试试题及答案
- 2025年食品科学与技术专业为考核职称试题及答案
- 借助数学实验 促进思维发展
- 净水厂毕业设计(图纸+计算书)
- 河北工程大学食堂CI手册
- 真空系统设计培训课件
- 机械设备维修的安全知识(课堂PPT)
- 住宅小区室外道路及管网配套工程施工方案
- 医脉通三级综合医院服务能力指南2016年版
- 工区施工监测监测点保护管理办法
- 泊船瓜洲集体备课
- 孔分子筛SBA-15的研究进展
- GB18187-2000酿造食醋
评论
0/150
提交评论