下载
加入VIP
  • 专属下载特权
  • 现金文档折扣购买
  • VIP免费专区
  • 千万文档免费下载

上传资料

关闭

关闭

关闭

封号提示

内容

首页 进程调度算法的模拟

进程调度算法的模拟.doc

进程调度算法的模拟

廖川谷
2017-10-06 0人阅读 举报 0 0 暂无简介

简介:本文档为《进程调度算法的模拟doc》,可适用于IT/计算机领域

进程调度算法的模拟通过模拟进程控制方法及单处理机系统的进程调度了解进程的结构进程的创建与撤消进程的组织及进程的状态及其转换掌握进程调度策略。学时本实验为单机模拟进程调度算法在程序设计时不需真正地建立线程或者进程。实验模拟创建若干进程(人为输入或随机数产生)选择一种或几种单处理机的进程调度算法如FCFS(先来先服务)SPF(短进程优先)RR(时间片轮转法)优先级算法等模拟进行进程调度。每进行一次调度都打印一次运行进程、就绪队列、以及各个进程的PCB并能在进程完成后及时撤消该进程。进程及进程的运行状态进程是现代计算机中的基本要素是系统分配资源和调度的基本单位。进程与程序不同进程是系统中动态的实体有它的创建、运行和撤销的过程。PCB块是系统感知进程存在的唯一实体。进程的创建必须首先创建进程的PCB块而进程的运行也伴随着PCB块的变化进城撤销也要同时撤销它的PCB块。所以本实验的任务就是通过模拟调度进程的PCB块来调度进程。进程的PCB块包含以下四方面的内容:a)进程标示符b)处理及状态信息c)进程调度信息d)进程控制信息进程在运行中存在三种基本状态分别是运行状态、就绪状态和阻塞状态。进程调度一个运行进程的时间片用完或发生阻塞时系统就会选择一个就绪进程调度执行。进程的调度算法有很多如FCFS、SPF、优先级调度和时间片轮转方法。进程调度算法模拟试验就是通过调度进程的PCB块来模拟调度进程。在系统中PCB块就表现为一个结构体PCB块之间的连接方式存在两种一种是连接方式一种是索引方式。本试验中可选择任意一种连接方式。例程设计一个有N个进程共行的进程调度程序。进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程)。每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到达时间、需要运行时间、已用CPU时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生)。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。每个进程的状态可以是就绪W(Wait)、运行R(Run)、或完成F(Finish)三种状态之一。就绪进程获得CPU后都只能运行一个时间片。用已占用CPU时间加来表示。如果运行一个时间片后进程的已占用CPU时间已达到所需要的运行时间则撤消该进程如果运行一个时间片后进程的已占用CPU时间还未达所需要的运行时间也就是进程还需要继续运行此时应将进程的优先数减(即降低一级)然后把它插入就绪队列等待CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的PCB以便进行检查。重复以上过程直到所要进程都完成为止。调度算法的流程图如下:开始初始化进程PCB输入进程信息各进程按优先数从高到低排列y就绪队列空?结束就绪队列首进程投入运行时间片到CPU占用时间运行已占用CPU时间y进程完成撤已达到所需CPU时间销该进程是运行进程的优先数减把运行进程插入就绪队列图流程图#include"stdioh"#include<stdlibh>#include<conioh>#definegetpch(type)(type*)malloc(sizeof(type))#definestructpcb{*定义进程控制块PCB*charnamecharstateintsuperintntimeintrtimestructpcb*link}*ready=,*ptypedefstructpcbPCBvoidsort()*建立对进程进行优先级排列函数*{}voidinput()*建立进程控制块函数*{inti,numprintf("n请输入进程数量")scanf("d",num)for(i=i<numi){printf("n进程号Nod:n",i)p=getpch(PCB)printf("n输入进程名:")scanf("s",p>name)printf("n输入进程优先数:")scanf("d",p>super)printf("n输入进程运行时间:")scanf("d",p>ntime)printf("n")p>rtime=p>state='w'p>link=sort()*调用sort函数*}}intspace(){intl=PCB*pr=readywhile(pr!=){lpr=pr>link}return(l)}voiddisp(PCB*pr)*建立进程显示函数,用于显示当前进程*{printf("nqnametstatetsupertndtimetruntimen")printf("|st",pr>name)printf("|ct",pr>state)printf("|dt",pr>super)printf("|dt",pr>ntime)printf("|dt",pr>rtime)printf("n")}voidcheck()*建立进程查看函数*{PCB*prprintf("n****当前正在运行的进程是:s",p>name)*显示当前运行进程*disp(p)pr=readyprintf("n****当前就绪队列状态为:n")*显示就绪队列状态*while(pr!=){disp(pr)pr=pr>link}}voiddestroy()*建立进程撤消函数(进程运行结束,撤消进程)*{printf("n进程s已完成n",p>name)free(p)}voidrunning()*建立进程就绪函数(进程运行时间到,置就绪状态*{(p>rtime)if(p>rtime==p>ntime)destroy()*调用destroy函数*else{(p>super)p>state='w'sort()*调用sort函数*}}voidmain()*主函数*{intlen,h=charchinput()len=space()while((len!=)(ready!=)){ch=getchar()hprintf("nTheexecutenumber:dn",h)p=readyready=p>linkp>link=p>state='R'check()running()printf("n按任一键继续")ch=getchar()}printf("nn进程已经完成n")ch=getchar()}完成上述实验示例程序按照优先级算法补充出sort()子程序的内容。若修改优先数时增加下列原则:进程等待的时间超过某一时限时增加其优先数参考上述例程写出程序。完成FCFS或SPF算法。编写一个多道程序系统的作业调度模拟程序,可采用任一调度算法。对于多道程序系统要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。

用户评价(0)

关闭

新课改视野下建构高中语文教学实验成果报告(32KB)

抱歉,积分不足下载失败,请稍后再试!

提示

试读已结束,如需要继续阅读或者下载,敬请购买!

文档小程序码

使用微信“扫一扫”扫码寻找文档

1

打开微信

2

扫描小程序码

3

发布寻找信息

4

等待寻找结果

我知道了
评分:

/8

进程调度算法的模拟

VIP

在线
客服

免费
邮箱

爱问共享资料服务号

扫描关注领取更多福利