进程调度实验【实验报告】.doc_第1页
进程调度实验【实验报告】.doc_第2页
进程调度实验【实验报告】.doc_第3页
进程调度实验【实验报告】.doc_第4页
进程调度实验【实验报告】.doc_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

实验一 进程调度实验专业:信息管理与信息系统学号:2014*姓名:陈*实验日期:2016年11月11日一、 实验目的通过本实验,采用动态优先权优先的调度算法编写和调试一个简单的进程调度程序,加深理解了有关进程控制块、进程队列的概念,并体会了优先权调度算法的具体实施办法。二、 实验要求用高级语言编写和调试一个进程调度程序,以加深对进程的概念及进程调度算法的理解三、实验方法内容1. 算法设计思路(流程图)2. 算法中用到的数据结构(1)首先定义一个结构体,用以保存一个进程的各种信息,最后一个指针便于将所有进程形成一个链表typedef struct pcbint id;int arriveTime; /到达时间int priority; int cpuTime;int allTime;int startBlock;int blockTime;char state;struct pcb *next;PCB;(2)接着建立一个链表存储所有进程,以结构体PCB为节点(头节点为空节点,从第二个节点开始存储数据)。链表建立过程如下:int i = 0;PCB *head,*p1,*p2;head = (PCB *)malloc(sizeof(PCB); /创建链表头p2 = head;/三个进程for(i = 0; i id = pcIdi;p1-priority = priorityi;p1-cpuTime = cpuTimei;p1-allTime = allTimei;p1-startBlock = startBlocki;p1-blockTime = blockTimei;p1-state = W; /初始状态为就绪p2-next = p1;p2 = p1;p2-next = NULL; /表尾指针设为空指针,表示链表结束3. 主要模块(函数名)如下:(1) 创建初始队列,用链表存储PCB *createLink();(2)输出链表中所有进程的状态void printLink(PCB *head, int time);(3)判断是否所有进程都已完成int isFinish(PCB *head);(4)判断是否所有未完成的进程都处于阻塞状态int isBlock(PCB *head);(5)获得当前时刻优先权最高且处于就绪状态的进程PCB *getHighPriority(PCB *head);(6)运行(调度函数,在这里展示所有代码)void run(PCB *head);所有代码如下:#include #include /三个进程的初始状态int pcId = 0, 1, 2;int priority = 6, 8, 5;int cpuTime = 0, 0, 0;int allTime = 7, 7, 6;int startBlock = 6, 4, 2;int blockTime = 3, 8, 6;typedef struct pcbint id;int arriveTime; /到达时间int priority; int cpuTime;int allTime;int startBlock;int blockTime;char state;struct pcb *next;PCB;/创建初始队列,用链表存储PCB *createLink()/int pcNum = 0; /进程个数int i = 0;PCB *head,*p1,*p2;head = (PCB *)malloc(sizeof(PCB); /创建链表头p2 = head;for(i = 0; i arriveTime = i; /进程到达时间为输入时间/设置进程的初始状态p1-id = pcIdi;p1-priority = priorityi;p1-cpuTime = cpuTimei;p1-allTime = allTimei;p1-startBlock = startBlocki;p1-blockTime = blockTimei;p1-state = W; /初始状态为就绪wp2-next = p1;p2 = p1;p2-next = NULL; /表尾指针设为空指针,表示链表结束return head;/输出所有队列中所有进程的状态void printLink(PCB *head, int time)printf(当前时刻为:%dn,time);printf(ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATEn);PCB *p1 = head-next;while(p1 != NULL)printf(%d %d %d %d %d %d %cn,p1-id,p1-priority,p1-cpuTime,p1-allTime,p1-startBlock,p1-blockTime,p1-state);p1 = p1-next; /指向下一个节点printf(n); /空行return ;/判断是否所有进程都已完成int isFinish(PCB *head)PCB *p1 = head-next;while(p1 != NULL)if(p1-state != F) /如果有未完成的进程,返回0return 0;p1 = p1-next;return 1; /所有进程都完成了,返回1/判断是否所有未完成的进程都处于阻塞状态int isBlock(PCB *head)PCB *p1 = head-next;while(p1 != NULL)if(p1-state != F & p1-state != B) /如果有未阻塞的进程,返回0return 0;p1 = p1-next;return 1; /所有进程都阻塞了,返回1/获得当前时刻优先权最高且处于就绪状态的进程PCB *getHighPriority(PCB *head)int pri = -32768; /优先权PCB *p1,*p2 = NULL;p1 = head-next;while(p1 != NULL)if(p1-state = W & p1-priority pri) pri = p1-priority; /获得优先权更高的进程 p2 = p1;p1 = p1-next;return p2; /返回优先权最高的进程/运行void run(PCB *head)int time = 0; /时刻int i;int mark;PCB *p1,*p2;while(!isFinish(head)mark = 0;p1 = getHighPriority(head); /p1所指进程优先权最高,获得运行资格if(p1 != NULL)p1-state = R;for(i = 1;i next;while(p2 != NULL)if(p2 = p1 & p2-state != F)p2-priority -= 2; /进程每运行一个时间片,优先权减2。p2-cpuTime+;p2-allTime-;if(p2-allTime = 0)p2-state = F;mark = 1;else if(p2-cpuTime % p2-startBlock = 0)p2-state = B; /如果进程运行了startBlock个时间片,进入阻塞状态mark = 1;else if(p2 != p1 & p2-state != F)if(p2-state = W)p2-priority+; /进程在就绪队列中呆一个时间片,优先权增加1if(p2-state = B)p2-blockTime -;if(p2-blockTime = 0)p2-state = W; /阻塞时间结束,回到就绪队列p2-blockTime = blockTimep2-id;p2 = p2-next;time+;printLink(head,time);if(isBlock(head)break;if(mark = 1)break;if(p1 != NULL & p1-state = R)p1-state = W;/主函数int main()PCB *head;head = createLink();printLink(head,0);run(head);return 0;四、实验结果1. 执行结果:当前时刻为:0ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 6 0 7 6 3 W1 8 0 7 4 8 W2 5 0 6 2 6 W当前时刻为:1ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 7 0 7 6 3 W1 6 1 6 4 8 R2 6 0 6 2 6 W当前时刻为:2ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 8 0 7 6 3 W1 4 2 5 4 8 R2 7 0 6 2 6 W当前时刻为:3ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 6 1 6 6 3 R1 5 2 5 4 8 W2 8 0 6 2 6 W当前时刻为:4ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 4 2 5 6 3 R1 6 2 5 4 8 W2 9 0 6 2 6 W当前时刻为:5ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 5 2 5 6 3 W1 7 2 5 4 8 W2 7 1 5 2 6 R当前时刻为:6ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 6 2 5 6 3 W1 8 2 5 4 8 W2 5 2 4 2 6 B当前时刻为:7ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 7 2 5 6 3 W1 6 3 4 4 8 R2 5 2 4 2 5 B当前时刻为:8ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 8 2 5 6 3 W1 4 4 3 4 8 B2 5 2 4 2 4 B当前时刻为:9ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 6 3 4 6 3 R1 4 4 3 4 7 B2 5 2 4 2 3 B当前时刻为:10ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 4 4 3 6 3 R1 4 4 3 4 6 B2 5 2 4 2 2 B当前时刻为:11ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 2 5 2 6 3 R1 4 4 3 4 5 B2 5 2 4 2 1 B当前时刻为:12ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 0 6 1 6 3 B1 4 4 3 4 4 B2 5 2 4 2 6 W当前时刻为:13ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 0 6 1 6 2 B1 4 4 3 4 3 B2 3 3 3 2 6 R当前时刻为:14ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 0 6 1 6 1 B1 4 4 3 4 2 B2 1 4 2 2 6 B当前时刻为:15ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 0 6 1 6 3 W1 4 4 3 4 1 B2 1 4 2 2 5 B当前时刻为:16ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 1 6 1 6 3 W1 4 4 3 4 8 W2 1 4 2 2 4 B当前时刻为:17ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 2 6 1 6 3 W1 2 5 2 4 8 R2 1 4 2 2 3 B当前时刻为:18ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 3 6 1 6 3 W1 0 6 1 4 8 R2 1 4 2 2 2 B当前时刻为:19ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 1 7 0 6 3 F1 1 6 1 4 8 W2 1 4 2 2 1 B当前时刻为:20ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 1 7 0 6 3 F1 -1 7 0 4 8 F2 1 4 2 2 6 W当前时刻为:21ID PRIORITY CPUTIME ALLTIME STARTBLOCK BLOCKTIME STATE0 1 7 0 6 3 F1 -

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论