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

提供:yonewiki
編集の要約なし
 
(同じ利用者による、間の18版が非表示)
1行目: 1行目:
<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;
}
.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過去問 令和5年度秋期 午前#問題|AP過去問 令和5年度秋期 午前 問題]]に戻る


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;">\( C_B \)</span> :タスクBの最大実行時間
 
<span style="font-size: 0.9rem;">\( T_i \)</span>:タスクAの周期
 
<span style="font-size: 0.9rem;">\( C_i \)</span> :タスクAの最大実行時間
 
<span style="font-size: 0.9rem;">\( \left\lceil \frac{R}{T_i} \right\rceil \)</span>は天井関数と呼ばれ、シーリング Ti ぶんの Rのように読みます。これは0.8や0.2のような少数を切り上げ、1とする演算です。タスクBより優先度が高いもの(higher priority B)について総和をとることを意味します。この問題ではタスクBに対してはタスクAの1つしかないので総和をとる必要はありません。
 
 
ア:
 
*タスクA:<span style="font-size: 0.9rem;">\( C_i=2 \)</span>、<span style="font-size: 0.9rem;">\( T_i=4 \)</span>
 
*タスクB:<span style="font-size: 0.9rem;">\( C_B=3 \)</span>、<span style="font-size: 0.9rem;">\( T_B=8 \)</span>
 
初期値:<span style="font-size: 0.9rem;">\( R \)</span>には仮に<span style="font-size: 0.9rem;">\( C_B \)</span>を入れ、算出された値を次の<span style="font-size: 0.9rem;">\( R \)</span>とします。収束するか、<span style="font-size: 0.9rem;">\( T_B \)</span>を超えるまで計算します。超えるとタスクが滞りますので、駄目です。<span style="font-size: 0.9rem;">\( T_B \)</span>の周期を超えると、次々とBのタスクがやってきて、消化できずに処理が滞ります。
 
<span style="font-size: 0.9rem;">\( R=3+\left\lceil \frac{3}{4} \right\rceil \cdot 2=3+1\cdot2=5 \)</span>
 
次:
 
<span style="font-size: 0.9rem;">\( R=3+\left\lceil \frac{5}{4} \right\rceil \cdot 2=3+2\cdot2=7 \)</span>
 
次:
 
<span style="font-size: 0.9rem;">\( R=3+\left\lceil \frac{7}{4} \right\rceil \cdot 2=3+2\cdot2=7 \)</span>(収束)
 
 
<span style="font-size: 0.9rem;">\( → R=7 \leqq T_B=8 \)</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過去問 令和5年度秋期 午前 問16]]前の問題へ

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年度秋期 午前 問題に戻る