武汉轻工大学——实验一进程调度_第1页
武汉轻工大学——实验一进程调度_第2页
武汉轻工大学——实验一进程调度_第3页
武汉轻工大学——实验一进程调度_第4页
武汉轻工大学——实验一进程调度_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

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

文档简介

1、武汉轻工大学数学与计算机学院操作系统实验报告题 目: 进程调度 专 业: 数学与计算机学院 班 级: 计算机类1303班 学 号: 1305110050 姓 名: 刘文斌 指导老师: 黄川 2015年05月26日1、目的和要求通过这次实验,理解进程调度的过程,进一步掌握进程状态的转变、进程调度的策略,进一步体会多道程序并发执行的特点,并分析具体的调度算法的特点,掌握对系统性能的评价方法。2、实验内容阅读教材计算机操作系统第二章和第三章,掌握进程管理及调度相关概念和原理。编写程序模拟实现进程的轮转法调度过程,模拟程序只对PCB进行相应的调度模拟操作,不需要实际程序。假设初始状态为:有n个进程处于

2、就绪状态,有m个进程处于阻塞状态。采用轮转法进程调度算法进行调度(调度过程中,假设处于执行状态的进程不会阻塞),且每过t个时间片系统释放资源,唤醒处于阻塞队列队首的进程。程序要求如下:1)输出系统中进程的调度次序;2)计算CPU利用率。3、实验环境Windows操作系统、VC+6.0C语言4、 设计思想:unuse_cpu+x+x=tblocked队首进程入ready队列队尾;x=0beginuse_cpu=0x=0unuse_cpu=0ready队列不空或blocked队列不空ready队列不空pß 取ready队首元素p->PCB.state置“运行”输出p->PCB

3、.namep->PCB.cpu_time-use_cpu+p->PCB.cpu_time>0p入ready队列队尾释放pend /*use_cpu中记录CPU 运行时间 /*unuse_cpu中记录CPU空闲时间 否 是是 否 是 否 是 是5、 源程序#include<stdio.h>#include<stdlib.h>struct PCB_type char name ; /进程名 int state ; /进程状态 int cpu_time ;/运行需要的CPU时间(需运行的时间片个数);struct QueueNode struct PCB_t

4、ype PCB; struct QueueNode *next;struct QueueNode*ready_head=NULL, /就绪队列队首指针*ready_tail=NULL , /就绪队列队尾指针*blocked_head=NULL, /阻塞队列队首指针*blocked_tail=NULL; /阻塞队列队尾指针 int inuse_cpu,outuse_cpu; void start_state() /读入假设的数据,设置系统初始状态int n,m,i;struct QueueNode *p,*q;printf("假设处于就绪状态的进程数n为: n");scanf

5、("%d",&n);printf("假设处于阻塞状态的进程数m为: n");scanf("%d",&m);p=(struct QueueNode *)malloc(sizeof(struct QueueNode); p->next=NULL;ready_head=ready_tail=p;for(i=1;i<=n;i+)p=(struct QueueNode *)malloc(sizeof(struct QueueNode);p->next=NULL;p->PCB.state=1;printf(

6、"请输入就绪程序%d的名称和CPU时间: n",i);scanf("%d%d",&p->PCB.name,&p->PCB.cpu_time);ready_tail->next=p;ready_tail=p;q=(struct QueueNode *)malloc(sizeof(struct QueueNode);q->next=NULL;blocked_head=blocked_tail=q;for(i=1;i<=m;i+)q=(struct QueueNode *)malloc(sizeof(struct

7、QueueNode);q->next=NULL;q->PCB.state=0;printf("请输入阻塞进程%d的名称和CPU时间: n",i);scanf("%d%d",&q->PCB.name,&q->PCB.cpu_time);blocked_tail->next=q;blocked_tail=q;printf("n当前处于就绪状态的进程有:n");p=ready_head->next;i=1;while(p)printf("进程%d的名称和状态和CPU时间:%5d%

8、5d%5dn",i,p->PCB.name,p->PCB.state,p->PCB.cpu_time);p=p->next;i+;void dispath() /模拟调度int a=0,t;inuse_cpu=0;outuse_cpu=0;printf("请输入时间片t:");scanf("%d",&t);printf("开始调度:n");while(ready_head!=ready_tail|blocked_head!=blocked_tail)struct QueueNode *p,*q

9、;if(ready_head!=ready_tail)p=ready_head->next;ready_head->next=p->next;p->next=NULL;if(ready_head->next=NULL)ready_tail=ready_head;p->PCB.state=2;printf("t进程%d调度中",p->PCB.name);inuse_cpu+;a+;p->PCB.cpu_time-;if(p->PCB.cpu_time)ready_tail->next=p;ready_tail=p;e

10、lseprintf("t进程%d完成调度! ",p->PCB.name);free(p);elseoutuse_cpu+;a+;printf("t空闲一个时间片");if(a=t&&blocked_head!=blocked_tail)q=blocked_head->next;blocked_head->next=q->next;q->next=NULL;if(blocked_head->next=NULL)blocked_tail=blocked_head;ready_tail->next=q;ready_tail=q;a=0;void calculate() /计算CPU利用率printf("nCPU的利用率为:%.2fn",(float)inuse_cpu/(inuse_cpu+outuse_cpu);void main()start_state();dispath(); calculate();6、 实例运行结果7、 总结该实验利用进程调度中的优先级算法调度进程,开始给每一个进程设定一个优先级数,对于优先级高的进程先调度,优先级低的进程后调度,在调度一个进程时,其他进程将处于就绪态,而正在被调度的进程应处于运行态。一开始在做

温馨提示

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

评论

0/150

提交评论