ここから本文です

P1.P2.P3というプロセスに、その処理に要する時間T1.T2.T3がある。 各プロセスを...

mil********さん

2016/6/2123:08:05

P1.P2.P3というプロセスに、その処理に要する時間T1.T2.T3がある。
各プロセスを順に最大q(ms)だけCPUは処理される。
もしq(ms)を処理しても完了しないプロセスは列の最後尾に移動しCPU処理を

待つ。

q(ms)ごとにプロセスの列の状態を表示するプログラムを作りたいのですがどうすればいいですか
出力結果は以下のようにしたいです
またキューで実装したいのですが、キューを習っていなくてよく分かりません

t=0 P1(30) P2(7) P3(16)
t=10 P2(7) P3(16) P1(20)
t=20 P3(13) P1(20)
t=30 P1(17) P3(6)
t=40 P3(3)P1(10)
t=50 P1(3)

/*t=17でP2が0になります。
t=181920で3減るのでt=20の時点ではp3は13になります。
その後t=27でp3は6となりt=28ではp1を減らし始めます。*/

閲覧数:
67
回答数:
2
お礼:
100枚

違反報告

ベストアンサーに選ばれた回答

uso********さん

編集あり2016/6/2213:36:53

どうせキュー長が固定なのでリングバッファで、
テキトーな原形でも。後は自力改変で
//codepad.org/O2LQCmdq#1m6Wzxha#
#include<stdio.h>
#define N 3
int main(void){int u,t,s,r,q=10,p,pt[N]={30,7,16};
  for(r=q,p=s=t=0; s<N; ++t){
    if(0==t%q){
      printf("t=%3d ",t);
      for(u=0; u<N; ++u)
        if(0<pt[(p+u)%N])
          printf("P%d(%d)",(p+u)%N+1,pt[(p+u)%N]);
      printf(1?"\n":"q=%d,r=%d,p=%d,s=%d\n",q,r,p,s);//DBG
    }
    while(pt[p]<=0)p=++p%N,r=q;/*次処理プロセスへ*/
    pt[p]--, --r; /*1ms消費*/
    if(pt[p]<=0)++s;/*プロセス処理完了?*/
    else if(r<=0)/*現プロセスTimeOut?*/
      p=++p%N,r=q;/*次プロセス強制切替*/
  }
  printf("t=%3d null\n",t);/*Finish!*/
return 0;}

ベストアンサー以外の回答

1〜1件/1件中

tan********さん

2016/6/2211:26:03

> 最大q(ms)だけCPUは処理される。

最大、ということは、一回の処理時間がq未満になることも
あるということですか?
確かに出力例でもそうなっているようですが。
処理時間がq未満になる条件は何ですか?

返信を取り消しますが
よろしいですか?

  • 取り消す
  • キャンセル

この質問につけられたタグ

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる