• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            /*********************************/
            程序名稱:進(jìn)程調(diào)度算法:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法的實(shí)現(xiàn)
            copyright@ pengkuny
            主頁:http://www.shnenglu.com/pengkuny
            完成日期:2006.12.01
            參考資料:湯子瀛<<計(jì)算機(jī)操作系統(tǒng)>>
            /********************************/
            //?時(shí)間片輪轉(zhuǎn)調(diào)度算法
            #include<iostream>
            #include
            <cstdio>
            #include
            <cmath>
            #include
            <cstring>

            using?namespace?std;
            enum?STATUS?{RUN,READY,WAIT,FINISH};

            struct?PCBNode
            {????????
            ????
            int??processID;??????????????//進(jìn)程ID
            ????STATUS??status;??????????????//進(jìn)程狀態(tài)
            ????int??priorityNum;??????????//優(yōu)先數(shù)
            ????int??reqTime;?????????????//總的需要運(yùn)行時(shí)間
            ????int??remainTime;??????????//剩下需要運(yùn)行時(shí)間
            ????int??arriveTime;??????????//進(jìn)入就緒隊(duì)列時(shí)間
            ????int??startTime;???????????//開始運(yùn)行時(shí)間
            ????int??finishTime;??????????//結(jié)束運(yùn)行時(shí)間
            ????int??totalTime;???????????//周轉(zhuǎn)時(shí)間
            ????float??weightTotalTime;??????//帶權(quán)周轉(zhuǎn)時(shí)間????
            }
            ;

            struct?QueueNode?
            {
            ????
            int?ID;??????????//進(jìn)程ID
            ????struct?QueueNode?*?next;???//隊(duì)列中下一個(gè)進(jìn)程指針
            }
            ;

            struct?LinkQueue
            {
            ????QueueNode?
            *head;//隊(duì)首
            }
            ;
            void Fcfs(LinkQueue& Q, int& totalTimeSum, int& weightTotalTimeSum,PCBNode * ProcessTable);
            bool?RR_Run(LinkQueue&?Q,QueueNode*?q,?QueueNode*?p,?const?int?Round,int&?currentTime,PCBNode?*?ProcessTable);
            //分配時(shí)間片給q所指進(jìn)程,p為剛退出的進(jìn)程
            void?RoundRobin(LinkQueue&?Q,const?int?Round,?int&?totalTimeSum,?int&?weightTotalTimeSum,PCBNode?*?ProcessTable);
            //時(shí)間片輪轉(zhuǎn)調(diào)度,調(diào)用RR_Run(),時(shí)間片大小設(shè)為Round
            void?InitialQueue(LinkQueue&?Q,PCBNode?*?ProcessTable,const?int?processnum);
            //初始化就緒隊(duì)列
            void?Input(PCBNode?*?ProcessTable,?const?int?processnum);
            //從input.txt文件輸入數(shù)據(jù)

            int?main()
            {
            ????LinkQueue?Q;
            //就緒隊(duì)列
            ????Q.head?=?NULL;
            ????
            const?int?processnum?=?16;//進(jìn)程數(shù)
            ????const?int?Round?=?1;??????//時(shí)間片大小
            ????int?totalTimeSum?=?0;?????//周轉(zhuǎn)時(shí)間
            ????int????WeightTotalTimeSum?=?0;//帶權(quán)周轉(zhuǎn)時(shí)間
            ????PCBNode?*?ProcessTable=new?PCBNode[processnum];???//進(jìn)程表

            ????Input(ProcessTable,?processnum);
            ????InitialQueue(Q,?ProcessTable,?processnum);
            ????RoundRobin(Q,?Round,?totalTimeSum,WeightTotalTimeSum,ProcessTable);????
            ????cout
            <<"時(shí)間片輪調(diào)度的平均周轉(zhuǎn)時(shí)間為:"<<totalTimeSum/processnum<<endl;
            ????cout
            <<"時(shí)間片輪調(diào)度的平均帶權(quán)周轉(zhuǎn)時(shí)間為:"<<WeightTotalTimeSum/processnum<<endl;

            ????Input(ProcessTable,?processnum);
            ????InitialQueue(Q,?ProcessTable,?processnum);
            ????Fcfs(Q,?totalTimeSum,WeightTotalTimeSum,ProcessTable);
            ????cout
            <<"先來先服務(wù)的平均周轉(zhuǎn)時(shí)間為:"<<totalTimeSum/processnum<<endl;
            ????cout
            <<"先來先服務(wù)的平均帶權(quán)周轉(zhuǎn)時(shí)間為:"<<WeightTotalTimeSum/processnum<<endl;

            ????delete?[]?ProcessTable;
            ????
            return?0;
            }


            void?RoundRobin(LinkQueue&?Q,const?int?Round,?int&?totalTimeSum,?int&?weightTotalTimeSum,PCBNode?*?ProcessTable)
            {
            ????totalTimeSum?
            =?0;???//總的周轉(zhuǎn)時(shí)間
            ????weightTotalTimeSum?=?0;//平均周轉(zhuǎn)時(shí)間
            ????int?currentTime?=?0;???//當(dāng)前時(shí)間
            ????QueueNode*?p;
            ????QueueNode
            *?q;
            ????QueueNode
            *?r;
            ????
            bool?finish?=?false;//調(diào)用RR_Run()后,該進(jìn)程是否已經(jīng)做完退出
            ????
            ????p?
            =?Q.head;
            ????q?
            =?p->next;
            ????
            while?(q?!=?NULL)//從隊(duì)首開始依次分配時(shí)間片
            ????{
            ????????
            do
            ????????
            {????????
            ????????????cout
            <<"**********************"<<endl;
            ????????????cout
            <<"在時(shí)間片"<<(currentTime+1)/Round<<"內(nèi),活動進(jìn)程為:??"<<q->ID<<endl;
            ????????????cout
            <<"進(jìn)程"<<q->ID<<"?現(xiàn)在需要的時(shí)間片為:??"<<ProcessTable[q->ID].remainTime<<endl;
            ????????????finish?
            =?RR_Run(Q,?q,?p,?Round,?currentTime,?ProcessTable);//分配時(shí)間片給q進(jìn)程
            ????????????cout<<endl;
            ????????????
            ????????????
            if?(!finish)//若是進(jìn)程在本時(shí)間片內(nèi)做完,則跳出do…while循環(huán)
            ????????????{????????????
            ????????????????
            if?(q->next?==?NULL)?
            ????????????????
            {
            ????????????????????r?
            =?Q.head->next;
            ????????????????}

            ????????????????
            else
            ????????????????
            {
            ????????????????????r?
            =?q->next;
            ????????????????}

            ????????????}

            ????????????
            else?//否則計(jì)算周轉(zhuǎn)時(shí)間和帶權(quán)周轉(zhuǎn)時(shí)間
            ????????????{
            ????????????????totalTimeSum?
            +=?ProcessTable[q->ID].totalTime;
            ????????????????weightTotalTimeSum?
            +=?ProcessTable[q->ID].weightTotalTime;

            ????????????????delete?q;?
            //從隊(duì)列中刪除q進(jìn)程
            ????????????????q?=?p;
            ????????????}

            ????????}
            while?(!finish?&&??(ProcessTable[r->ID].arriveTime?>?currentTime?+?Round));
            ????????
            //下一個(gè)進(jìn)程很晚才來,則繼續(xù)給當(dāng)前進(jìn)程分配時(shí)間片
            ????????
            ????????p?
            =?q;
            ????????q?
            =?q->next;

            ????????
            if?(q?==?NULL?&&?Q.head->next!=NULL)
            ????????
            {
            ????????????p?
            =?Q.head;
            ????????????q?
            =?p->next;
            ????????}
            ?
            ????}
            ?
            ????delete?Q.head;
            ????Q.head?
            =?NULL;
            }


            bool?RR_Run(LinkQueue&?Q,QueueNode*?q,?QueueNode*?p,?const?int?Round,int&?currentTime,PCBNode?*?ProcessTable)
            {
            ????
            if?(ProcessTable[q->ID].remainTime?<=?Round)//在此時(shí)間片內(nèi)能夠做完,之后退出進(jìn)程調(diào)度
            ????{
            ????????ProcessTable[q
            ->ID].finishTime?=?currentTime?+?ProcessTable[q->ID].remainTime;
            ????????ProcessTable[q
            ->ID].totalTime?+=?ProcessTable[q->ID].remainTime;
            ????????ProcessTable[q
            ->ID].weightTotalTime?=?ProcessTable[q->ID].totalTime/ProcessTable[q->ID].reqTime;????????

            ????????currentTime?
            =?ProcessTable[q->ID].finishTime;
            ????????
            ????????p
            ->next?=?q->next;
            ????????cout
            <<endl;
            ????????cout
            <<"進(jìn)程"<<q->ID<<"完成!"<<endl;

            ????????
            return?true;
            ????}

            ????
            else//此時(shí)間片內(nèi)做不完
            ????{
            ????????ProcessTable[q
            ->ID].remainTime?=?ProcessTable[q->ID].remainTime?-?Round;
            ????????ProcessTable[q
            ->ID].totalTime?+=?Round;
            ????????currentTime?
            +=?Round;
            ????????
            ????????
            return?false;
            ????}

            }



            void?Fcfs(LinkQueue&?Q,?int&?totalTimeSum,?int&?weightTotalTimeSum,PCBNode?*?ProcessTable)
            {
            ????totalTimeSum?
            =?0;
            ????weightTotalTimeSum?
            =?0;//平均周轉(zhuǎn)時(shí)間
            ????QueueNode*?p;
            ????QueueNode
            *?q;
            ????
            ????p?
            =?Q.head->next;
            ????
            if?(p?!=NULL?)?
            ????
            {
            ????????ProcessTable[p
            ->ID].startTime?=?ProcessTable[p->ID].arriveTime;
            ????????ProcessTable[p
            ->ID].finishTime?=?ProcessTable[p->ID].arriveTime?+?ProcessTable[p->ID].reqTime;
            ????}

            ????
            ????
            for(q=p->next;?q!=NULL;?q=q->next)
            ????
            {
            ????????
            ????????
            if?(ProcessTable[q->ID].arriveTime?<?ProcessTable[p->ID].finishTime)
            ????????
            {
            ????????????ProcessTable[q
            ->ID].startTime?=?ProcessTable[p->ID].finishTime;
            ????????????ProcessTable[q
            ->ID].finishTime?=?ProcessTable[p->ID].finishTime?+?ProcessTable[q->ID].reqTime;
            ????????}

            ????????
            else//下個(gè)進(jìn)程到達(dá)時(shí)間較晚
            ????????{
            ????????????ProcessTable[q
            ->ID].startTime?=?ProcessTable[q->ID].arriveTime;
            ????????????ProcessTable[q
            ->ID].finishTime?=?ProcessTable[q->ID].arriveTime?+?ProcessTable[q->ID].reqTime;
            ????????}

            ????????p?
            =?q;
            ????}

            ????
            ????
            for(q=Q.head->next;?q!=NULL;?q=q->next)
            ????
            {
            ????????ProcessTable[q
            ->ID].totalTime?=?ProcessTable[q->ID].finishTime?-?ProcessTable[q->ID].arriveTime;
            ????????ProcessTable[q
            ->ID].weightTotalTime?=?ProcessTable[q->ID].totalTime/ProcessTable[q->ID].reqTime;????????
            ????????totalTimeSum?
            +=?ProcessTable[q->ID].totalTime;
            ????????weightTotalTimeSum?
            +=?ProcessTable[q->ID].weightTotalTime;
            ????}
            ????
            ????
            ????
            int?t?=?0;
            ????
            for(q=Q.head->next;?q!=NULL;?q=q->next)
            ????
            {
            ????????cout
            <<"*********************"<<endl;
            ????????
            while?(?t<ProcessTable[q->ID].finishTime?)
            ????????
            {
            ????????????cout
            <<"時(shí)刻"<<t<<":??進(jìn)程"<<q->ID<<"活動"<<endl;
            ????????????t
            ++;
            ????????}

            ????????
            if?(q->next?!=?NULL)
            ????????
            {????
            ????????????cout
            <<"時(shí)刻"<<t<<":??進(jìn)程"<<q->ID<<"結(jié)束活動,開始下一個(gè)進(jìn)程."<<endl;
            ????????????cout
            <<"進(jìn)程"<<q->ID<<"的周轉(zhuǎn)時(shí)間為:?"<<ProcessTable[q->ID].totalTime<<endl;
            ????????????cout
            <<"進(jìn)程"<<q->ID<<"的帶權(quán)周轉(zhuǎn)時(shí)間為:?"<<ProcessTable[q->ID].weightTotalTime<<endl<<endl;
            ????????}

            ????????
            else
            ????????
            {
            ????????????cout
            <<"時(shí)刻"<<t<<":??進(jìn)程"<<q->ID<<"結(jié)束活動."<<endl<<endl;
            ????????????cout
            <<"進(jìn)程"<<q->ID<<"的周轉(zhuǎn)時(shí)間為:?"<<ProcessTable[q->ID].totalTime<<endl;
            ????????????cout
            <<"進(jìn)程"<<q->ID<<"的帶權(quán)周轉(zhuǎn)時(shí)間為:?"<<ProcessTable[q->ID].weightTotalTime<<endl<<endl;????????????
            ????????}

            ????}

            ????cout
            <<"所有進(jìn)程結(jié)束活動."<<endl<<endl;

            ????p?
            =?Q.head;
            ????
            for(q=p->next;?q!=NULL;?q=q->next)
            ????
            {
            ????????delete?p;
            ????????p?
            =?q;
            ????}

            }



            void?InitialQueue(LinkQueue&?Q,?PCBNode?*?ProcessTable,const?int?processnum)
            {
            ????
            //初始化
            ????
            ????
            for?(int?i=0;i<processnum;i++)
            ????
            {
            ????????ProcessTable[i].processID
            =i;
            ????????ProcessTable[i].reqTime
            =ProcessTable[i].remainTime;
            ????????ProcessTable[i].finishTime
            =0;
            ????????ProcessTable[i].startTime
            =0;????
            ????????ProcessTable[i].status
            =WAIT;
            ????????ProcessTable[i].totalTime
            =0;
            ????????ProcessTable[i].weightTotalTime
            =0;????????
            ????}

            ????
            ????Q.head?
            =?new?QueueNode;
            ????Q.head
            ->next?=?NULL;
            ????QueueNode?
            *?p;
            ????QueueNode?
            *?q;
            ????
            for?(i=0;i<processnum;i++)
            ????
            {????
            ????????p?
            =?new?QueueNode;
            ????????p
            ->ID?=?i;
            ????????p
            ->next?=?NULL;
            ????????
            if?(i?==?0)
            ????????
            {
            ????????????Q.head
            ->next?=?p;????????????
            ????????}

            ????????
            else
            ????????????q
            ->next?=?p;
            ????????
            ????????q?
            =?p;
            ????}

            }



            void?Input(PCBNode?*?ProcessTable,?const?int?processnum)
            {
            ????FILE?
            *fp;????????//讀入線程的相關(guān)內(nèi)容
            ????if((fp=fopen("input.txt","r"))==NULL)
            ????
            {
            ????????cout
            <<"can?not?open?file!"<<endl;
            ????????exit(
            0);
            ????}
            ????????
            ????
            for(int?i=0;i<processnum;i++)
            ????
            {
            ????????fscanf(fp,
            "%d?%d?%d",&ProcessTable[i].arriveTime,&ProcessTable[i].remainTime,&ProcessTable[i].priorityNum);
            ????}

            ????fclose(fp);
            }




            建議輸入數(shù)據(jù):input.txt
            0????4????? 0
            1? ? 35???? 1
            2????10???? 2
            3? ? 5????? 3
            6?? ?9????? 4
            7?? ?21???? 5
            9??? 35???? 6
            11 ?23???? 7
            12? 42???? 8 ?
            13?? 1????? 9
            14?? 7???? 10
            20? ?5???? 11
            23? ?3???? 12
            24? ?22??? 13
            25?? 31??? 14
            26?? 1???? 15
            posted on 2006-12-04 12:16 哈哈 閱讀(16644) 評論(39)  編輯 收藏 引用

            評論:
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-01-03 16:17 | phoenix
            怎么運(yùn)行不了的?  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-01-03 19:46 | pengkuny
            @phoenix
            什么現(xiàn)象?
            我試了一下,是不是"can't open the file"?
            你只要添加一個(gè)input.txt文件就可以運(yùn)行了,文件內(nèi)容為:(我建議輸入的數(shù)據(jù)).
              回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-01-04 13:21 | phoenix
            不是"can't open the file"
            是 “Fcfs(Q, totalTimeSum,WeightTotalTimeSum,ProcessTable);”這里的'Fcfs' : undeclared identifier
            還有“void Fcfs(LinkQueue& Q, int& totalTimeSum, int& weightTotalTimeSum,PCBNode * ProcessTable)
            { ”
            這里的'Fcfs' : redefinition; different type modifiers

            這個(gè)怎么辦?還有我可以加你QQ么?
              回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-01-04 13:47 | pengkuny
            @phoenix
            sorry,起先忘了函數(shù)聲明Fcfs;已經(jīng)加上去了,
            不過這些錯(cuò)誤自己應(yīng)該能夠調(diào)試修改過來吧
            當(dāng)然可以加QQ拉  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-01-04 13:56 | phoenix
            希望能得到快點(diǎn)的回復(fù)~~呵呵`~謝謝!  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-01-04 13:57 | phoenix
            哦哦~~我加你QQ啰~~  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-01-04 14:05 | phoenix
            還有我想問你哦~~我的VC6.0里沒有stdafx.h這個(gè)函數(shù)~~有些程序就運(yùn)行不了~~怎么辦?  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-01-04 14:15 | pengkuny
            @phoenix
            vc里怎么可能沒有呢?那就奇怪了.#include<stdafx.h>
            實(shí)在沒有,到別人那里拷貝一份,放到原來的文件夾下就可以了——我想  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-01-05 22:09 | 小山日志
            stdafx.h 是用來加速編譯速度的頭文件,通常編譯VC工程時(shí)把你需要的頭文件在這里包含,不用也行。特別是這樣的小工程... ... ^_^  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-01-05 23:46 | pengkuny
            @小山日志
            沒錯(cuò),避免重復(fù)編譯.
            一般沒必要加  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-01-08 09:29 | phoenix
            你好,我想問問你那里還保存有我前幾天用郵箱發(fā)給你的進(jìn)程調(diào)度么?
            我想讓你幫我分析一下里面的代碼,我有些問題搞不懂。比如,我想知道
            源代碼前面的“PCB,*PCBptr,**PCBpp;”這幾個(gè)是什么意思,PCBpp為什么要用兩個(gè)**?方便的話,可以在QQ上回復(fù)我么,我一直在線的。謝謝!  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-03-09 18:49 | fangyi
            你好,請問你能不能再加上一種調(diào)度算法,優(yōu)先級調(diào)度算法,謝謝你哦!!!  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-03-09 19:18 | pengkuny
            @fangyi
            那不能,優(yōu)先級調(diào)度算法倒是有,不過是別人做的,
            要的話email給我:pengkuny@163.com  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-03-10 13:03 | fangyi
            那太感謝了,我的emai是zhuangfangyi@163.com  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-03-11 09:35 | fangyi
            已經(jīng)收到你的郵件了,真的很感謝,我加你qq,交個(gè)朋友吧!  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法[未登錄] 2007-05-20 20:21 |
            @pengkuny有你在真好呀解決了很多問題呀哈哈 謝謝了!!
              回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-06-16 13:32 | 小亮
            請問可不可以提供一個(gè)用C或C++寫的多級反饋隊(duì)列調(diào)度算法啊?謝謝  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-06-16 13:48 | pengkuny
            @小亮
            你聯(lián)系方式都沒有,叫我怎么提供?  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-06-17 13:25 | vicky
            可否將 高優(yōu)先權(quán)優(yōu)先調(diào)度算法 和 多級反饋隊(duì)列調(diào)度算法的C代碼給我呢?萬分感謝~
            我郵箱是mxw_0925@sohu.com  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-06-17 13:56 | 小亮
            請問可不可以提供一個(gè)用C或C++寫的多級反饋隊(duì)列調(diào)度算法和多級反饋隊(duì)列調(diào)度算法的C代碼完整程序啊?對不起,之前忘記給郵箱地址了,我郵箱地址是du198573@126.com,急需,請多多指教,萬分感激!謝謝!@pengkuny
              回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-06-17 14:04 | 小亮
            請問可不可以提供一個(gè)用C或C++寫的多級反饋隊(duì)列調(diào)度算法和多級反饋隊(duì)列調(diào)度算法的C代碼完整程序啊?對不起,之前忘記給郵箱地址了,我郵箱地址是du198573@126.com,急需,請多多指教,萬分感激!謝謝,可以的話也可以加我QQ:404101489  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-06-18 11:53 | 小亮
            @pengkuny
            感謝這么快就幫我寫好了多級反饋隊(duì)列調(diào)度算法,如果能附加N-S流程圖就更加完美了,不過還是真的要感謝你!  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-06-18 16:32 | 小亮
            感謝這么快就幫我寫好了多級反饋隊(duì)列調(diào)度算法,如果能附加N-S流程圖就更加完美了,不過還是真的要感謝你!希望有時(shí)間可以發(fā)個(gè)N-S流程圖給我,謝謝!du198573@126.com  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-06-18 22:50 | pengkuny
            @小亮
            沒空, 我現(xiàn)在一大堆考試 一大堆實(shí)驗(yàn) 天天凌晨5,6點(diǎn)才睡覺, 煩死了, 呵呵  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-06-19 12:10 | 小亮
            @pengkuny
            沒關(guān)系拉,那你自己要注意休息拉!  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-07-05 17:41 | 寶貝疙瘩
            能不能在這2天內(nèi)幫我寫一個(gè)先來先服務(wù)的程序,簡單點(diǎn)的,每句后面有注釋,最后些上思路的?謝謝啊~~  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-07-05 18:10 | pengkuny
            @寶貝疙瘩
            幫你寫?
            Oh, come on!

            十天之后再說吧,我最近考試煩死了.
              回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-07-05 18:13 | pengkuny
            @寶貝疙瘩
            我這篇文章里不是已經(jīng)給出先來先服務(wù)的源代碼了嗎?
              回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-12-02 11:44 | *幻&.
            你好俸哦.......
            偶像........  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法[未登錄] 2007-12-06 13:06 | kevin
            偶像厲害啊!!!!!1
            能不能順便提供個(gè)提供一個(gè)用C或C++寫的多級反饋隊(duì)列調(diào)度算法啊?謝謝

            我的郵箱是tanyongshan18@126.com  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2007-12-24 00:08 | betty
            input.txt文件是什么意思  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2008-10-24 10:35 | wuming
            誰需要這個(gè)程序就聯(lián)系我 發(fā)郵件 ludinghui125@163.com  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2009-04-09 10:57 | 做實(shí)驗(yàn)不容易
            可以把修改了的程序貼上來不?不要加那個(gè)intput.txt文件的.  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2009-04-20 10:37 | 殲擊機(jī)
            #include<conio.h>
            #include<iostream.h>
            #include<fstream.h>

            #define N 20

            typedef struct pcb/*進(jìn)程控制塊定義*/
            {
            char pname[N]; /*進(jìn)程名*/
            int runtime; /*運(yùn)行時(shí)間*/
            int arrivetime; /*到達(dá)時(shí)間*/
            char state; /*進(jìn)程狀態(tài)*/
            struct pcb *next; /*鏈接指針*/
            }PCB;

            PCB head_input;//就緒隊(duì)列
            PCB head_run;
            PCB * pcb_input;

            static char R='r',C='c';
            unsigned long current; /*記錄系統(tǒng)當(dāng)前時(shí)間的變量*/

            void inputprocess(); /*建立進(jìn)程函數(shù)*/
            int readyprocess(); /*建立就緒隊(duì)列函數(shù)*/
            int readydata(); /*判斷進(jìn)程是否就緒函數(shù)*/
            int runprocess(); /*運(yùn)行進(jìn)程函數(shù)*/

            ofstream fout;

            /*定義建立就緒隊(duì)列函數(shù)*/
            int readyprocess()
            {
            while(1)
            {
            if(readydata()==0)/*判斷是否就緒函數(shù)*/
            return 1;
            else
            runprocess();/*運(yùn)行進(jìn)程函數(shù)*/
            }
            }

            /*定義判斷就緒隊(duì)列是否有進(jìn)程函數(shù)*/
            int readydata()
            {
            if(head_input.next==NULL)
            {
            if(head_run.next==NULL)
            return 0;//就緒隊(duì)列和運(yùn)行隊(duì)列都沒有進(jìn)程時(shí),返回0,最終程序結(jié)束
            else
            return 1;//就緒隊(duì)列為空,運(yùn)行隊(duì)列非空,返回上級循環(huán),繼續(xù)運(yùn)行
            }

            PCB *p1,*p2,*p3;

            p1=head_run.next;
            p2=&head_run;
            while(p1!=NULL)
            {
            p2=p1;
            p1=p2->next;
            }
            p1=p2;//p1指向run隊(duì)列的最后一個(gè)進(jìn)程

            p3=head_input.next;//p3指向就緒隊(duì)列的第一個(gè)進(jìn)程
            p2=&head_input;

            while(p3!=NULL)
            {//遍歷就緒隊(duì)列
            if(((unsigned long)p3->arrivetime<=current)&&(p3->state==R))
            {//若符合條件(p3所指進(jìn)程的時(shí)間)
            cout<<"Time slice is "<<current<<" (time "<<(current+500)/1000<<"); Process "<<p3->pname<<" start,\n";
            fout<<"Time slice is "<<current<<" (time "<<(current+500)/1000<<"); Process "<<p3->pname<<" start,\n";
            p2->next=p3->next;

            //將p3所指進(jìn)程,放到p1所指進(jìn)程之后
            p3->next=p1->next;
            p1->next=p3;

            p3=p2;
            }
            p2=p3;
            p3=p3->next;
            }
            return 1;
            }

            /*定義運(yùn)行進(jìn)程函數(shù)*/
            int runprocess()
            {
            PCB *p1,*p2;
            if(head_run.next==NULL)
            {//若運(yùn)行隊(duì)列為空,時(shí)間+1,跳出函數(shù)
            current++;
            return 1;
            }
            else
            {
            p1=head_run.next;//p1指向運(yùn)行隊(duì)列的第一個(gè)進(jìn)程
            p2=&head_run;
            while(p1!=NULL)
            {//遍歷運(yùn)行隊(duì)列

            p1->runtime--;//p1所指進(jìn)程運(yùn)行時(shí)間-1
            current++;//時(shí)間+1

            if(p1->runtime<=0)
            {//p1所指進(jìn)程運(yùn)行時(shí)間=0,輸出并刪除
            cout<<"Time slice is "<<current<<" (time "<<(current+500)/1000<<"); Process "<<p1->pname<<" end. \n";
            fout<<"Time slice is "<<current<<" (time "<<(current+500)/1000<<"); Process "<<p1->pname<<" end. \n";
            p1->state=C;
            p2->next=p1->next;
            delete p1;
            p1=NULL;
            }
            else
            {
            p2=p1;
            p1=p2->next;
            }
            }
            return 1;
            }
            }


            /*定義建立進(jìn)程函數(shù)*/
            void inputprocess()
            {

            PCB *p1,*p2;
            int num; /*要建立的進(jìn)程數(shù)*/
            unsigned long max=0;

            cout<<"How many processes do you want to run:";
            fout<<"How mant processes do you want to run:";
            cin>>num;
            fout<<num<<endl;

            p1=&head_input;
            p2=p1;
            p1->next=new PCB;
            p1=p1->next;

            for(int i=0;i<num;i++)
            {
            cout<<"No."<<i+1<<" process input pname:";
            fout<<"No."<<i+1<<" process input pname:";
            cin>>p1->pname;
            fout<<p1->pname<<endl;

            cout<<" runtime:";
            fout<<" runtime:";
            cin>>p1->runtime;
            fout<<p1->runtime<<endl;

            cout<<" arrivetime:";
            fout<<" arrivetime:";
            cin>>p1->arrivetime;
            fout<<p1->arrivetime<<endl;

            p1->runtime=(p1->runtime)*1000;
            p1->arrivetime=(p1->arrivetime)*1000;
            p1->state=R;
            if((unsigned long)(p1->arrivetime)>max)
            max=p1->arrivetime;
            p1->next=new PCB;
            p2=p1;
            p1=p1->next;
            }

            delete p1;
            p1=NULL;
            p2->next=NULL;
            }



            void main()
            {
            fout.open("result.txt");
            cout<<"\ntime 1=1000 time slice\n";
            fout<<"\ntime 1=1000 time slice\n";

            current=0;
            inputprocess();
            readyprocess();

            cout<<flush;
            getch();
            fout.close();
            }  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2009-05-03 12:53 | 創(chuàng)意產(chǎn)品
            謝謝,學(xué)習(xí)了  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2009-06-09 20:43 | 課程設(shè)計(jì)
            請問這個(gè)是有界面的嘛?請問能不能發(fā)一個(gè)有界面的,先來先服務(wù)、時(shí)間片輪轉(zhuǎn)調(diào)度算法啊?謝謝~~lily88zl@yahoo.com.cn  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2009-08-21 10:56 | Cavendish
            @phoenix
            重新定義 采用相同的模型定義  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2009-08-21 10:57 | Cavendish
            @課程設(shè)計(jì)
            加上一個(gè)界面編輯器 自己編輯一個(gè)就好了  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度:先來先服務(wù)算法、時(shí)間片輪轉(zhuǎn)調(diào)度算法 2010-04-15 17:04 | 捏捏
            input.txt添加到哪里啊?
            @pengkuny
              回復(fù)  更多評論
              

            只有注冊用戶登錄后才能發(fā)表評論。
            網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


            无码人妻久久一区二区三区免费 | 久久亚洲AV成人无码| 久久久久亚洲AV无码永不| 婷婷国产天堂久久综合五月| 国产午夜精品理论片久久影视| 亚洲国产精品无码久久SM| 欧美久久一级内射wwwwww.| 国产69精品久久久久99| A级毛片无码久久精品免费| 69国产成人综合久久精品| 国产精品久久久久久影院| 2021少妇久久久久久久久久| 99精品久久精品一区二区| 久久中文字幕一区二区| 亚洲国产二区三区久久| 国产高潮国产高潮久久久91 | 国产—久久香蕉国产线看观看 | 亚洲欧美伊人久久综合一区二区| 久久毛片一区二区| 久久亚洲AV无码精品色午夜麻豆| 无码国产69精品久久久久网站| 亚洲国产另类久久久精品黑人 | 久久久久亚洲AV成人网人人软件| 国产免费久久精品丫丫| 性做久久久久久免费观看| 久久人人青草97香蕉| 久久精品国产亚洲AV无码偷窥| 久久不见久久见免费视频7| 国产一区二区三区久久| 狠狠人妻久久久久久综合蜜桃| 中文精品99久久国产| 麻豆一区二区99久久久久| 亚洲国产精品久久久久网站 | 亚洲欧洲精品成人久久奇米网| 亚洲七七久久精品中文国产| 天天躁日日躁狠狠久久| 久久久久亚洲精品天堂| 青草影院天堂男人久久| 亚洲国产精品成人久久蜜臀 | 亚洲国产精品成人久久蜜臀| 久久国产热精品波多野结衣AV|