本記事の信頼性
- リアルタイムシステムの研究歴12年.
- 東大教員の時に,英語でOS(Linuxカーネル)の授業.
- 2012年9月~2013年8月にアメリカのノースカロライナ大学チャペルヒル校(UNC)コンピュータサイエンス学部で客員研究員として勤務.C言語でリアルタイムLinuxの研究開発.
- プログラミング歴15年以上,習得している言語: C/C++,Python,Solidity/Vyper,Java,Ruby,Go,Rust,D,HTML/CSS/JS/PHP,MATLAB,Verse(UEFN), Assembler (x64,ARM).
- 東大教員の時に,C++言語で開発した「LLVMコンパイラの拡張」,C言語で開発した独自のリアルタイムOS「Mcube Kernel」をGitHubにオープンソースとして公開.
- 2020年1月~現在はアメリカのノースカロライナ州チャペルヒルにあるGuarantee Happiness LLCのCTOとしてECサイト開発やWeb/SNSマーケティングの業務.2022年6月~現在はアメリカのノースカロライナ州チャペルヒルにあるJapanese Tar Heel, Inc.のCEO兼CTO.
- 最近は自然言語処理AIとイーサリアムに関する有益な情報発信に従事.
- (AI全般を含む)自然言語処理AIの論文の日本語訳や,AIチャットボット(ChatGPT,Auto-GPT,Gemini(旧Bard)など)の記事を50本以上執筆.アメリカのサンフランシスコ(広義のシリコンバレー)の会社でプロンプトエンジニア・マネージャー・Quality Assurance(QA)の業務委託の経験あり.
- (スマートコントラクトのプログラミングを含む)イーサリアムや仮想通貨全般の記事を200本以上執筆.イギリスのロンドンの会社で仮想通貨の英語の記事を日本語に翻訳する業務委託の経験あり.
こういった私から学べます.
リアルタイムシステムの記事一覧はこちらからどうぞ.
リアルタイムシステムで使われているリアルタイムOSは,主にC言語で書かれています.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!
目次
リアルタイムシステムとは
リアルタイムシステムとは,決められた時間(デッドライン)までに処理を完了しなければならない性質をもつシステムのことです.
決められた時間までに処理を完了しなければならない性質を時間制約を満たす,もしくはリアルタイム性を保証すると表現します.
リアルタイムは直訳すると実時間なので,リアルタイムシステムを実時間システムと呼ぶこともあります.
私は実時間システムではなく,リアルタイムシステムと表記する方を好みますので,実時間システムのこともリアルタイムシステムと呼びます.
「リアルタイムシステム 千代浩之」や「Real-Time Systems Hiroyuki Chishiro」と検索するとこれまでの研究成果が出てきます.
※よくリアルタイムをできるだけ速くという意味で使う方はいますが,学術的には間違いです.ハイパーフォマンス(高性能)ではありません.
リアルタイムシステムの例として,ゲーム機,ロボット,スマホ等が挙げられます.
ゲーム機とロボットを例にリアルタイムシステムを説明していきます.
ゲーム機
これまでにあなたはゲーム機で遊んだことがありますよね.
私もよくゲーム機でドラクエやFF,マリオ等をプレイしていました.
最近はコロナの影響でNintendo Switchのどうぶつの森がブームになりましたね.
話題のプレイステーション5(PS5)は2020年10月12日に発売されました.
なぜゲーム機がリアルタイムシステムなのかというと,マルチメディア処理を実行するからです.
マルチメディア処理の例として,30FPS(Frame Per Second)の動画像処理の仕組みを説明します.
30FPSは1秒間に30フレームを処理するという意味ので,1フレーム当たりの処理時間は33ms(小数点以下は省略)となります.
つまり,33ms周期毎にフレームを完了しなくてはならないと言う意味です.
この周期処理をリアルタイムシステムでは周期タスク(Periodic Task)と呼びます.
また,周期タスクの周期毎の実行処理(インスタンス)のことをジョブと呼びます.
下の図は33ms周期で動画像を処理する周期タスクが実行する様子です.正常に処理できるとフレーム毎に車の絵が表示されます.
ここで,図の下部にあるタイムチャートのリリース(上矢印)は周期タスクの各々のジョブの実行開始時刻,デッドライン(下矢印)は各々のジョブの完了しなければならない時刻を表します.
赤い四角は周期タスクの各々のジョブが実行している時間を表します.
もし33ms以内にジョブの実行が完了できなくてデッドラインをミスした場合は,そのフレーム(下の図だと2番目のフレーム)が表示されない問題が発生します.
周期タスクの2番目のジョブがデッドラインに間に合うギリギリのタイミングになってから実行したら,思ったより最悪実行時間が長くてデッドラインミスをした例になります.
みなさんも宿題を締め切りに間に合うギリギリのタイミングにやろうとしたら,思ったより時間がかかって間に合わなかった経験があると思います.
つまり,余裕を持ってタスクも宿題も実行した方が良いということですね.
このように,タスクには周期,デッドラインと最悪実行時間の3つのパラメータを持ちます(この例だと周期とデッドラインは同じ33ms).
タスクの最悪実行時間を考慮して実行するタイミングを管理しないとデッドラインミスが発生してしまい,動画像処理だと正常にフレームが表示されなくなってしまいます.
タスクをどのような順序で実行すればリアルタイム性を保証できるのかを数学的に証明したリアルタイムスケジューリングという手法が提案されました.
また,リアルタイムスケジューリングを(主にC/C++言語で)実装したリアルタイムOSの研究開発が広く行われています.
リアルタイムスケジューリングやリアルタイムOSはリアルタイムシステムを説明する上で大事な用語ですが,説明すると長くなるので次回以降に説明します.
ロボット
次に,ロボットを動かす上で必要なモータ制御を例として説明します.
モータ制御の周期は1msで動作する場合を考えます.モータ制御がデッドラインミスをすると,ロボットが転倒する等のように,システムに致命的なエラーが発生します.
このようにデッドラインミスが許されないシステムをハードリアルタイムシステムと呼びます.
下の図はモータ制御の周期タスクがデッドラインミスをしないで実行している例になります.
また,タイムチャートのところにジッタという新しい用語が出てきました.
ジッタはジョブの実行間隔のゆらぎを表します.
モータ制御はジッタを考慮する周期タスクで,デッドラインミスをしなければ正常に動作するとは限りません.
ジョブの実行間隔が一定でないと動作が不安定になり,転倒してしまう恐れがあります.
モータ制御はデッドラインミスをしないことと,ジッタを出来る限り一定に保つことが必要になります(下図が理想).
リアルタイムシステムと他の用語との比較
リアルタイムシステムとは組込みリアルタイムシステム(※組込みシステムとほぼ同義)やIoTとよく似ています.
組込みリアルタイムシステムは,リアルタイムシステムの時間制約だけでなく他のコンピュータ資源(メモリ,消費電力,ネットワーク等)の制約があるシステムのことを言います.
例えば,スマホはバッテリで動作するので消費電力に制約があります.使うならできるだけ消費電力を下げてバッテリが長持ちした方が良いですよね.
IoTはInternet of Thingsの略で,直訳すると「モノのインターネット」という意味になります.
IoTはインターネットにつながるモノのことを言いますので,インターネットが必須になります.
IoTは元東大教授の坂村健が提案した「ユビキタス(どこでもコンピュータ)」の後継となる用語です.
2009年にケビン・アシュトンがRFIDの論文誌に「That 'Internet of Things' Thing」というタイトルで掲載した論文がIoTの起源と言われています.
IoTとユビキタスは具体的に何が違うのかというと,特に大きな違いはないです.意味のない新しい用語「バズワード」です.
※研究者が予算獲得のために「バズワード」を作り出すことは,よくある話です.
リアルタイムシステム,組込みリアルタイムシステム,IoTをまとめると以下の表になります.どれも似ていますが,少しずつ違いますね.
項目 | リアルタイムシステム | 組込みリアルタイムシステム | IoT |
---|---|---|---|
コンピュータの資源制約 | 時間 | 時間,メモリ,消費電力,ネットワーク等 | 時間,メモリ,消費電力,ネットワーク等 |
インターネット | 必須ではない | 必須ではない | 必須 |
※組込みリアルタイムシステムの「組込み」を「組み込み」と書いている方を見かけますが,正しくは「組込み」ですので注意して下さい.
東京大学の学生に「組込み」と書くことを教えたら,論文誌などの学術的な文献ではすべて「組込み」の書き方になっていて驚いたと言っていました.
「組込み」と正しく書いているかどうかで専門家かどうかがわかりますね...
リアルタイムシステムと汎用システムの比較は以下になります.
今後は以下の内容の詳細な技術を深掘りしていきます.
項目 | リアルタイムシステム | 汎用システム |
---|---|---|
システム例 | ロケット(宇宙機),ロボット,自動車,携帯電話,ゲーム機 | パソコン,クラウドサーバ |
時間制約 | あり(正確には厳しい) | なし(正確には緩い) |
タスクの実行方針 | デッドライン重視 | スループット重視 |
ジッタ | 重要 | あまり重要でない |
電圧周波数制御 | デッドラインまで余裕時間があれば低周波数・低電圧に設定 | デッドラインに関係なく周波数や電圧を調整 |
計算精度の向上 | デッドラインまで余裕時間があれば向上可能 | デッドラインに関係なく向上可能 |
まとめ
今回はリアルタイムシステムを紹介しました.リアルタイムシステムは,ゲーム機やロボット,スマホ等と身の回りでよく使われていることがわかりました.
リアルタイムシステムは主に周期タスクが動作し,周期,デッドライン,最悪実行時間の3つのパラメータを持つことを覚えましょう.
リアルタイムシステムで使われているリアルタイムOSは,主にC言語で書かれています.
私にC言語の無料相談をしたいあなたは,公式LINE「ChishiroのC言語」の友だち追加をお願い致します.
私のキャパシティもあり,一定数に達したら終了しますので,今すぐ追加しましょう!
独学が難しいあなたは,元東大教員がおすすめするC言語を学べるオンラインプログラミングスクール5社で自分に合うスクールを見つけましょう.後悔はさせません!
次回はこちらからどうぞ.