久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

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

QQ登錄

只需一步,快速開始

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

C語言時(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 /> 通過這次實(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)度過程。假設(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)度過程中,假設(shè)處于執(zhí)行狀態(tài)的進(jìn)程不會(huì)阻塞),且每過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 開始運(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)   // 還有沒執(zhí)行的進(jìn)程,且沒進(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ù) 返回頂部 返回列表
主站蜘蛛池模板: 国产美女h视频 | 黑人中文字幕一区二区三区 | 亚洲精品1区 | 久久综合久久久 | 卡通动漫第一页 | 黄网在线观看 | 婷婷国产一区 | 一区二区三区四区av | 国产婷婷精品av在线 | 午夜网 | 日韩www| 亚洲电影第三页 | 欧美日韩精品一区二区三区视频 | 香蕉视频1024 | 日韩一级 | 亚洲综合热 | 日韩欧美一区二区三区四区 | 一区二区三区免费 | 亚洲欧洲在线观看视频 | 亚洲一区二区在线播放 | 久久久久亚洲精品 | 久久免费大片 | 天堂在线中文字幕 | 欧美在线亚洲 | a在线观看 | 欧洲精品视频一区 | 亚洲精品在线播放 | av一区二区三区四区 | 国精品一区二区 | 亚洲最新在线视频 | 久青草影院 | 国产探花在线精品一区二区 | 91久久综合 | 精品美女| 欧美成人精品一区二区男人看 | 国产在线a | 免费一区二区三区 | 欧美日韩久久久久 | 亚洲视频自拍 | 欧美福利 | 精品久久久久久亚洲精品 |