「AP過去問 令和5年度秋期 午前 問17」の版間の差分

提供:yonewiki
(ページの作成:「AP過去問 令和6年度春期 午前 問題に戻る AP過去問 令和6年度春期 午前 問16前の問題へ AP過去問 令和6年度春期 午前 問18次の問題へ   =='''問17(問題文)'''==  プリエンプティブな優先度ベースのスケジューリングで実行する二つの周期タスクA及びBがある。タスクBが周期内に処理を完了できるタスクA及びB…」)
 
 
(同じ利用者による、間の19版が非表示)
1行目: 1行目:
[[AP過去問 令和6年度春期 午前#問題|AP過去問 令和6年度春期 午前 問題]]に戻る
<freescript></script><script type="text/x-mathjax-config">
  MathJax.Ajax.config.path["Contrib"]="https://wiki.yo-net.jp/mathjax/";
  MathJax.Hub.Register.StartupHook("TeX Jax Ready",function (){
    MathJax.Hub.Insert(
      MathJax.InputJax.TeX.Definitions.macros,{
        cancel: ["Extension","cancel"],
        bcancel: ["Extension","cancel"],
        xcancel: ["Extension","cancel"],
        cancelto: ["Extension","cancel"]
      }
    );
  });
  MathJax.Hub.Config({
    tex2jax:{
      displayMath: [[','],['\\[', '\\]']],  //displayスタイル数式に利用する記号の指定
      inlineMath:  [['\\@', '\\@'],['\\(', '\\)']],//inlineスタイル数式に利用する記号の指定
                                                  //ここは使う人が自由に設定する部分です。
      processEscapes: true
    },
    TeX:{
//    equationNumbers:{autoNumber: "AMS"},
      extensions: ["[Contrib]/physics/physics.js","[Contrib]/siunitx/siunitx.js", "color.js", "cancel.js"]
    },
    "HTML-CSS": {
      availableFonts: [],
      preferredFont: null,
      webFont: "Neo-Euler"
    },
  });
</script>
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.9/MathJax.js?config=TeX-AMS_HTML-full"></script>
<script></freescript>
<freescript></script>
<style>
.table-container {
    display: inline-block;
    text-align: left;
    margin: 20px;
}


[[AP過去問 令和6年度春期 午前 問16]]前の問題へ
.table-header {
    display: flex;
    justify-content: space-between;
    margin-bottom: 5px;
}
</style>
<style>
div.imadake-left mjx-container[jax="CHTML"][display="true"]{text-align: left;}
.imadake-left .MathJax_Display {
  text-align: left !important;
  font-size: 0.9rem;
}
</style>
<script></freescript>
[[AP過去問 令和5年度秋期 午前#問題|AP過去問 令和5年度秋期 午前 問題]]に戻る


[[AP過去問 令和6年度春期 午前 問18]]次の問題へ
[[AP過去問 令和5年度秋期 午前 問16]]前の問題へ
 
[[AP過去問 令和5年度秋期 午前 問18]]次の問題へ


 
 
11行目: 65行目:




ア 
[[ファイル:AP R5 2Fall AMQ17 Fig1.png|400px||none|]]
 
 
 
=='''回答・解説'''==
【解き方】
 
タスクBが処理を完了できるかどうかは、'''応答時間解析(response time analysis)'''で判断します。
 
応答時間の式(初期値はタスクBの実行時間から開始):
<freescript></script>
<div class="imadake-left" align="left">
$$
\require{enclose}
\begin{eqnarray}
R = C_B + \sum_{i \in hp(B)} \left\lceil \frac{R}{T_i} \right\rceil \cdot C_i
\end{eqnarray}
$$
</div>
<script></freescript>
<span style="font-size: 0.9rem;">CB</span> :タスクBの最大実行時間
 
<span style="font-size: 0.9rem;">Ti</span>:タスクAの周期
 
<span style="font-size: 0.9rem;">Ci</span> :タスクAの最大実行時間
 
<span style="font-size: 0.9rem;">RTi</span>は天井関数と呼ばれ、シーリング Ti ぶんの Rのように読みます。これは0.8や0.2のような少数を切り上げ、1とする演算です。タスクBより優先度が高いもの(higher priority B)について総和をとることを意味します。この問題ではタスクBに対してはタスクAの1つしかないので総和をとる必要はありません。
 
 
ア:
 
*タスクA:<span style="font-size: 0.9rem;">Ci=2</span>、<span style="font-size: 0.9rem;">Ti=4</span>
 
*タスクB:<span style="font-size: 0.9rem;">CB=3</span>、<span style="font-size: 0.9rem;">TB=8</span>
 
初期値:<span style="font-size: 0.9rem;">R</span>には仮に<span style="font-size: 0.9rem;">CB</span>を入れ、算出された値を次の<span style="font-size: 0.9rem;">R</span>とします。収束するか、<span style="font-size: 0.9rem;">TB</span>を超えるまで計算します。超えるとタスクが滞りますので、駄目です。<span style="font-size: 0.9rem;">TB</span>の周期を超えると、次々とBのタスクがやってきて、消化できずに処理が滞ります。
 
<span style="font-size: 0.9rem;">R=3+342=3+12=5</span>
 
次:
 
<span style="font-size: 0.9rem;">R=3+542=3+22=7</span>
 
次:
 
<span style="font-size: 0.9rem;">R=3+742=3+22=7</span>(収束)
 
 
<span style="font-size: 0.9rem;">R=7</span> → OK、もう答えは定まったのでこれ以上計算する必要はないですね。
 
 
でも、念のため、練習を兼ねて、他の選択肢についても計算をしてみましょう。
 
 
イ:
 
*タスクA:<span style="font-size: 0.9rem;"> C_i=3 </span>、<span style="font-size: 0.9rem;"> T_i=6 </span>
 
*タスクB:<span style="font-size: 0.9rem;"> C_B=4 </span>、<span style="font-size: 0.9rem;"> T_B=9 </span>
 
初期:
 
<span style="font-size: 0.9rem;"> R=4+\left\lceil \frac{4}{6} \right\rceil \cdot 3=4+1\cdot3=7 </span>
 
次:
 
<span style="font-size: 0.9rem;"> R=4+\left\lceil \frac{7}{6} \right\rceil \cdot 3=4+2\cdot3=10 </span>
 
次:
 
<span style="font-size: 0.9rem;"> R=4+\left\lceil \frac{10}{6} \right\rceil \cdot 3=4+2\cdot3=10 </span>(収束)
 
 
<span style="font-size: 0.9rem;"> → R=10 \gt T_B=9 </span> <span style="font-size: 0.9rem;"> R=10 </span>が<span style="font-size: 0.9rem;"> T_B=9 </span>→ より大きいので処理が滞る。
 
 
ウ:
 
*タスクA:<span style="font-size: 0.9rem;"> C_i=3 </span>、<span style="font-size: 0.9rem;"> T_i=5 </span>
 
*タスクB:<span style="font-size: 0.9rem;"> C_B=5 </span>、<span style="font-size: 0.9rem;"> T_B=13 </span>
 
初期:
 
<span style="font-size: 0.9rem;"> R=5+\left\lceil \frac{5}{5} \right\rceil \cdot 3=5+1\cdot3=8 </span>
 
次:
 
<span style="font-size: 0.9rem;"> R=5+\left\lceil \frac{8}{5} \right\rceil \cdot 3=5+2\cdot3=11 </span>
 
次:
 
<span style="font-size: 0.9rem;"> R=5+\left\lceil \frac{11}{5} \right\rceil \cdot 3=5+3\cdot3=14 </span>
 
 
<span style="font-size: 0.9rem;"> → R=14 \gt T_B=13 </span>  収束する前に<span style="font-size: 0.9rem;"> R=14 </span>が<span style="font-size: 0.9rem;"> T_B=13 </span>→ より大きくなった。これも処理が滞る。
 
 
エ:
 
*タスクA:<span style="font-size: 0.9rem;"> C_i=4 </span>、<span style="font-size: 0.9rem;"> T_i=6 </span>
 
*タスクB:<span style="font-size: 0.9rem;"> C_B=5 </span>、<span style="font-size: 0.9rem;"> T_B=15 </span>
 
初期:
 
<span style="font-size: 0.9rem;"> R=5+\left\lceil \frac{5}{6} \right\rceil \cdot 4=5+1\cdot4=9 </span>
 
次:


イ 
<span style="font-size: 0.9rem;"> R=5+\left\lceil \frac{9}{6} \right\rceil \cdot 4=5+2\cdot4=13 </span>


ウ 
次:


エ 
<span style="font-size: 0.9rem;"> R=5+\left\lceil \frac{13}{6} \right\rceil \cdot 4=5+3\cdot4=17 </span>


 


=='''回答・解説'''==
<span style="font-size: 0.9rem;">\( → R=17 \gt T_B=15 \)</span>  収束する前に<span style="font-size: 0.9rem;"> R=17 </span>が<span style="font-size: 0.9rem;"> T_B=15 </span>→ より大きくなった。これも処理が滞る。
 
 
 したがって
 
 
<span style = "background:linear-gradient(transparent 75%, #7fbfff 75%); font-weight:bold; ">
ア</span>
 
 
 が答えです。
 
 
 もっと地道な導出方法もあります。方眼紙みたいな奴にウメウメしていく手法です。
 
 
 方眼紙に最大処理時間2なら2マス。周期4なら2マスあげて描く
 
<span style="font-family: 'MS Gothic', 'MS ゴシック', monospace, 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif;">■■□□■■□□■■□□■■□□■■□□■■□□■■□□■■□□</span>
 
こんな感じ。
 
 タスクBは最大処理時間2なら3マス。周期8なら処理時間を差し引いた5マスあげて描く
 
<span style="font-family: 'MS Gothic', 'MS ゴシック', monospace, 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif;">☒☒☒□□□□□☒☒☒□□□□□☒☒☒□□□□□☒☒☒□□□□□</span>こんな感じ。
 
 
これを真ん中の方眼紙に埋めていく。
 
<span style="font-family: 'MS Gothic', 'MS ゴシック', monospace, 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif;">■■□□■■□□■■□□■■□□■■□□■■□□■■□□■■□□</span>
 
<span style="font-family: 'MS Gothic', 'MS ゴシック', monospace, 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif;">■■☒☒☒■■□■■☒☒☒■■□■■☒☒☒■■□■■☒☒☒■■□</span>
 
<span style="font-family: 'MS Gothic', 'MS ゴシック', monospace, 'Hiragino Kaku Gothic ProN', 'ヒラギノ角ゴ ProN W3', sans-serif;">☒☒☒□□□□□☒☒☒□□□□□☒☒☒□□□□□☒☒☒□□□□□</span>
 


こんな感じ。処理が滞らないか確かめるタイムライン図を作る。うまくいくので、アが正解で終わり。他のもやっていいけど疲れるので、棄権します。みなさんはやってみて下さい。つまり、なんだかキツネにつままれたような計算式を使わない方法はある。


 
 


[[AP過去問 令和5年度秋期 午前 問16]]前の問題へ


[[AP過去問 令和6年度春期 午前 問16]]前の問題へ
[[AP過去問 令和5年度秋期 午前 問18]]次の問題へ
 
[[AP過去問 令和6年度春期 午前 問18]]次の問題へ


[[AP過去問 令和6年度春期 午前#問題|AP過去問 令和6年度春期 午前 問題]]に戻る
[[AP過去問 令和5年度秋期 午前#問題|AP過去問 令和5年度秋期 午前 問題]]に戻る

2025年4月17日 (木) 23:08時点における最新版

AP過去問 令和5年度秋期 午前 問題に戻る

AP過去問 令和5年度秋期 午前 問16前の問題へ

AP過去問 令和5年度秋期 午前 問18次の問題へ

 

問17(問題文)

 プリエンプティブな優先度ベースのスケジューリングで実行する二つの周期タスクA及びBがある。タスクBが周期内に処理を完了できるタスクA及びBの最大実行時間及び周期の組合せはどれか。ここで、タスクAの方がタスクBより優先度が高く、かつ、タスクAとBの共有資源はなく、タスク切替え時間は考慮しないものとする。また、時間及び周期の単位はミリ秒とする。


AP R5 2Fall AMQ17 Fig1.png

 

回答・解説

【解き方】

タスクBが処理を完了できるかどうかは、応答時間解析(response time analysis)で判断します。

応答時間の式(初期値はタスクBの実行時間から開始):

\require{enclose} \begin{eqnarray} R = C_B + \sum_{i \in hp(B)} \left\lceil \frac{R}{T_i} \right\rceil \cdot C_i \end{eqnarray}

C_B :タスクBの最大実行時間

T_i :タスクAの周期

C_i :タスクAの最大実行時間

\left\lceil \frac{R}{T_i} \right\rceil は天井関数と呼ばれ、シーリング Ti ぶんの Rのように読みます。これは0.8や0.2のような少数を切り上げ、1とする演算です。タスクBより優先度が高いもの(higher priority B)について総和をとることを意味します。この問題ではタスクBに対してはタスクAの1つしかないので総和をとる必要はありません。


ア:

  • タスクA: C_i=2 T_i=4
  • タスクB: C_B=3 T_B=8

初期値: R には仮に C_B を入れ、算出された値を次の R とします。収束するか、 T_B を超えるまで計算します。超えるとタスクが滞りますので、駄目です。 T_B の周期を超えると、次々とBのタスクがやってきて、消化できずに処理が滞ります。

R=3+\left\lceil \frac{3}{4} \right\rceil \cdot 2=3+1\cdot2=5

次:

R=3+\left\lceil \frac{5}{4} \right\rceil \cdot 2=3+2\cdot2=7

次:

R=3+\left\lceil \frac{7}{4} \right\rceil \cdot 2=3+2\cdot2=7 (収束)


→ R=7 \leqq T_B=8  → OK、もう答えは定まったのでこれ以上計算する必要はないですね。


でも、念のため、練習を兼ねて、他の選択肢についても計算をしてみましょう。


イ:

  • タスクA: C_i=3 T_i=6
  • タスクB: C_B=4 T_B=9

初期:

R=4+\left\lceil \frac{4}{6} \right\rceil \cdot 3=4+1\cdot3=7

次:

R=4+\left\lceil \frac{7}{6} \right\rceil \cdot 3=4+2\cdot3=10

次:

R=4+\left\lceil \frac{10}{6} \right\rceil \cdot 3=4+2\cdot3=10 (収束)


→ R=10 \gt T_B=9   R=10 T_B=9 → より大きいので処理が滞る。


ウ:

  • タスクA: C_i=3 T_i=5
  • タスクB: C_B=5 T_B=13

初期:

R=5+\left\lceil \frac{5}{5} \right\rceil \cdot 3=5+1\cdot3=8

次:

R=5+\left\lceil \frac{8}{5} \right\rceil \cdot 3=5+2\cdot3=11

次:

R=5+\left\lceil \frac{11}{5} \right\rceil \cdot 3=5+3\cdot3=14


→ R=14 \gt T_B=13 収束する前に R=14 T_B=13 → より大きくなった。これも処理が滞る。


エ:

  • タスクA: C_i=4 T_i=6
  • タスクB: C_B=5 T_B=15

初期:

R=5+\left\lceil \frac{5}{6} \right\rceil \cdot 4=5+1\cdot4=9

次:

R=5+\left\lceil \frac{9}{6} \right\rceil \cdot 4=5+2\cdot4=13

次:

R=5+\left\lceil \frac{13}{6} \right\rceil \cdot 4=5+3\cdot4=17


→ R=17 \gt T_B=15 収束する前に R=17 T_B=15 → より大きくなった。これも処理が滞る。


 したがって



 が答えです。


 もっと地道な導出方法もあります。方眼紙みたいな奴にウメウメしていく手法です。


 方眼紙に最大処理時間2なら2マス。周期4なら2マスあげて描く

■■□□■■□□■■□□■■□□■■□□■■□□■■□□■■□□

こんな感じ。

 タスクBは最大処理時間2なら3マス。周期8なら処理時間を差し引いた5マスあげて描く

☒☒☒□□□□□☒☒☒□□□□□☒☒☒□□□□□☒☒☒□□□□□こんな感じ。


これを真ん中の方眼紙に埋めていく。

■■□□■■□□■■□□■■□□■■□□■■□□■■□□■■□□

■■☒☒☒■■□■■☒☒☒■■□■■☒☒☒■■□■■☒☒☒■■□

☒☒☒□□□□□☒☒☒□□□□□☒☒☒□□□□□☒☒☒□□□□□


こんな感じ。処理が滞らないか確かめるタイムライン図を作る。うまくいくので、アが正解で終わり。他のもやっていいけど疲れるので、棄権します。みなさんはやってみて下さい。つまり、なんだかキツネにつままれたような計算式を使わない方法はある。

 

AP過去問 令和5年度秋期 午前 問16前の問題へ

AP過去問 令和5年度秋期 午前 問18次の問題へ

AP過去問 令和5年度秋期 午前 問題に戻る