操作系统-模拟进程调度算法-最新概要

上传人:今*** 文档编号:108091893 上传时间:2019-10-22 格式:DOC 页数:13 大小:200KB
返回 下载 相关 举报
操作系统-模拟进程调度算法-最新概要_第1页
第1页 / 共13页
操作系统-模拟进程调度算法-最新概要_第2页
第2页 / 共13页
操作系统-模拟进程调度算法-最新概要_第3页
第3页 / 共13页
操作系统-模拟进程调度算法-最新概要_第4页
第4页 / 共13页
操作系统-模拟进程调度算法-最新概要_第5页
第5页 / 共13页
点击查看更多>>
资源描述

《操作系统-模拟进程调度算法-最新概要》由会员分享,可在线阅读,更多相关《操作系统-模拟进程调度算法-最新概要(13页珍藏版)》请在金锄头文库上搜索。

1、操作系统 操作系统 项目文档报告进程调度算法专 业: 班 级: 指导教师: 姓 名: 学 号: 一、核心算法思想1.先来先服务调度算法先来先服务调度算法是一种最简单的调度算法,该算法既可以用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将他们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。FCFS算法比较有利于长作业(进程),而不利于短作业(进程

2、)。2. 短作业(进程)优先调度算法短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。SJ(P)F调度算法能有效地降低作业(进程)的平均等待时间,提高系统吞吐量。该算法对长作业不利,完全未考虑作业的紧迫程度。3.高响应比优先调度算法在批处理系统中,短作业优先算法是一种比

3、较好的算法,其主要不足之处是长作业的运行得不到保证。如果我们能为每个作业引人动态优先权,并使作业的优先级随着等待时间的增加而以速率a提高,则长作业在等待一定的时间后,必然有机会分配到处理机。该优先权的变化规律可描述为:优先权=(等待时间+要求服务时间)/要求服务时间即 优先权=响应时间/要求服务时间如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,因而该算法有利于短作业。当要球服务的时间相同时,作业的优先权决定于其等待时间,等待时间越长,优先权越高,因而它实现的是先来先服务对于长作业,作业的优先级可以随着等待时间的增加而提高,当其等待时间足够长时,其优先级便可以升到很高,从而也可获得

4、处理机。4. 时间片轮转算法在时间片轮转算法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,由一个计数器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内响应所有用户的请求。二、核心算法流程图1.先来先服务算法流程图开始 创建进程PCB按到达时间排序调用action,执行进程输出结果结束2. 短

5、进程优先算法 开始获取进程信息按进程越要时间排序调用action,执行进程输出结果结束3.时间片轮转算法开始 获得进程信息 调用时间片轮转算法在每个时间片执行程序大于0计算各进程剩余时间等于0进程结束4.髙响应比优先算法开始首先进行第一个进程计算剩余进程的响应比按优先级排序运行优先级最高的进程结束4、 源代码/C语言程序/头文件#include#include #include typedef struct pcb int name; int needtime; int arrivetime; int pri; int state; int cputime;plist;void action(

6、plist * nowpro);void action(plist * nowpro) /delay(1000); printf(now is 进程 %d ,nowpro-name); nowpro-needtime-; if(nowpro-needtime=0) printf( the 进程 %d is endn,nowpro-name); /* nowpro-state=1; */ printf(-n); else printf(进程 %d needtime is %dn,nowpro-name,nowpro-needtime); printf(-n); void creatpro(int

7、 n,plist * process ) int j; for(j=0;jn;j+) processj.name= j; processj.needtime=rand()%10+1; processj.arrivetime=rand()%10; processj.pri=rand()%4; processj.state=0; processj.cputime=0; /显示函数void show( int n,plist * process) int j; for (j=0 ;jn;j+) printf(进程名%dt,processj.name); printf(需要时间%dt,processj

8、.needtime); printf(到达时间 %dt,processj.arrivetime); printf(进程优先数%dn,processj.pri); printf(进程状态%dt,processj.state); printf(占用cpu时间%dn,processj.cputime); /主函数void main() void creatpro(int n,plist * process ); void show( int n,plist * process); void fcfs(int n,plist * process); void sjf(int n,plist * pro

9、cess); void rr(int n,plist * pro1); void hrrn(int n,plist * pro1); int n; /*the number of process*/ int k; plist process10; printf(please input the number of process from 0 to 10n); scanf(%d,&n); creatpro(n,process); show(n,process); printf(please choose the what you want to usen); printf(1 FCFSt 2

10、SJFt 3 HRRNt 4 RRn);scanf(%d,&k);/通过switch选择算法 switch(k) case 1: fcfs(n,process); break; case 2: sjf(n,process); break; case 3: hrrn(n,process); break; case 4: rr(n,process); break; default : break; /getch();/先来先服务算法void fcfs(int n,plist * pro1) void show( int n,plist * process); int i,j,k; int m=0;

11、 int time; plist temp; plist pro210; for(i=0;in;i+) k=0; while(pro1k.state=1) k+; temp=pro1k; for(j=k+1;jpro1j.arrivetime&pro1j.state!=1) temp=pro1j; k=j; pro2m+=temp; pro1k.state=1; show(n,pro2); for(i=0;i0) action(&pro2i); /短进程优先算法void sjf(int n,plist * pro1) void show( int n,plist * process); int i,j,k; int m=0; plist temp; plist pro210; for(i=0;in;i+) k=0; while(pro1k.state=1) k+; temp=pro1k; for(j=k+1;jpro1j.needtime&pro1j.state!=1) temp=pro1j; k=j; pro2m+=temp; p

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

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