进程调度算法的模拟

上传人:飞*** 文档编号:41653053 上传时间:2018-05-30 格式:DOC 页数:5 大小:135.50KB
返回 下载 相关 举报
进程调度算法的模拟_第1页
第1页 / 共5页
进程调度算法的模拟_第2页
第2页 / 共5页
进程调度算法的模拟_第3页
第3页 / 共5页
进程调度算法的模拟_第4页
第4页 / 共5页
进程调度算法的模拟_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
资源描述

《进程调度算法的模拟》由会员分享,可在线阅读,更多相关《进程调度算法的模拟(5页珍藏版)》请在金锄头文库上搜索。

1、实验一实验一 进程控制与处理机调度综合实验进程控制与处理机调度综合实验一、实验目的一、实验目的通过模拟进程控制方法及单处理机系统的进程调度,了解进程的结构,进程的创建与撤消,进程的组织及进程的状态及其转换,掌握进程调度策略。二、实验学时二、实验学时4 学时三、实验内容三、实验内容本实验为单机模拟进程调度算法,在程序设计时不需真正地建立线程或者进程。实验模拟创建若干进程(人为输入或随机数产生) ,选择一种或几种单处理机的进程调度算法,如 FCFS(先来先服务) ,SPF(短进程优先) ,RR(时间片轮转法) ,优先级算法等,模拟进行进程调度。每进行一次调度,都打印一次运行进程、就绪队列、以及各个

2、进程的 PCB,并能在进程完成后及时撤消该进程。四、算法描述四、算法描述1 进程及进程的运行状态进程是现代计算机中的基本要素,是系统分配资源和调度的基本单位。进程与程序不同,进程是系统中动态的实体,有它的创建、运行和撤销的过程。PCB 块是系统感知进程存在的唯一实体。进程的创建必须首先创建进程的 PCB 块,而进程的运行也伴随着 PCB 块的变化,进城撤销也要同时撤销它的 PCB 块。所以本实验的任务就是通过模拟调度进程的PCB 块来调度进程。进程的 PCB 块包含以下四方面的内容:a) 进程标示符b) 处理及状态信息c) 进程调度信息d) 进程控制信息进程在运行中存在三种基本状态,分别是运行

3、状态、就绪状态和阻塞状态。2 进程调度一个运行进程的时间片用完或发生阻塞时,系统就会选择一个就绪进程调度执行。进程的调度算法有很多如 FCFS、SPF、优先级调度和时间片轮转方法。进程调度算法模拟试验就是通过调度进程的 PCB 块来模拟调度进程。在系统中 PCB 块就表现为一个结构体,PCB块之间的连接方式存在两种,一种是连接方式,一种是索引方式。本试验中可选择任意一种连接方式。3 例程设计一个有 N 个进程共行的进程调度程序。进程调度算法:采用最高优先数优先的调度算法(即把处理机分配给优先数最高的进程) 。每个进程有一个进程控制块(PCB)表示。进程控制块可以包含如下信息:进程名、优先数、到

4、达时间、需要运行时间、已用 CPU 时间、进程状态等等。进程的优先数及需要的运行时间可以事先人为地指定(也可以由随机数产生) 。进程的到达时间为进程输入的时间。进程的运行时间以时间片为单位进行计算。 每个进程的状态可以是就绪 W(Wait) 、运行R(Run) 、或完成 F(Finish)三种状态之一。 就绪进程获得 CPU 后都只能运行一个时间片。用已占用 CPU 时间加 1 来表示。 如果运行一个时间片后,进程的已占用 CPU 时间已达到所需要的运行时间,则撤消该进程,如果运行一个时间片后进程的已占用 CPU 时间还未达所需要的运行时间,也就是进程还需要继续运行,此时应将进程的优先数减 1

5、(即降低一级) ,然后把它插入就绪队列等待 CPU。每进行一次调度程序都打印一次运行进程、就绪队列、以及各个进程的 PCB,以便进行检查。重复以上过程,直到所要进程都完成为止。调度算法的流程图如下:从从从从从从从PCB从从从从从从从从从从从从从从从从从从从从从从从从从从y从从从从从从从从从从从从从从从从从CPU从从从从+1从从从从从CPU从从 从从从从从CPU从从从从从从从 从从从从y从从从从从从从从从从1 从从从从从从从从从从从图 1-1 流程图五、参考程序五、参考程序#include “stdio.h“ #include #include #define getpch(type) (typ

6、e*)malloc(sizeof(type) #define NULL 0 struct pcb /* 定义进程控制块 PCB */ char name10; char state; int super; int ntime; int rtime; struct pcb* link; *ready=NULL,*p; typedef struct pcb PCB; void sort() /* 建立对进程进行优先级排列函数*/ void input() /* 建立进程控制块函数*/ int i,num; printf(“n 请输入进程数量?“); scanf(“%d“, for(i=0;inam

7、e); printf(“n 输入进程优先数:“); scanf(“%d“, printf(“n 输入进程运行时间:“); scanf(“%d“, printf(“n“); p-rtime=0;p-state=w; p-link=NULL; sort(); /* 调用 sort 函数*/ int space() int l=0; PCB* pr=ready; while(pr!=NULL) l+; pr=pr-link; return(l); void disp(PCB * pr) /*建立进程显示函数,用于显示当前进程*/ printf(“n qname t state t super t n

8、dtime t runtime n“); printf(“|%st“,pr-name); printf(“|%ct“,pr-state); printf(“|%dt“,pr-super); printf(“|%dt“,pr-ntime); printf(“|%dt“,pr-rtime); printf(“n“); void check() /* 建立进程查看函数 */ PCB* pr; printf(“n * 当前正在运行的进程是:%s“,p-name); /*显示当前运行进程*/ disp(p); pr=ready; printf(“n *当前就绪队列状态为:n“); /*显示就绪队列状态*

9、/ while(pr!=NULL) disp(pr); pr=pr-link; void destroy() /*建立进程撤消函数(进程运行结束,撤消进程)*/ printf(“n 进程 %s 已完成.n“,p-name); free(p); void running() /* 建立进程就绪函数(进程运行时间到,置就绪状态*/ (p-rtime)+; if(p-rtime=p-ntime) destroy(); /* 调用 destroy 函数*/ else (p-super)-; p-state=w; sort(); /*调用 sort 函数*/ void main() /*主函数*/ in

10、t len,h=0; char ch; input(); len=space(); while(len!=0) h+; printf(“n The execute number:%d n“,h); p=ready; ready=p-link; p-link=NULL; p-state=R; check(); running(); printf(“n 按任一键继续.“); ch=getchar(); printf(“nn 进程已经完成.n“); ch=getchar(); 完成上述实验示例程序,按照优先级算法补充出 sort()子程序的内容。若修改优先数时增加下列原则:进程等待的时间超过某一时限时增加其优先数,参考上述例程,写出程序。六、选做题六、选做题完成 FCFS 或 SPF 算法。七、思考题七、思考题编写一个多道程序系统的作业调度模拟程序,可采用任一调度算法。对于多道程序系统,要假定系统中具有的各种资源及数量、调度作业时必须考虑到每个作业的资源要求。

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 行业资料 > 其它行业文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号