ImageVerifierCode 换一换
格式:DOCX , 页数:14 ,大小:127.48KB ,
资源ID:8934665      下载积分:10 金币
验证码下载
登录下载
邮箱/手机:
图形码:
验证码: 获取验证码
温馨提示:
支付成功后,系统会自动生成账号(用户名为邮箱或者手机号,密码是验证码),方便下次登录下载和查询订单;
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

开通VIP
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.zixin.com.cn/docdown/8934665.html】到电脑端继续下载(重复下载【60天内】不扣币)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

开通VIP折扣优惠下载文档

            查看会员权益                  [ 下载后找不到文档?]

填表反馈(24小时):  下载求助     关注领币    退款申请

开具发票请登录PC端进行申请。


权利声明

1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,个别因单元格分列造成显示页码不一将协商解决,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前可先查看【教您几个在下载文档中可以更好的避免被坑】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时联系平台进行协调解决,联系【微信客服】、【QQ客服】,若有其他问题请点击或扫码反馈【服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【版权申诉】”,意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4009-655-100;投诉/维权电话:18658249818。

注意事项

本文(操作系统编程进程或作业先来先服务、高优先权、按时间片轮转调度算法.docx)为本站上传会员【pc****0】主动上传,咨信网仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知咨信网(发送邮件至1219186828@qq.com、拔打电话4009-655-100或【 微信客服】、【 QQ客服】),核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载【60天内】不扣币。 服务填表

操作系统编程进程或作业先来先服务、高优先权、按时间片轮转调度算法.docx

1、湖南农业大学科学技术师范学院 学 生 实 验 报 告 姓名: 汤黎波 年级专业班级 06级计算机教育班 日期 2008 年 12 月 8 日 成绩 课程名称 计算机操作系统 实验名称 编程进程或作业先来先服务、高优先权、按时间片轮转调度算法(4学时) 实验类型 验证 设计 综合 创新 【实验目的、要求】 实验目的:(1)通过编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调度算法,使学生进一步掌握进程调度的概念和算法,加深对处理机分配的理解。 (2)了解Windows2000/XP中进程(线程)的调度机制。 (3)学习使用Win

2、dows2000/XP中进程(线程)调度算法,掌握相应的与调度有关的Win32 API函数。 实验要求:(1)经调试后程序能够正常运行。 (2)采用多进程或多线程方式运行,体现了进程或作业先来先服务、高优先权、按时间片轮转调度的关系。 (3)程序界面美观。 【实验内容】 在Windows XP、Windows 2000等操作系统下,使用C语言,利用相应的WIN32 API函数,编写程序实现进程或作业先来先服务、高优先权、按时间片轮转调度算法。 【实验环境】(含主要设计设备、器材、软件等) Pc电脑一台 【实验步骤、过程】(含原理图、流程图、关键代码,或实验过程中的记录、数

3、据等) 定义:   1)先来先服务算法:如果早就绪的进程排在就绪队列的前面,迟就绪的进程排在就绪队列的后面,那么先来先服务(FCFS:first come first service)总是把当前处于就绪队列之首的那个进程调度到运行状态。 2)轮转法就是按一定时间片(记为q)轮番运行各个进程。如果q是一个定值,则轮转法是一种对各进程机会均等的调度方法。 3)优先级调度的基本思想是,把当前处于就绪队列中优先级最高的进程投入运行,而不管各进程的下一个CPU周期的长短和其他因素。 实验步骤: (1)需求分析:了解基本原理,确定程序的基本功能,查找相关资料,画出基本的数据流图; (2)概要设

4、计:确定程序的总体结构、模块关系和总体流程; (3)详细设计:确定模块内部的流程和实现算法; (4)上机编码和调试; (5)运行测试; (6)编写实验报告。 流程图: (先来先服务流程图) (高优先权流程图) (按时间片轮转调度) 程序说明及实现:     1)先来先服务调度算法: 高响应比优先实现进程调度.(用C语言实现

5、), 2) 优先级调度程序:     该程序由主程序、构造队列子程序、打印子程序、运行子程序构成。           3) 时间片轮转法程序:       在此程序中由于程序比较小,未进行分模块设计。直接采用单一模块。     1先来先服务 #i nclude float t,d; /*定义两个全局变量*/ struct /*定义一个结构体数组,包括进程的信息*/ { int id; float ArriveTime; float RequestTime; float StartTime; float EndTime; float R

6、unTime; float DQRunTime; int Status; }arrayTask[4]; /*定义初始化的结构体数组*/ GetTask()/*给结构体数组赋值,输入到达,服务时间*/ { int i; float a; for(i=0;i<4;i++) {arrayTask[i].id=i+1; printf("input the number"); printf("input the the ArriveTime of arrayTask[%d]:",i); /*用户输入进程的时间,初始为零 */ scanf("%f",&a); arrayTask[i

7、].ArriveTime=a; printf("input the RequestTime of arrayTask[%d]:",i); scanf("%f",&a); arrayTask[i].RequestTime=a; arrayTask[i].StartTime=0; arrayTask[i].EndTime=0; arrayTask[i].RunTime=0; arrayTask[i].Status=0; /*开始默认的标志位零*/ } } int fcfs() /*定义FCFS中寻找未执行的进程的最先到达时间*/ { int i,j,w=0; /*在结构体

8、数组中找到一个未执行的进程*/ for(i=0;i<4;i++) { if(arrayTask[i].Status==0) { t=arrayTask[i].ArriveTime; w=1; } if(w==1) break; } for(i=0;i<4;i++) /*查找数组中到达时间最小未执行的进程*/ { if(arrayTask[i].ArriveTime

9、<4;i++) { if (arrayTask[i].ArriveTime==t) return i; } } int sjf() /*定义FCFS中寻找未执行的进程的最先到达时间*/ { int i,x=0,a=0,b=0; /*判断是不是第一个执行的进程*/ float g; for(i=0;i<4;i++) { if(arrayTask[i].Status==1) {g=arrayTask[i].EndTime; x=1; } } if(x==0) /*第一个执行的进程按FCFS*/ { t=arrayTask[0].ArriveTime

10、 for(i=0;i<4;i++) { if(arrayTask[i].ArriveTimeg) g=arrayTask[i].EndTime; } for(i=0;i<4;i++) {if(arrayTask[i].Status==0&& arrayTask[i].ArriveTime<=g) {t=arrayTask[i].RequestTime; a

11、i; b=1;} /*判断有没有进程在前个进程完成前到达*/ } if(b!=0) /*有进程到达则按SJF*/ {for(i=0;i<4;i++) { if(arrayTask[i].Status==0&&arrayTask[i].ArriveTime<=g&&arrayTask[i].RequestTime

12、ArriveTime; } for(i=0;i<4;i++) { if(arrayTask[i].Status==0&&arrayTask[i].ArriveTime

13、处理的是第一个未执行的进程时执行*/ { arrayTask[s].StartTime=arrayTask[s].ArriveTime; arrayTask[s].EndTime=arrayTask[s].RequestTime+arrayTask[s].ArriveTime; arrayTask[s].RunTime=arrayTask[s].RequestTime; arrayTask[s].Status=1; g=2; } if(g==1) /*当处理的不是第一个未执行的进程时执行*/ { arrayTask[s].Status=1; for(i=0;i<4;i++

14、) { if(arrayTask[i].Status==1) d=arrayTask[i].EndTime; } for(i=0;i<4;i++) /*查找最后执行的进程的完成时间*/ { if(arrayTask[i].EndTime>d&&arrayTask[i].Status==1) d=arrayTask[i].EndTime; } if(arrayTask[s].ArriveTime

15、ime=arrayTask[s].ArriveTime; arrayTask[s].EndTime=arrayTask[s].StartTime+arrayTask[s].RequestTime; arrayTask[s].RunTime=arrayTask[s].EndTime-arrayTask[s].ArriveTime; } arrayTask[s].DQRunTime=arrayTask[s].RunTime/arrayTask[s].RequestTime; } Printresult(int j) /*定义打印函数*/ { printf("%d\t",array

16、Task[j].id); printf("%5.2f\t",arrayTask[j].ArriveTime); printf("%5.2f\t",arrayTask[j].RequestTime); printf("%5.2f\t",arrayTask[j].StartTime); printf("%5.2f\t",arrayTask[j].EndTime); printf("%5.2f\t",arrayTask[j].RunTime); printf("%5.2f\n",arrayTask[j].DQRunTime); } main() { int i,b,k,a,c=0;

17、 int d[4]; clrscr(); printf("\t F. FCFS \n"); printf("\t S. SFJ  \n"); printf("\t Q. EXIT \n"); for(i=0;;i++) {if(c) break; printf("please input the number a:\n"); scanf("%d",&a); switch(a) { case Q: c=1; break; case F:printf("please input the different-ArriveTime of arrayTasks\n");

18、GetTask(); printf("*****************************the result of fcfs\n"); printf("Number\tArrive\tServer\tStart\tFinish\tTurnove\tTake power turnover time\n"); for(b=0;b<4;b++) /*调用两个函数改变结构体数的值*/ { k=fcfs(); d[b]=k; new(k); } for(b=0;b<4;b++) Printresult(d[b]);/*调用打印函数打出结果*/ continue; case

19、 S: printf("please input the different-RequestTime of arrayTasks\n"); GetTask(); printf("******************************the result of sjf\n"); printf("Number\tArrive\tRequest\tStart\tEnd\tRun\tDQRun time\n"); for(b=0;b<4;b++) { k=sjf(); d[b]=k; new(k); } for(b=0;b<4;b++) Printresult(d[b]);

20、 continue; default:printf("the number Error.please input another number!\n"); } } } 2 时间片轮转法:     #include"string.h"     #include   "stdio.h"     #include   "conio.h"     #include   "graphics.h"     #define   NULL   0     typedef   struct   quen       /*定义结构*/     {   char   pnam

21、e[8];         int     time1;         int     time2;         char   state;         struct   quen   *next;     }   QUEN;     main()/*主程序*/               {                   QUEN   *q,*p,*head,*m;                   char   str[8],f;                   int   t,d,n;                  

22、clrscr();     textmode(C80);     textbackground(0);     textcolor(15);     printf("Enter the maxnumber of nodes(n):\n");/*输入进程数*/     scanf("%d",&n);     d=n;     if(d>0)     {   printf("enter thepname:");       scanf("%s",str);       printf("enter   the   need   time:");      

23、 scanf("%d",&t);       head=p=(QUEN   *)malloc(sizeof(QUEN));       strcpy(p->pname,str);       p->time1=t;       p->time2=0;       p->state='R';       p->next=NULL;       head=p;       getchar();       --d;}     while(d>0)   {/*构建队列表*/       printf("enter   the   pname:");  

24、     scanf("%s",str);       printf("enter   need   time:");       scanf("%d",&t);       q=(QUEN   *)malloc(sizeof(QUEN));       strcpy(q->pname,str);       q->time1=t;       q->time2=0;       q->state='R';       q->next=NULL;       p->next=q;       p=q;     --d;     p->next=h

25、ead;     q=head;}     printf("process name need time runned static\n");     do{   printf(" %s%d %d %c\n",q->pname,q->time1,q->time2,q->state);          q=q->next;         }while(q!=head);         printf("\n");     do{        if(head->time2time1)     {head->time2++;      

26、 if(head->time2==head->time1)         {   head->state='E';               q=head;               textbackground(0);               printf("The running process is %s\n",q->pname);               printf("process name left time runned static\n");           do{   textcolor(15);     /*输入队列表*/

27、          printf(" %s %d %d %c\n",q->pname,q->time1,q->time2,q->state);     q=q->next;}     while(q!=head);           printf("\n");           head=head->next;           q=head;           p->next=head;            }       else{       printf("The running process is %s\n",q->pname)

28、         printf("process name left time runned static\n");         do {               printf(“%s%d%d %c\n",q->pname,q->time1,q->time2,q->state);                 q=q->next;}while(q!=head);                 printf("\n");                 head=head->next;                 q=head;        

29、        p=p->next;}           printf("Is it needing new process?(y or n)\n");/*是否加入新的进程*/           getchar();           scanf("%c",&f);       if(f=='Y'||f=='y'){           getchar();           printf("Enter the new pname:");           scanf("%s",str);           printf("Enter the

30、new neededtime:");           scanf("%d",&t);       m=(QUEN   *)malloc(sizeof(QUEN));       strcpy(m->pname,str);       m->time1=t;       m->time2=0;       m->state='R';       m->next=NULL;     if(q->next->state=='E')           {p=m;             head=m;             p->next=head;

31、     q=head;}     else{p->next=m;             m->next=head;             p=m;}}     }}while(q->next->state!='E');           printf("The processes are finished\n");     }    3优先级调度方法:     #include         #include   "conio.h"     typedef   struct   pcb/*定义结构*/        

32、     {char name[5];               struct pcb *next;               int   needtime;               int   priority;               char state[5];             }NODE;         NODE  *create_process(int   n)/*创建队列*/           {NODE     *head,*s,*t;             int   time,i=0,j;          

33、  char     pname[5];             head=(NODE   *)malloc(sizeof(NODE));             printf("please   input   process   name:");             scanf("%s",pname);             strcpy(head->name,pname);             printf("please   input   need   time:");             scanf("%d",&time);        

34、     head->needtime=time;             printf("please   input   priority:");             scanf("%d",&j);             head->priority=j;             strcpy(head->state,"ready");             head->next=NULL;             t=head;             for(i=1;i

35、lloc(sizeof(NODE));     printf("please input process name:");     getchar();     gets(pname);     strcpy(s->name,pname);     printf("please input need time:");     canf("%d",&time);     s->needtime=time;     printf("please input priority:");     scanf("%d",&j);     s->priority=j;

36、     strcpy(s->state,"ready");     s->next=NULL;      t->next=s;     t=s;         }      return  head;         }     pri_process(NODE *p)/*输出进程队列*/         {int   i;           NODE  *q;           q=p->next;           printf("\n name\tneedtime\tpriority \t state\n");        

37、   while(q!=NULL)               {printf("%5s\t %2d \t %2d \t %5s \n",         q->name,q->needtime,q->priority,q->state);                 q=q->next;               }         }     NODE   *order(NODE   head_sort)/*对进程的优先级进行排序*/       {NODE   *p,*s,*q,*head,*r,*t;         int  

38、  m,pr;         char     name[5];         head=head_sort;         p=head->next;         r=p;         t=p;         q=p->next;         while(r!=NULL)           {   while(q!=NULL)               {if(p->prioritypriority)     {m=p->priority;       p->priority=q->priority;      

39、 q->priority=m;       strcmp(name,p->name);       strcmp(p->name,q->name);       strcmp(q->name,name);       pr=p->needtime;       p->needtime=q->needtime;       q->needtime=pr;     }                 p=q;                 q=q->next;               }               r=r->next;    

40、           p=t;               q=p->next;           }         return(head_sort);     }     main()/*主程序*/     {     NODE   *p=NULL,*head=NULL,*m=NULL,*z=NULL,*n=NULL;           int   j,time,x=0;           char   c,pname[5];           clrscr();           printf("please input process

41、 number!");           scanf("%d",&x);           p=create_process(x);           head->next=p;           pri_process(head);           getchar();           while(x>0)               { order(head);     m=head->next;     strcpy(m->state,"run");     if(m->priority>=2)    

42、       m->priority--;           m->needtime--;     if(head->next!=NULL)           pri_process(head);     if(m->needtime==0)       {   head->next=m->next;             printf("%s   has   finished\n",m->name);             free(m);           x--;       }             getchar();     }

43、            textmode(C80);             textbackground(0);             textcolor(4);             printf("over!");             getchar();     }     Top 【实验结果或总结】(对实验结果进行相应分析,或总结实验的心得体会,并提出实验的改进意见) 通过做本实验,让我对进程或作业先来先服务、高优先权、按时间片轮转调度算法以及进程调度的概念和算法,有了更深入的认识!初步理解了操作系统对于作业处理的基本思想!对于时间片轮转法的处理要比优先级调度算法的理解要深。在实验的过程中遇到了很多困难,感谢同学们的帮助。 指导教师签名: 20 年 月 日 【备注】

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服