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

提供:yonewiki
 
(同じ利用者による、間の13版が非表示)
71行目: 71行目:
=='''回答・解説'''==
=='''回答・解説'''==
【解き方】
【解き方】
タスクBが処理を完了できるかどうかは、'''応答時間解析(response time analysis)'''で判断します。
タスクBが処理を完了できるかどうかは、'''応答時間解析(response time analysis)'''で判断します。


90行目: 91行目:


<span style="font-size: 0.9rem;">Ci</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:C=2, T=4


タスクB:C=3, T=8
*タスク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;">\( 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;">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+342=3+12=5</span>
104行目: 108行目:


<span style="font-size: 0.9rem;">R=3+542=3+22=7</span>
<span style="font-size: 0.9rem;">R=3+542=3+22=7</span>


次:
次:
110行目: 113行目:
<span style="font-size: 0.9rem;">R=3+742=3+22=7</span>(収束)
<span style="font-size: 0.9rem;">R=3+742=3+22=7</span>(収束)


<span style="font-size: 0.9rem;">R=7TB=8</span>→ OK
 
<span style="font-size: 0.9rem;">R=7TB=8</span> → OK、もう答えは定まったのでこれ以上計算する必要はないですね。
 
 
でも、念のため、練習を兼ねて、他の選択肢についても計算をしてみましょう。
 


イ:
イ:
タスクA:C=3, T=6


タスクB:C=4, T=9
*タスクA:<span style="font-size: 0.9rem;">Ci=3</span>、<span style="font-size: 0.9rem;">Ti=6</span>
 
*タスクB:<span style="font-size: 0.9rem;">\( C_B=4 \)</span>、<span style="font-size: 0.9rem;">\( T_B=9 \)</span>


初期:
初期:
𝑅=4+⌈46⌉⋅3=4+1⋅3=7
 
R=4+⌈ 64 ⌉⋅3=4+1⋅3=7
<span style="font-size: 0.9rem;">\( R=4+\left\lceil \frac{4}{6} \right\rceil \cdot 3=4+1\cdot3=7 \)</span>


次:
次:
𝑅=4+⌈76⌉⋅3=4+2⋅3=10
 
R=4+⌈ 67 ⌉⋅3=4+2⋅3=10
<span style="font-size: 0.9rem;">\( R=4+\left\lceil \frac{7}{6} \right\rceil \cdot 3=4+2\cdot3=10 \)</span>


次:
次:
𝑅=4+⌈106⌉⋅3=4+2⋅3=10
R=4+⌈ 610 ⌉⋅3=4+2⋅3=10(収束)


→  
<span style="font-size: 0.9rem;">R=4+1063=4+23=10</span>(収束)
𝑅=10>𝑇𝐵=9R=10>T B =9 → NG
 
 
<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:C=3, T=5


タスクB:C=5, T=13
*タスクA:<span style="font-size: 0.9rem;">Ci=3</span>、<span style="font-size: 0.9rem;">\( T_i=5 \)</span>
 
*タスクB:<span style="font-size: 0.9rem;">CB=5</span>、<span style="font-size: 0.9rem;">\( T_B=13 \)</span>


初期:
初期:
𝑅=5+⌈55⌉・3=5+1⋅3=8
 
R=5+⌈ 55​ ⌉⋅3=5+1⋅3=8
<span style="font-size: 0.9rem;">\( R=5+\left\lceil \frac{5}{5} \right\rceil \cdot 3=5+1\cdot3=8 \)</span>


次:
次:
𝑅=5+⌈85⌉⋅3=5+2⋅3=11
 
R=5+⌈ 58​ ⌉⋅3=5+2⋅3=11
<span style="font-size: 0.9rem;">\( R=5+\left\lceil \frac{8}{5} \right\rceil \cdot 3=5+2\cdot3=11 \)</span>


次:
次:
𝑅=5+⌈115⌉⋅3=5+3⋅3=14
R=5+⌈ 511​ ⌉⋅3=5+3⋅3=14


→  
<span style="font-size: 0.9rem;">R=5+1153=5+33=14</span>
𝑅=14>𝑇𝐵=13R=14>T B =13 → NG
 
 
<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:C=4, T=6


タスクB:C=5, T=15
*タスクA:<span style="font-size: 0.9rem;">Ci=4</span>、<span style="font-size: 0.9rem;">Ti=6</span>
 
*タスクB:<span style="font-size: 0.9rem;">\( C_B=5 \)</span>、<span style="font-size: 0.9rem;">\( T_B=15 \)</span>


初期:
初期:
𝑅=5+⌈56⌉⋅4=5+1⋅4=9
 
R=5+⌈ 65 ⌉⋅4=5+1⋅4=9
<span style="font-size: 0.9rem;">\( R=5+\left\lceil \frac{5}{6} \right\rceil \cdot 4=5+1\cdot4=9 \)</span>


次:
次:
𝑅=5+⌈96⌉⋅4=5+2⋅4=13
 
R=5+⌈ 69 ⌉⋅4=5+2⋅4=13
<span style="font-size: 0.9rem;">\( R=5+\left\lceil \frac{9}{6} \right\rceil \cdot 4=5+2\cdot4=13 \)</span>


次:
次:
𝑅=5+⌈136⌉⋅4=5+3⋅4=17
R=5+⌈ 613 ⌉⋅4=5+3⋅4=17


→  
<span style="font-size: 0.9rem;">R=5+1364=5+34=17</span>
𝑅=17>𝑇𝐵=15R=17>T B =15 → NG
 
 
<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の実行時間から開始):

R=CB+ihp(B)RTiCi

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

Ti:タスクAの周期

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

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


ア:

  • タスクA:Ci=2Ti=4
  • タスクB:CB=3TB=8

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

R=3+342=3+12=5

次:

R=3+542=3+22=7

次:

R=3+742=3+22=7(収束)


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


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


イ:

  • タスクA:Ci=3Ti=6
  • タスクB:CB=4TB=9

初期:

R=4+463=4+13=7

次:

R=4+763=4+23=10

次:

R=4+1063=4+23=10(収束)


R=10>TB=9 R=10TB=9→ より大きいので処理が滞る。


ウ:

  • タスクA:Ci=3Ti=5
  • タスクB:CB=5TB=13

初期:

R=5+553=5+13=8

次:

R=5+853=5+23=11

次:

R=5+1153=5+33=14


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


エ:

  • タスクA:Ci=4Ti=6
  • タスクB:CB=5TB=15

初期:

R=5+564=5+14=9

次:

R=5+964=5+24=13

次:

R=5+1364=5+34=17


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


 したがって



 が答えです。


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


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

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

こんな感じ。

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

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


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

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

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

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


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

 

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

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

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