欧美极品高清xxxxhd,国产日产欧美最新,无码AV国产东京热AV无码,国产精品人与动性XXX,国产传媒亚洲综合一区二区,四库影院永久国产精品,毛片免费免费高清视频,福利所导航夜趣136

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開(kāi)始

搜索
查看: 7750|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

C語(yǔ)言時(shí)間片輪轉(zhuǎn)調(diào)度算法 進(jìn)程調(diào)度實(shí)驗(yàn)程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:438442 發(fā)表于 2018-12-3 15:17 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
實(shí)驗(yàn)一 進(jìn)程調(diào)度
一、實(shí)驗(yàn)?zāi)康?br /> 通過(guò)這次實(shí)驗(yàn),加深對(duì)進(jìn)程概念的理解,進(jìn)一步掌握進(jìn)程狀態(tài)的轉(zhuǎn)變、進(jìn)程調(diào)度的策略及對(duì)系統(tǒng)性能的評(píng)價(jià)方法。
二、實(shí)驗(yàn)內(nèi)容
  設(shè)計(jì)程序模擬進(jìn)程的輪轉(zhuǎn)法調(diào)度過(guò)程。假設(shè)初始狀態(tài)為:有n個(gè)進(jìn)程處于就緒狀態(tài),有m個(gè)進(jìn)程處于阻塞狀態(tài)。采用輪轉(zhuǎn)法進(jìn)程調(diào)度算法進(jìn)行調(diào)度(調(diào)度過(guò)程中,假設(shè)處于執(zhí)行狀態(tài)的進(jìn)程不會(huì)阻塞),且每過(guò)t個(gè)時(shí)間片系統(tǒng)釋放資源,喚醒處于阻塞隊(duì)列隊(duì)首的進(jìn)程。
三、源程序
#include<stdio.h>
#define N50
structPCB
{
         int pn;   //process name進(jìn)程名字
         int at;   //arrival time到達(dá)時(shí)間
         int st;   //service time服務(wù)時(shí)間
         int ct;   //completion time完成時(shí)刻
         int sc; //sign completion標(biāo)志是否完成
         int st1;  //剩余服務(wù)時(shí)間  
}process[N];

intsjp(int n)
{
         int i,j,T;
         printf("\n請(qǐng)輸入時(shí)間片:\n");
         scanf("%d",&T);
         for(i=1;i<=n;i++)      //收集進(jìn)程信息
         {
                   process[ i].sc=0;
                   printf("\n%d:\n請(qǐng)依次輸入進(jìn)程的信息\n請(qǐng)輸入pn:",i);
                   scanf("%d",&process[ i].pn);
                   printf("請(qǐng)輸入at:");
                   scanf("%d",&process[ i].at);
                   printf("請(qǐng)輸入st:");
                   scanf("%d",&process[ i].st);
                   process[ i].st1=process[ i].st;
         }
         for(i=1;i<=n;i++)
         for(j=i+1;j<=n;j++)   //按照各進(jìn)程到達(dá)時(shí)間升序,對(duì)進(jìn)程排序 注意:穩(wěn)定的排序
         {
                   if(process[j].at<process[ i].at)
                   {
                            process[0]=process[j];
                            process[j]=process[ i];
                            process[ i]=process[0];      
                   }
         }
         //for(i=1;i<=n;i++)    //檢查排序是否正確
         //printf("%d\t",process[ i].pn);

         int time=process[1].at;      //當(dāng)前時(shí)間的初值
         int flag=1;
         int sum=0;                                              //記錄完成的進(jìn)程數(shù)
         printf("\n第幾次調(diào)度進(jìn)程 運(yùn)行的進(jìn)程pn 開(kāi)始運(yùn)行時(shí)間 運(yùn)行時(shí)間 剩余服務(wù)時(shí)間 結(jié)束時(shí)間\n");
         int z=1;   //記錄第幾次調(diào)度進(jìn)程

        while(sum<n)
        {
         flag=0;           //標(biāo)志就緒隊(duì)列中是否還有進(jìn)程
         for(i=1;i<=n;i++)    //時(shí)間片輪轉(zhuǎn)法執(zhí)行各進(jìn)程
         {
                   if(process[ i].sc==1)continue;  //已完成的進(jìn)程
                   else
                    {
                           if(process[ i].st1<=T&&time>=process[ i].at)//未完成的進(jìn)程但是還需服務(wù)的時(shí)間少于等于一個(gè)時(shí)間片
                           {
                           flag=1;
                           time=time+process[ i].st1;
                           process[ i].sc=1;
                           process[ i].ct=time;
                           printf("%8d%12d%15d%11d%11d%11d\n",z++,process[ i].pn,time-process[ i].st1,process[ i].st1,0,time);
                           process[ i].st1=0;
                           }

                           elseif(process[ i].st1>T&&time>=process[ i].at)//未完成的進(jìn)程但其還需服務(wù)時(shí)間至少大于一個(gè)時(shí)間片
                           {
                                    flag=1;
                                    time=time+T;
                                     process[ i].st1-=T;
                                     printf("%8d%12d%15d%11d%11d%11d\n",z++,process[ i].pn,time-T,T,process[ i].st1,time);
                            }
                            if(process[ i].sc==1)sum++;     //一個(gè)進(jìn)程執(zhí)行完就+1
                   }
         }
         if(flag==0&&sum<n)   // 還有沒(méi)執(zhí)行的進(jìn)程,且沒(méi)進(jìn)入就就緒隊(duì)列
         {
         for(i=1;i<=n;i++)
         if(process[ i].sc==0){time=process[ i].at;break;}
         }
    }
                   return 0;
}
intmain()
{
         int n;
         printf("\t\t時(shí)間片輪轉(zhuǎn)調(diào)度算法\n");
         printf("請(qǐng)輸入總進(jìn)程數(shù):\n");
         scanf("%d",&n);
         sjp(n);
         return 0;
}
三、運(yùn)行結(jié)果


四、實(shí)驗(yàn)心得體會(huì)
這次的實(shí)驗(yàn)有了很大的收獲,加深對(duì)進(jìn)程概念的理解,進(jìn)一步掌握進(jìn)程狀態(tài)的轉(zhuǎn)變、進(jìn)程調(diào)度的策略及對(duì)系統(tǒng)性能的評(píng)價(jià)方法。


分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏3 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表