内容发布更新时间 : 2024/11/17 15:58:16星期一 下面是文章的全部内容请认真阅读。
{
if(arrayTask[i].Status==0&&?arrayTask[i].ArriveTime<=g)? {
t=arrayTask[i].RequestTime;? a=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 new(int?s)?/*定义执行进程后相关数据的修改*/?{??int?i,g=0;?for(i=0;i<4;i++) ?{? if(arrayTask[i].Status==0)?continue;? else?{ ?g=1; ?break; ?} ?}? if(g==0)?/*当处理的是第一个未执行的进程时执行*/? {? 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++) ?{? 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 int?i,b,k,a,c=0;?int?d[4];? clrscr();? printf(\printf(\ ?printf(\if(c)?break;? printf(\scanf(\switch(a) ?{? case?Q:?c=1; ?break;? case?F:printf(\; ?GetTask();? printf(\printf(\nover?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?S:?printf(\\GetTask();? printf(\printf(\for(b=0;b<4;b++)?{?k=sjf();?d[b]=k;?new(k); ?}? for(b=0;b<4;b++)?Printresult(d[b]);? continue;? default:printf(\} ?} ?}? 四、 实验总结和体会 通过做本实验,让我对进程或作业先来先服务、高优先权、按时间片轮转 调度算法以及进程调度的概念和算法,有了更深入的认识!理解进程的状态及变化,动态显示每个进程的当前状态及进程的调度情况。进程调度是处理机管理的核心内容。优先级高优先是根据作业的优先级,总是选择优 先级最高者进入队列。轮转调度算法是调度程序每次把CPU分配给就绪队列首进程/线程使用规定的时间间隔,就绪队列中都路保留巡行一个时间片。