进程调度+C语言+操作系统实验_第1页
进程调度+C语言+操作系统实验_第2页
进程调度+C语言+操作系统实验_第3页
进程调度+C语言+操作系统实验_第4页
进程调度+C语言+操作系统实验_第5页
全文预览已结束

下载本文档

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

文档简介

操作系统原理实验——进程调度实验报告1目的与要求:1)本实验目的是通过对进程调度算法的实现和实验模拟,加深对操作系统进程调度操作功能和进程调度算法的完整理解,培养和提高学生对操作系统开发的兴趣,以及进程调度程序的开发与应用能力;2)理论上必须深刻理解优先权调度算法和时间片轮转调度算法的基本思想和原理;3)独立使用C或VC++编程语言编写优先权调度或时间片轮转算算法调度模拟程序;4)按照实验题目要求独立正确地完成实验内容(编写、调试算法程序,提交程序清单及及相关实验数据与运行结果)5)于2009年10月15日以前提交本次实验报告(含电子和纸质报告,由学习委员以班为单位统一打包提交)。2实验内容或题目1)设计有5个进程并发执行的模拟调度程序,每个程序由一个PCB表示。2)模拟调度程序可任选两种调度算法之一实现(有能力的同学可同时实现两个调度算法)。3)程序执行中应能在屏幕上显示出各进程的状态变化,以便于观察调度的整个过程。4)本次实验内容(项目)的详细说明以及要求请参见实验指导书。3实验步骤与源程序#include<stdio.h>#include<stdlib.h>#include<string.h>voidCheck();typedefstructnode{ charname[10]; intspan;//轮转时间 inttake;//占用时间 intused;//已用的时间 intneed;//还需要的时间 charstatus;//状态 structnode*next;}PCB;PCB*ready,*finish,*tail,*rear;voidPrint(PCB*p){ while(p!=NULL) { printf("%3s%5d%5d%5d%5d%5c\n",p->name,p->used,p->need,p->take,p->span,p->status); p=p->next; }}voidCreat(intN){ PCB*p; inttime; charna[10]; ready=NULL;/*就绪队列头指针*/ finish=NULL;/*完成队列头指针*/ tail=NULL; rear=NULL; printf("Enternameandtimeofroundprocess\n"); for(inti=1;i<=N;i++)//创建就绪队列 { p=(PCB*)malloc(sizeof(PCB)); scanf("%s",na); scanf("%d",&time); strcpy(p->name,na); p->span=2; p->take=0; p->used=0; p->need=time; p->status='J'; p->next=NULL; if(ready==NULL){ready=p;tail=p;} else{tail->next=p;tail=p;} } printf("……运行结果……\n");}voidPrint1(){//输出ready与finish队列 PCB*p; p=ready; printf("name,used,need,take,span,state\n"); Print(p); p=finish; Print(p); }voidRun(){ Print1(); ready->used+=1; ready->need-=1; ready->take+=1; ready->status='R'; if(ready->need!=0)//进程时间need片是否为0 { if(ready->take<ready->span)/*占用时间是否到轮转时间,没到就继续,到了就排到就绪队列尾*/ {Run();} else{tail->next=ready;ready=ready->next;tail=tail->next;tail->status='J';tail->take=0;tail->next=NULL;Check();} } else//进程撤销,放入撤销队列 { if(finish==NULL) {finish=ready;rear=finish;} else {rear->next=ready;rear=rear->next;} ready=ready->next;rear->next=NULL;rear->status='F';rear->take=0;Check(); } //Check();由于上多次文调用Run本身递归,此句也会被多调用,产生在结束时的冗余结果;}voidCheck(){ if(ready!=NULL){Run();} els

温馨提示

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

评论

0/150

提交评论