已阅读5页,还剩8页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
操作系统 操作系统 项目文档报告进程调度算法专 业: 班 级: 指导教师: 姓 名: 学 号: 一、核心算法思想1.先来先服务调度算法先来先服务调度算法是一种最简单的调度算法,该算法既可以用于作业调度,也可用于进程调度。当在作业调度中采用该算法时,每次调度都是从后备作业队列中选择一个或多个最先进入该队列的作业,将他们调入内存,为它们分配资源、创建进程,然后放入就绪队列。在进程调度中采用FCFS算法时,则每次调度是从就绪队列中选择一个最先进入该队列的进程,为之分配处理机,使之投入运行。该进程一直运行到完成或发生某事件而阻塞后才放弃处理机。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。2. 短作业(进程)优先调度算法短作业(进程)优先调度算法SJ(P)F,是指对短作业或短进程优先调度的算法。它们可以分别用于作业调度和进程调度。短作业优先(SJF)的调度算法是从后备队列中选择一个或若干个估计运行时间最短的作业,将它们调入内存运行。而短进程(SPF)调度算法则是从就绪队列中选出一个估计运行时间最短的进程,将处理机分配给它,使它立即执行并一直执行到完成,或发生某事件而被阻塞放弃处理机再重新调度。SJ(P)F调度算法能有效地降低作业(进程)的平均等待时间,提高系统吞吐量。该算法对长作业不利,完全未考虑作业的紧迫程度。3.高响应比优先调度算法在批处理系统中,短作业优先算法是一种比较好的算法,其主要不足之处是长作业的运行得不到保证。如果我们能为每个作业引人动态优先权,并使作业的优先级随着等待时间的增加而以速率a提高,则长作业在等待一定的时间后,必然有机会分配到处理机。该优先权的变化规律可描述为:优先权=(等待时间+要求服务时间)/要求服务时间即 优先权=响应时间/要求服务时间如果作业的等待时间相同,则要求服务的时间越短,其优先权越高,因而该算法有利于短作业。当要球服务的时间相同时,作业的优先权决定于其等待时间,等待时间越长,优先权越高,因而它实现的是先来先服务对于长作业,作业的优先级可以随着等待时间的增加而提高,当其等待时间足够长时,其优先级便可以升到很高,从而也可获得处理机。4. 时间片轮转算法在时间片轮转算法中,系统将所有的就绪进程按先来先服务的原则排成一个队列,每次调度时,把CPU分配给队首进程,并令其执行一个时间片。当执行的时间片用完时,由一个计数器发出时钟中断请求,调度程序便据此信号来停止该进程的执行,并将它送往就绪队列的末尾;然后,再把处理机分配给就绪队列中新的队首进程,同时也让它执行一个时间片。这样就可以保证就绪队列中的所有进程在一给定的时间内均能获得一时间片的处理机执行时间。换言之,系统能在给定的时间内响应所有用户的请求。二、核心算法流程图1.先来先服务算法流程图开始 创建进程PCB按到达时间排序调用action,执行进程输出结果结束2. 短进程优先算法 开始获取进程信息按进程越要时间排序调用action,执行进程输出结果结束3.时间片轮转算法开始 获得进程信息 调用时间片轮转算法在每个时间片执行程序大于0计算各进程剩余时间等于0进程结束4.髙响应比优先算法开始首先进行第一个进程计算剩余进程的响应比按优先级排序运行优先级最高的进程结束四、源代码下面给出的是用C实现程序的源代码:#include#include #include typedef struct pcb int name; int needtime; int arrivetime; int pri; int state; int cputime;plist;void action(plist * nowpro);void action(plist * nowpro) delay(1000); printf(now is process %d ,nowpro-name); nowpro-needtime-; if(nowpro-needtime=0) printf( the process %d is endn,nowpro-name); /* nowpro-state=1; */ printf(-n); else printf(process %d needtime is %dn,nowpro-name,nowpro-needtime); printf(-n); void creatpro(int n,plist * process ) int j; for(j=0;jn;j+) = 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(name of process%dt,); printf(needtime %dt,processj.needtime); printf(arrivetime %dt,processj.arrivetime); printf(pri %dn,processj.pri); printf(state %dt,processj.state); printf(cputime %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 * process); 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 SJFt 3 HRRNt 4 RRn); scanf(%d,&k); 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; 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; pro1k.state=1; show(n,pro2); for(i=0;i0) action(&pro2i); void rr(int n,plist * pro1) void show( int n,plist * process); int i,j,k; int m=0; 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); time=pro20.needtime; for(i=0;in;i+) if(time0) for(i=0;i0) action(&pro2i); time-; void hrrn(int n,plist * pro1) int cal(int a ,plist * pro2); int i,k,j,m; int curtime=0; plist temp; for(i=0;in;i+) k=0; while(pro1k.state=1) k+; temp=pro1k; m=cal(curtime,&temp); for(j=0;jpro1j.pri) temp=pro1j; m=pro1j.pri; k=j; while(pro1k.needtime0) action(&pro1k); curtime+; pro1k.state=1; int cal(int a ,plist * pro2) int pr; if(a-pro2-arrivetime)arrivetime+pro2-needtime)/pro2-needtime; return pr; 5、 运行结果1.先来先服务算法运行结果短进程
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- Unit 3 Lesson 13 How Old Are You(教学设计)-2023-2024学年冀教版(三起)英语四年级下册
- 阀门配件采购合同范本
- 美国加州工厂合同范本
- 牛棚围栏安装合同范本
- 续订劳动合同补充协议
- 社区小额贷款合同范本
- 美甲店合开合同协议书
- 物业车库买卖合同范本
- 美睫美甲店合伙协议书
- 2025年城市设计基础考试题及答案
- 【2024】粤教粤科版科学四年级上册每课教学反思(带目录)
- 安全服务项目质量保障体系及措施
- 天地一体化信息网络技术研究白皮书 2023
- key-hole经皮内镜颈椎间盘摘除术治疗神经根型颈椎病后路2
- 产品代理合同协议书2024年
- 科技计划项目申报指南技术评审表33篇
- 时代乐章第三课自然之美 课件 2024-2025学年人教版(2024)初中美术上册
- 18《我的白鸽》课件
- 人教版八年级数学上册全部课时小练习(含答案)
- DL∕T 1100.1-2018 电力系统的时间同步系统 第1部分:技术规范
- 秋季户外登山活动策划方案
评论
0/150
提交评论