南角先生の組込み講座

【設計しながら学ぶRTOSの基本編】第7回 RTOS全体構造

こんにちは、南角です。
まだまだ書ききれていないことは多いのですが、研究が少し忙しくなってきたので、連載は今回を最後に一旦お休みをいただきたいと思います。

先月号で【今回までで、不十分ながらRTOS内部の基本的な部分の説明を終えましたが、説明がばらばらになってしまいました。次回で今までの説明をまとめて全体像を組み立ててみたいと思います。
また今まで、ほとんど触れてこなかったマルチコアの特にコア間の排他制御に関して述べてみたいと思います。】と述べました。今回RTOS全体のまとめは行いますが、マルチコアなどに関しては次のシリーズでということでお許しいただきたいと思います、申し訳ありません。

さて次にRTOS全体の図を載せます。

ただこの図ではドライバがRTOSの一部のように見えますがそうではありません。
ドライバはRTOSから頼まれて標準IO(open、 close、read、 write、 ioctl)などを提供していますが、これらはいわばコールバックに過ぎません。またドライバは通常、タスクから呼び出されるこれらコールバック群と割り込み処理から構成され、割り込み処理はRTOSから頼まれて処理の最後の部分でスケジューラを呼び出します。これもRTOSから頼まれてRTOSのスケジューラを呼び出しているにすぎません。
ただしVxWorksにおいてはintConnectを使用して割り込み処理を登録するためスケジューラの呼出しは自動的に行われ、ドライバを開発している人でさえ、そのことをあまり意識していません。
つまり言いたいことはドライバはRTOSとは独立しているということです。

この構造を明確にして、前の図を簡略化すると次のようになります。

通常のRTOSの解説の場合、上の図のタスク+システムコール処理部+タスクスケジューリング処理部の話が中心になりますが、この連載では一貫してその部分は無視して上記構造について書いてきたつもりです。

RTOSもドライバも割り込みによって独自に起動されます。
当然それらの間の割り込み優先度も考えなければいけませんし、システムのレディキューなどはRTOSもドライバも操作する(たとえばsemGive)可能性があるわけですから、それらの間の排他制御も問題になります。
上記の排他制御にセマフォが使えないことも説明してきた通りです。

連載で話してきたことは、ほとんどがこの図のどこかの部分に関連すると思います。

この図のどこの部分の話なのかは宿題にします。
連載再開の時には最初にその解説から始めますから、それまで考えておいてください。

今回は上記の図をもって解説に代えたいと思います。

では、連載再開までしばし、ごきげんよう。

設計しながら学ぶRTOSの基本編 第7回 おわり