art-linuxについて

#なぜart-linux

　なぜart-linuxなのか。これを読んでくれている人々もそう疑問に感じているであろう。広義的に言うと、「ロボットで使われるリアルタイムOSの一種」である。ただ、リアルタイムOSは数多く、日本の「トロン」が一番有名なリアルタイムOSであろう。それがあるのになぜart-linuxかというと、日本で開発が進められているLinuxOSで、ロボットの制御からもしかしたら人工衛星でも使えるOSだから取り上げる。
　夢があっていいじゃないか。ロボットから人工衛星まで使えるOSなんて。
　というわけで、「産業技術総合研究所」のサイトを噛み砕いてart-linuxについて説明していくぞ。

#開発の背景


　最近は組み込み機器が高い機能を持つようになり、ネットワーク化、情報化が進められてきている。例えば家電、産業機器、プラント制御機器、輸送機器、介護福祉機器に至るまで幅の広い利用が考えられる。平たくいうとIOTだ。ウェアラブル端末とか、みんなが仕事で使っている専用の端末などがもっともっと必要になっていく
　だから、組み込み機器ではシステムの制御性能に関わるリアルタイム性とネットワークに関わる汎用性を向上させる必要がある。リアルタイムに動いて、ネットに繋いでもさくさく動くようにしなければならない。そして、このようなシステムに障害が発生すると、システムの複雑化と高機能化に合わせて、その原因も複雑化し影響が大きくなる。
　そこでシステムの障害が限られた部分に集中し、システムを止めている時間を少なくし、使い続ける時間を伸ばしす必要がある。つまり、どこか一部が壊れても使い続けることができるようにした。

#研究の内容

　研究の内容について話す前にいくつか、用語を説明しなくてはならない。まあ、技術的にこういうことなのだろうとわかっていただくだけで結構だ。

　**SMPについて**
　SMPとは、複数のCPUと複数メモリから構成されるシステムのことだ。例えば、複数のプロセスを複数のCPUで計算しようとする。すると、OSはメモリにあるプロセスをすべてCPUに均等に仕事を割り振って仕事をさせようとする。すると、ひとつのCPUで動かそうとしている時よりも早く処理ができる。つまり、複数のCPUに上手く仕事を割り振ったら高速化できる技術だと理解していい。

　**AMPについて**

  AMPは、SMP同様、複数のメモリから構成されるシステムのことだ。先ほどと同様に、複数のプロセスを複数のCPUで計算しようとする。すると、予めプロセスごとに使うCPUを割り振って動作をさせなければならない。こうすると、人間がメモリやらCPUやらのリソースをコントロールして最適化を図り、速く処理が可能になる技術である。つまり、人間の手で操作して速くさせると考えて間違いない。

　**割り込みハンドラ**

　I/Oデバイスなどのハードウェアからの処理の要求をする信号を「割り込み」と呼ばれている。この割り込みを処理するためにOSは割り込みハンドラと呼ばれる処理を実装し、ハードウェアから要求された処理を実装する。今の計算機では一秒間に数十万回の割り込みを処理する必要がある。割り込み処理はリアルタイムOSでは入力が終わってからまた普通の計算に戻るまでに処理時間の誤差が生じるわけです。通常は1u秒かかっていたのが入力のせいで＋1u秒かかったら次の処理に＋1u秒の誤差が生じる。これが積もり積もると１秒の誤差が生じることになる。そのため、art-linuxでは割り込みハンドラを常にするのではなく周期的に行う動作として機能している。
　
　**プライオリティインヘリタンス機構**


　計算機のリアルタイム処理において、あるリソースを低い優先度のタスクが使っていて、高い優先度のタスクが割り込めない現象が起きてしまう。これを「優先度逆転」と呼ぶ。これはリアルタイム処理において、有害なジッター（信号のゆらぎ、つまりノイズの・ようなもの）が発生する。そこで高い優先度のタスクを割りこませるための方法として、プライオリティーインヘリタンスが実装された。高い優先度のタスクをブロックされていることを検知すると、高い優先度のタスクを高い優先度に格上げして、優先的にブロックを解除するまでの処理を行い、ブロックを解除する。すると、滝していた優先度の高いタスクを実行する。これにより待機時間を最小化する手法である。art-linuxではカーネル内に各種ロック機構をこのプライオリティインヘリタンス機能を持つものに置き換えることによって、優先度逆転を解消している。


　そして、art-linuxに戻るが、これはSMPとAMPを使った技術を使っている。つまり、すべてをSMP、AMPにするのではなく、SMPにするところとAMPにするところをプロセスごとに分けられる設計になっているのだ。
　そして、割り込みハンドラの周期実行、プライオリティインヘリタンス機構の導入により、最小のジッターと最短の周期実行性能を実現出来た。

図1
![alt](http://www.aist.go.jp/Portals/0/resource_images/aist_j/press_release/pr2013/pr20130307/fig_1.png)

図１で表されているのart-linuxで実装されたシステムです。これはCPUとして８個のコアがあるものをあげていて、うち３つがSMP-linuxで動作し、それ以外のコアはそれぞれ独立したリアルタイムlinuxで動作している。

　青枠で示すP0~P2のプロセッサは非リアルタイムlinuxでは、ディスクやグラフィックス、ネットワークなどのデバイスが割り当てられていて、ユーザーインターフェイスや通常アプリを処理する。

　緑枠を示すP3のプロセッサーに割当られてられたリアルタイムlinuxはリアルタイムの監視系として動作して、ログ用のディスクや外部への通信用のネットワークデバイスを割り当てられている。本サブシステムは他のサブシステムの名部状態を共有メモリを通じて監視し（他のサブシステムは自分で共有メモリに状態を買いだす必要がある）、ログを残すとともに、他のシステムの以上をリアルタイムで検知し、非常系に知らせる機能を果たす。

　赤枠で示されるP4のプロセッサーで作動するリアルタイムlinuxでは制御すｒために必要なI/Oデバイスを割り当てている。他のオーバーヘッドがなく、制御のみに専念することができるため、低いジッターによる高いリアルタイム制御性能や、リソースの分配の簡単かによるシステム設計の容易さと障害の起きにくさが期待できる。

　紫の枠で示されるP5のプロセッサで独立にI/Oデバイスを割当られている。システムの以上を検知すると、I/Oデバイスを通じて緊急停止などの安全動作を行う。

　橙枠で示すP6～P7のプロセッサーが割り当てられたリアルタイムLinuxは二重系（一方で障害が起こった時に行うペイルセーフのこと）として動作する。独立にI/Oデバイスを割り当てられており、両側で同じ処理を行うことでシステムの信頼性を確保する。

#最後に

　いかがだったでしょうか？一応説明しやすいようにわかりやすい言葉を選んで書いたつもりではあります。これを読んで、art-linuxを触ってくれたら幸いです。

インストールの仕方は後日書くことにします。そちらも分かり次第記事にしていこうと考えています。

では、また次の機会までごきげんよう。

#告知

　８/15にlispもくもく会を開きます。午後の７時から開きますので是非足をお運びください。

　https://connpass.com/event/61460/