エッジコンピューティングの逆襲 特集
連載
» 2021年12月27日 10時00分 公開

Rustをフル活用したリアルタイムOS「Tock」の特異性リアルタイムOS列伝(18)(1/3 ページ)

IoT(モノのインターネット)市場が拡大する中で、エッジ側の機器制御で重要な役割を果たすことが期待されているリアルタイムOS(RTOS)について解説する本連載。第18回は、カーネルやドライバをRustで記述することで、RTOSのレイテンシや安全性の問題をドラスチックにクリアした「Tock」を紹介する。

[大原雄介,MONOist]

 リアルタイムOS列伝、今回のお題は「Tock」である。開発したのは現在プリンストン大学の助教授で博士のAmit Levy氏である。このLevy氏、助教授業(?)の傍らで2011年にMemCachierという会社を創業しており、現在もここのCEOを務めている。この会社が扱っているのはキャッシュサーバのmemcachedを改良した製品だが、こちらとTockは関係がない。

⇒連載記事「リアルタイムOS列伝」バックナンバー

ms以内のレイテンシと安全性をRTOSで両立するにはどうすればいいのか

 Tockそのものは、Levy氏がスタンフォード大学でComputer Scienceの博士号を取得するに当たっての研究テーマの一つだったようで、これに関しての論文も幾つか出ている。ただの研究テーマで終わりにせずに、これを一般に使える形で広く公開しており、その“特異性”もあっていろいろ使われているようだ。

 この“特異性”については後で説明するとして、そもそもTockは、組み込み向けではあるが、Resource Constrained Device(リソースが制限されたデバイス)での動作を目的にしつつ、レイテンシがms(ミリ秒)以内で収まることと、さらにSafe(安全)であることが開発の目的となっている(図1)。

図1 図1 普通はメモリのフットプリントやレイテンシ、消費電力などが中心になるのだが、“central focus on isolating untrusted components”と言い切っているあたりが独特である[クリックで拡大]

 既存のリアルタイムOS(RTOS)に関してのLevy氏の見解がこちら(図2)。当たり前であるが、レイテンシやメモリのフットプリントを考えた場合、カーネルやドライバ、アプリケーションを完全に分離するのは普通は難しい。これを真剣にやろうとすると、ArmがCCA(Confidential Compute Architecture)のコンポーネントとして提供した「Realms」のような仕組みが必要になるからだ。さすがにこれをResource Constrained Deviceでやるのは荷が重い。

図2 図2 いやまぁAEDのプログラミングをRuny on Railsでやろうという人はさすがに居ないと思うが……[クリックで拡大]

 まぁそこまで厳密にやらないにしても、RTOSにおける分離のための手法として一般的に利用されるのはプロセス(Process)の実装である。それぞれのアプリケーションをプロセス空間に閉じ込める(MCUの場合でいえば、MPU:Memory Protection Unitを利用して、プロセスごとに物理的にメモリアドレスを分離することができる)ようにすれば、一応の分離はできるし、また並列動作も実行できることになる(図3)。

図3 図3 ここでThreadにすると、動作に必要なリソースを共有してしまうのでNGである[クリックで拡大]

 ただし現実的には、(名称はともかく)実態としてのプロセスを実装しているケースは少ない。理由は簡単で、リソース(特にメモリ)を食うからだ(図4)。数MBとは言わないまでも、数百KBのSRAMが使えないとプロセスの実装はかなり厳しいし、ましてや図1にあるように16KBで真面目にプロセスを実装すると、多分1プロセスでメモリが破綻する。

図4 図4 IPC(Inter-Process Communication)も、ないとものすごく困るがプロセス分路のためには結構工夫する必要があり、これもメモリリソース圧迫に貢献(?)する[クリックで拡大]

 この問題を解決するアイデアの一つが並列動作を諦めることだ。ただし、今度はレイテンシの問題で引っ掛かることになる。例えば、送受信を行うようなプロセスを、ISR(割り込みハンドラ)による割り込みなどを使わずに記述するとこんな格好になる(図5)。もちろん、この方式で要件的に十分というニーズはあるのだろうが、少なくともLevy氏のお気には召さなかったようだ。

図5 図5 ISRを使えばもちろん何とかなるのだが、今度は分離の観点で怪しいことになる。これをちゃんとしようとするとプロセスみたいな構造が必要になり……ということで元に戻る[クリックで拡大]
       1|2|3 次のページへ

Copyright © ITmedia, Inc. All Rights Reserved.