「AP過去問 令和5年度秋期 午前 問17」の版間の差分
編集の要約なし |
(→回答・解説) |
||
(同じ利用者による、間の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;">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+⌈34⌉⋅2=3+1⋅2=5</span> | |||
次: | |||
<span style="font-size: 0.9rem;">R=3+⌈54⌉⋅2=3+2⋅2=7</span> | |||
次: | |||
<span style="font-size: 0.9rem;">R=3+⌈74⌉⋅2=3+2⋅2=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過去問 令和5年度秋期 午前 問16]]前の問題へ |
2025年4月17日 (木) 23:08時点における最新版
AP過去問 令和5年度秋期 午前 問16前の問題へ
AP過去問 令和5年度秋期 午前 問18次の問題へ
問17(問題文)
プリエンプティブな優先度ベースのスケジューリングで実行する二つの周期タスクA及びBがある。タスクBが周期内に処理を完了できるタスクA及びBの最大実行時間及び周期の組合せはどれか。ここで、タスクAの方がタスクBより優先度が高く、かつ、タスクAとBの共有資源はなく、タスク切替え時間は考慮しないものとする。また、時間及び周期の単位はミリ秒とする。
回答・解説
【解き方】
タスク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次の問題へ