• <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>
            我要啦免费统计
            實(shí)驗(yàn)室老是中毒,今天差點(diǎn)連代碼都保不住了
            貼貼備份
            進(jìn)程調(diào)度 實(shí)驗(yàn)一 RR 時(shí)間片輪轉(zhuǎn)


            #include
            <stdio.h>
            #include
            <stdlib.h>
            #include
            <conio.h>
            #include
            <iostream>
            using namespace std;

            #define getch(type)(type*)malloc(sizeof(type))
            #define null 0
            #define MAXN 1000
            int stack[MAXN];
            int top;

            struct pcb{//調(diào)用進(jìn)程模塊
                char name[10];//進(jìn)程名
                char state; //進(jìn)程狀態(tài): 就緒,運(yùn)行,完成
                int super; //進(jìn)程優(yōu)先級
                int ntime;//需要運(yùn)行的時(shí)間
                int rtime;//到達(dá)時(shí)間 change
                struct pcb* link;//鏈接指針
            }
            *ready=null,*p;
            typedef 
            struct pcb PCB;
            void destroy();
            void check();

            void sort()//建立對進(jìn)程優(yōu)先級排列函數(shù)
            {
               PCB 
            *first,*second;
               
               
            int insert = 0;
               
               
            if( ( ready == null ) || ( ( p -> rtime ) < ( ready -> rtime ) ) ){//優(yōu)先級最大者,插入隊(duì)首
                    p -> link = ready;
                    ready 
            = p;
               }
             
               
            else {//進(jìn)程比較優(yōu)先級。插入適當(dāng)?shù)奈恢弥?/span>
                   first = ready;
                   second 
            = first -> link;
                   
            while( second != null){
                       
            if( (p -> rtime ) < (second -> rtime)){//come ing time
                       
            //插入當(dāng)前進(jìn)程前面
                           p -> link = second;
                           first 
            -> link = p;
                           second 
            = null;
                           insert 
            = 1;   
                        
                           }

                        
            else{
                             first 
            = first -> link;
                             second 
            = second -> link;
                           }

                       
                    }

                   
            if( insert == 0) first -> link =p;

               
               }

               
            return ;
            }


            PCB 
            *q;
            PCB 
            *front,*rear;

            void RR()
            {
                
            int time=0;
                q
            =ready;
                front
            =ready;
                rear 
            =ready;
                
            while(rear->link != null) rear= rear -> link; 
                
                
            while( front){
                    printf(
            "Running Time : %d\n",++time);

                    
            if(front -> rtime <= time){
                       
                         front 
            -> state ='R';

                        front 
            -> ntime--;//need time minus 1

                        printf(
            "\n *** 當(dāng)前正在運(yùn)行的進(jìn)程:%s\n",front->name);

                        
            if( front -> ntime == 0){// the one which is finished
                        p = front;

                        
            if(front -> link !=null )
                        front 
            =front ->link;
                        
            else {printf("\n finished\n");break;}


                        p 
            -> link = null;

                        destroy();

                        }

                        
            else{//else unfinished ,connect last

                        rear 
            -> link = front;

                        p
            =front;
                        
            if(front -> link !=null )
                        front 
            =front ->link;
                        
            else {printf("\n finished\n");break;}

                        p 
            -> link = null
                        }

                    
                     check();
            //display all pcbs in queue
                   }

                 
                }

                
            return ;
            }


            void input()
            {
                
            int i,num;
                system(
            "cls");
                
            //clrscr();
                printf("\n 請輸入進(jìn)程數(shù)量");
                scanf(
            "%d",&num);
                
            for( i = 0;i < num; i++){
                  printf(
            " 進(jìn)程號No.%d",i);
                  p
            =getch(PCB);
                  printf(
            "\n 輸入進(jìn)程名:");
                  scanf(
            "%s",p->name);
                  printf(
            "\n 到達(dá)時(shí)間:");
                  scanf(
            "%d",&p->rtime);
                  printf(
            "\n 輸入進(jìn)程運(yùn)行時(shí)間:");
                  scanf(
            "%d",&p->ntime);
                  printf(
            "\n");
                  p 
            -> super =0; p -> state='W';
                  p 
            -> link = null;
                  sort();
            //調(diào)用函數(shù)
                }

            //    check();
                return;
            }


            int space()
            {
                
            int l=0;
                PCB 
            *pr=ready;
                
            while(pr != null){
                 l
            ++;
                 pr 
            = pr->link;
                }

                
            return l;

            }


            void disp(PCB *pr)
            {
                printf(
            "\n qname\t state \t super \t ntime \t rtime\n");
                printf(
            "| %s\t",pr->name);
                printf(
            "| %c\t",pr->state);
                printf(
            "| %d\t",pr->super);
                printf(
            "| %d\t",pr->ntime);
                printf(
            "| %d\t",pr->rtime);
                printf(
            "\n");
             
            return ;
            }

            void check()//建立進(jìn)程查看函數(shù)
            {
            //    PCB *pr;
               /*    printf("\n *** 當(dāng)前正在運(yùn)行的進(jìn)程:%s",p->name);顯示當(dāng)前 運(yùn)行 進(jìn)程
                disp(p);
            */

                p
            =front;
                printf(
            "\n ****當(dāng)前就緒隊(duì)列狀態(tài):%c",p->state);/* 顯示隊(duì)列狀態(tài) */ 
                
            while( p != null){
                 disp(p);
                 p
            =p->link;
                }

                
            return ;
            }


            void destroy()/*建立進(jìn)程撤銷 函數(shù) (進(jìn)程 運(yùn)行結(jié)束,撤銷進(jìn)程)*/
            {
                printf(
            "\n 進(jìn)程[%s]已完成。\n",p->name);
                free(p);
                
            return;
            }


            /*void running()//進(jìn)程就緒函數(shù)
            {
                (p->rtime)++;
                if( p-> rtime == p -> ntime)// 
                    destroy();
                else{
                  (p->super)--;
                  
                  p->state = 'W';
                  
                  sort();
                }
                return;
            }
            */

            int main()
            {
               freopen(
            "in.txt","r",stdin);
                
            int len,h=0;
            //    char ch;
                input();
                len
            =space();
                RR();
            /*    while((len != 0) && ( ready !=null)){
                    ch=getchar();
                    h++;
                    printf("\n The execute number :%d\n",h);
                    p= ready;
                    ready = p->link;
                    p->link=null;//吧最前的拿出來 
                    p->state ='R';
                    check();
                    running();
                    // system("pause");
                    printf("\n 按任意鍵繼續(xù).");
                    ch=getchar();
                    
                }
            */

                printf(
            "\n\n進(jìn)程已經(jīng)完成。\n");

                
                system(
            "pause");
                
            return 0;
            }

            posted on 2008-11-05 20:43 閱讀(4263) 評論(5)  編輯 收藏 引用

            評論:
            # re: 進(jìn)程調(diào)度 實(shí)驗(yàn)一 RR 時(shí)間片輪轉(zhuǎn)算法 (記錄)[未登錄] 2008-11-06 09:26 | raof01
            標(biāo)題很吸引人,內(nèi)容很讓人失望。  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度 實(shí)驗(yàn)一 RR 時(shí)間片輪轉(zhuǎn)算法 (記錄) 2008-11-06 10:01 | PDF閱讀器下載
            個(gè)人覺得代碼還是不錯(cuò)的  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度 實(shí)驗(yàn)一 RR 時(shí)間片輪轉(zhuǎn)算法 (記錄)[未登錄] 2008-11-06 19:58 | cdy20
            為了應(yīng)付 老師堂上檢查
            不過要怎么改都行的 ,畢竟模擬

            沒有實(shí)現(xiàn) 搶占式 也沒有實(shí)現(xiàn)多級的
            有什么想法都可以 交流  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度 實(shí)驗(yàn)一 RR 時(shí)間片輪轉(zhuǎn)算法 (記錄) 2008-11-12 13:15 | 飄過
            用最小堆做個(gè)多優(yōu)先級的也是個(gè)不錯(cuò)的選擇,不必非用鏈表,怪麻煩的  回復(fù)  更多評論
              
            # re: 進(jìn)程調(diào)度 實(shí)驗(yàn)一 RR 時(shí)間片輪轉(zhuǎn)算法 (記錄) 2008-11-12 20:54 | cdy20
            @飄過
            也是

            當(dāng)練手的,兩年沒用過指針了。  回復(fù)  更多評論
              

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


            99蜜桃臀久久久欧美精品网站| 久久强奷乱码老熟女网站| 国产69精品久久久久APP下载| 99久久中文字幕| 久久久久99精品成人片直播| 2019久久久高清456| 无码人妻久久一区二区三区蜜桃| 国产巨作麻豆欧美亚洲综合久久| 久久青青草原国产精品免费| 久久精品国产亚洲欧美| 久久99中文字幕久久| 久久久久久久综合日本亚洲| 久久国产精品国产自线拍免费 | 久久er热视频在这里精品| 亚洲AV日韩精品久久久久久| 97精品伊人久久久大香线蕉| 久久久久亚洲AV无码观看| 久久精品久久久久观看99水蜜桃| 国产亚洲精品久久久久秋霞| 亚洲中文字幕无码久久综合网| 一本色道久久88精品综合 | 97久久国产亚洲精品超碰热| 久久亚洲精品无码AV红樱桃| 国内精品久久久久久99蜜桃| 99久久综合狠狠综合久久止| 亚洲国产精品久久久久久| 久久国产精品无码网站| 亚洲国产日韩综合久久精品| 国产亚洲精品久久久久秋霞| AV无码久久久久不卡网站下载| 9191精品国产免费久久| 亚洲国产精品无码久久久久久曰 | 久久夜色精品国产网站| 香港aa三级久久三级| 亚洲国产天堂久久综合| 久久久久亚洲AV无码麻豆| 91久久精品国产成人久久| 无码任你躁久久久久久老妇App| 麻豆一区二区99久久久久| 精品久久久久久久久久中文字幕| 香港aa三级久久三级老师2021国产三级精品三级在 |