RM と EDF を awk で実装する

代表的なハードリアルタイムスケジューリングアルゴリズムである RM ( Rate Monotonic ) と EDF ( Earliest Deadline First ) を awk で実装してみた。

https://sourceforge.net/projects/rmvsedf/
git clone git://git.code.sf.net/p/rmvsedf/code rmvsedf-code

スケジューリングの勉強をしている方なら経験があるかもわからないが、意外と良いタスクセットの例を作るのが難しい。方眼紙やエクセルでスケジューリングの例を作っては、「意図通りに振る舞ってくれなかった」「実はスケジュール可能じゃなかった」と気づくことが多く、時間の無駄である。


$ cat ./samples/task_set2.txt
# RM ... miss
# EDF ... schedulable

t1 = { 2, 5 }
t2 = { 4, 7 }

こんなタスクセットに対して、


$ awk -f ./sched.awk ./samples/task_set2.txt | awk -f show.awk
t1 = { 2, 5 }
t2 = { 4, 7 }
Utilization U = 0.971429

t1 : |X X _ _ _|X X _ _ _|X X _ _ _|X X _ _ _|X X _ _ _|X X _ _ _|X X _ _ _|X _ _
t2 : |_ _ X X X _ _|X X X _ _ X _|X _ _ X X X _|_ X X X _ _ X|X X _ _ X X _|_ _ _
: ^
: |
: +--- DEADLINE MISS at period 7

RM だとスケジュール出来ないが、


hal@cobich-VAIO ~/src/rmvsedf-code
$ awk -f ./sched.awk -v edf=1 ./samples/task_set2.txt | awk -f show.awk
t1 = { 2, 5 }
t2 = { 4, 7 }
Utilization U = 0.971429

t1 : |X X _ _ _|_ X X _ _|_ _ X X _|X X _ _ _|X X _ _ _|_ X X _ _|X X _ _ _|X _
t2 : |_ _ X X X X _|_ X X X X _ _|X _ _ X X X _|_ X X X X _ _|X X _ _ X X _|_ _

EDF だとスケジュール可能。


この例は Buttazzo の Hard Real-Time Computing Systems 3rd Edition の Figure-4.13 から拝借した。

この本は RM、EDF だけでなく、サーバアルゴリズムも(静的優先度、動的優先度別に)まとめられている良書である。