イベント通知

IRQ周りの整理は、ドライバ周りの実装の仕方の標準化しようという目論見が多少あって行ったものだ。
ドライバを登録するのにカーネルの再構築が必要というのはやはり格好が悪いので。


割込み発生⇒割り込み処理⇒復帰 という一連の流れで「割込み処理」の部分でイベント通知が必要になる。
現在Monaカーネルにはイベント通知の仕組みとして、メッセージ到着イベントがある。
使い方は単純でメッセージreceive()を呼んだ際にメッセージボックスが空の場合、そのスレッドがブロックされる。
で、メッセージが到着するとスレッドが起こされるのである。
スレッドを起こすのはスケジューラにお願いする。


ここで問題なのがMonaのスケジューラは単純ラウンドロビンスケジューラであることである。
つまり起こしたスレッドを実行キューのどこに配置するべきかの明確な基準がないのだ。


重要な割込み処理だったらキューの先頭へ、そこまで重要でなければキューのお尻にそのスレッドをつっこっみたいところだ。
つまり、優先順位つきのスケジューラを作るときがきたっぽい!!!
以前一度作ったことがあったのだが別のバグで悩んだときに、バグ特定のために泣く泣くお蔵入りさせたのだった。


というわけで、優先順位つきスケジューラについていろいろと調べようと思う。
こういうのはオリジナリティを出すのは後にして枯れた、基本的でメジャーな実装をしたほうが良いと思うので
よい資料があったらぜひ教えてください。m(__)m