狠狠撸

狠狠撸Share a Scribd company logo
リアルタイムOS の必要性と
TOPPERS/SSP の紹介
? この資料は,数年前に某所で開催したセミナーの
資料の焼き直しです.
– 正直,話が古い部分もあると思います
? TOPPERS/SSPカーネルの紹介
– SSPカーネルとはどのようなものか
? 対象
– SSPカーネルに興味のある方
– 前提:C言語の基礎知識
? 内容
– 前半:リアルタイムOSとは
– 後半:SSPカーネルとは(使い方は別スライドでまた)
この資料について
2
? TOPPERS/SSPカーネルとは
– TOPPERSプロジェクトで公開されている
– 小規模組込みシステム向け
– リアルタイムOS
です.
? SSPカーネルの説明に入る前に,簡単に
背景を説明します.
– 組込みシステムとは,リアルタイムOSとは
– TOPPERSプロジェクトとは
TOPPERS/SSP とは
3
? 参考文献「12ステップで作
る 組込みOS自作入門」
– 初学者におすすめ
– この本があればこのスライド
のRTOSの説明いらないか
も...
http://kozos.jp/books/makeos/
そのまえに
4
前提とする組込みシステム
5
組込みシステム
? 各種の機器に組み込んで, その制御を行う
コンピュータシステム
– 以前では,パソコンやワークステーションで
はないコンピュータシステムはほぼ該当
* ぶっちゃけ,範囲広すぎ
– 分類の難しいシステムもある(携帯電話とか)
? 専用化したコンピュータシステム
– この意味だと,測定器につながれたパソコン
も組込みシステムになる
6
? 「TOPPERS開発成果物の採用事例」より
http://www.toppers.jp/applications.html
たとえば
デジタルピアノ
CASIO PX-850BK
HDDデュプリケータ
株式会社ワイ?イー?シー
Demi PG520
ロケット
JAXA H-IIA型
ジェルジェットプリンタ
リコー IPSiO GX e3300
7
? コンピュータ内蔵,プログラム制御
– プログラムでシステムを高付加価値化
– なにがしか実世界との接点がある
? 特定の機能だけをもつ専用機
いずれも
8
? システムにより(ハード?ソフト)構成が異
なる.
? 機能は動作中に変化しない.
– 目的に専用化
? 時間制約に従う (リアルタイム性をもつ)
– 動作環境や制御対象に合わせて動作できる
* 単純に「速い」ということではなくて
– 動けない場合でもひどい結果にならない
組込みシステムの特徴
9
たとえば...
– 実行開始のタイミング
* 周期的,非周期的
– デッドライン(締め切り)
* ハード,ソフト
* ファーム(firm)
– ジッタ(タイミングの揺れ)
* 絶対的,相対的
とか...
(ちょっと脱線)時間制約って?
時間
T T T T
T1 T2 T3 T4
d
Δt
Δt
10
? システム機能を実現するいくつかの「ア
プリケーションプログラム」からなる.
– たとえば
? プログラム構成はシステム毎に異なり,
設計時に決まる.動的に変化しない.
? プログラムは事前に検証され,システム
に悪影響を及ぼさないことを前提とする
組込みソフトウェアの特徴(1)
入力
処理
入力 出力
計算
処理
出力
処理
プログラム
モータ
制御
パルス
データ
PWM信号
シリアル
モニタ
コマンド
データ
結果
出力
11
? 多くの場合,プログラムは並行してサー
ビスを提供する.なので,適切な処理の
切り替えが必要
? システムの時間制約を満たすように動か
すこと
組込みソフトウェアの特徴(2)
入力 出力
入力 出力
入力 出力
入力 出力
時間
12
そこで,リアルタイムOS?
13
? OSとは,プログラムの実行を管理するソ
フトウェアのこと.
– プログラムを「開始」とか「停止」とか「終
了」とか
? 同時に動作する複数のプログラムの実行
を管理するために利用される.
「同時に動作する」といっても単一プロセッサでは同時に一つしか動かせ
ません.ここでは「同時に動作状態にある」とでも思っていただけると
まず,OS(Operating System)とは
14
? システムごとにハード構成が異なる.
? そのため,OSはプロセッサや割込みコン
トローラなど「最低限の構成」を前提に
「最小限の機能」だけが提供される.
– 保護機能も必須ではない.リアルタイム性の
観点からできる限り省かれる.
? システムがリアルタイム性を求められる
ため,その実現に適した機能を持つ.
– で,結局それは リアルタイムOS ということになる...
組込みシステムのOS
15
RTOSを使いたくなる状況までを
順番に追ってみる
16
? 例1)0.5秒周期で動作するプログラム
– 例えば機器の稼働状態を示すLED点滅とか
– 時間経過はポーリングでチェック
ポーリングによるループ処理
task1
void main () {
while(1) {
if(0.5秒経過?) {
task1();
}
}
}
void task1() {
/* 処理*/
}
0.5s
main
17
? 例2)処理を追加
– シリアルからデータを随
時受信.
– 受信毎に,対応するコマ
ンドを実行.
– 処理(console_task)が短い
うちは特に問題ない
ポーリングによるループ処理
task1
void main () {
while(1) {
if(0.5秒経過?) {
task1();
}
if(シリアル受信?) {
console_task();
}
}
}
console_task
18
? 例3)時間のかかる処理が追加された
– 周期処理が遅れる(または取りこぼす)可能
性がでる
ポーリングによるループ処理
task1
void main () {
while(1) {
if(0.5秒経過?) {
task1();
}
if(シリアル受信?) {
console_task();
}
}
}
void console_task () {
if(メモリダンプ?) {
/* ダンプ処理(長い) */
}
else if(コマンド?) {
/* 他のコマンド処理 */
}
}
console_task
19
? 対策案)0.5秒ごとの周期処理を優先的に
実行したいなら,それを割込み処理にす
る
割込みによる解決
handler1
void main () {
while(1) {
if(シリアル受信?) {
console_task();
}
}
}
void console_task() {
if(メモリダンプ?) {
/* ダンプ処理 */
}
else if(コマンド?) {
/* 他のコマンド処理 */
}
}
console_task
void handler1() {
/* 処理 */
}
0.5秒タイマー
20
? あるプログラムが,それまで動いていたプロ
グラムの間に割り込むこと
– それまでの処理を一時中断して別の処理を実行
し,その後,中断したプログラムを中断した時点
から再開すること
– 割込みを使用すると,動作順序に関連性のない独
立した逐次処理の流れが発生する
– 割込みは優先度というパラメータを持ち,高い優
先度をもつ割込みが先に実行される
割込みとは
スイッチ
タイマ
タイマ
割込み
処理
スイッチ
割込み
処理
割込み発生!
割り込まれるプログラム
割込み処理プログラム
処理を保留
21
? プロセッサの利用効率を上げる
– 通常、デバイスの動作はプロセッサより遅い
– 外部の変化を検出するために常に確認するの
は効率が悪いため変化した時に教えてもらう
割込みを利用する目的
確認
処理2
処理1
処理2
処理1
22
? 割込みが発生すると,プロセッサへ非同期に電気
的な信号(割込み信号)が送られる
? プロセッサは割込み信号を受け取ると、実行中の
プログラムを中断し,割込み処理プログラムを開
始する
? 割込み処理プログラム実行中,それよりも高い優
先度を持つ割込みが発生した場合には処理が中断
され,高い優先度をもつ割込み処理プログラムが
開始される
? 割込み処理プログラムが終了するとプロセッサは
中断していたプログラムを再開する
割込み発生時の処理の流れ
割込み発生!
割込み処理プログラム
処理を保留
割込み信号
23
? 例4)割込み処理を追加(優先度:高)
– 取りこぼすかもしれないため入力を早く受け
付けたい.でも,処理完了に時間がかかる.
追加したいものがそういうものだったとしましょう.
– 処理時間が長くて,優先度の高い割込み処理
を追加すると,そのぶん他の割込みの受付が
遅くなることがある それでよいか?
割込みの追加と問題点
handler1
console_task
handler2
24
? 困るならば,プログラムを「先に処理し
たい」部分と「後で行う」部分に分けて
みる
– 急ぐ部分だけを割込み処理にする
処理の分割
プログラム
入力 出力
急ぐ処理
後で行う
処理
出力入力 通知
25
? 対策案)一部をメインループへ移動
– handler1 の割込み受付の遅れは最小限に
– これで解決,しかし...
割込みによる解決
handler1
console_task
handler2
task2
handler2では最低限の処理と
task2への通知を実施
26
? 移動された(時間のかかる)処理は,最悪ルー
プ1周するまで実行を待たされることがある
– 結局,元の問題に戻った
– メインでなく低優先度の割込み処理とかすれば良
いのでは?それも正解ですが優先度数には上限が.
割込みによる解決
void main () {
while(1) {
if(シリアル受信?) {
console_task();
}
else if(task2開始条件?) {
task2();
}
}
}
handler1
console_task
handler2
task2
最低限の処理とtask2への通知
27
? 対策案)長い処理は一定量処理して戻す
定期的な処理の切り替え
void console_task(void) {
static int dump_run = false;
if(メモリダンプ? || dump_run) {
dump_run = dump(dump_run);
}
/* 以下,省略 */
}
int dump(int cont) {
if(cont) {
/* 中断前の状態に戻す */
goto loop: // 再開
}
while(データ残ってる?) {
loop:
/* データ出力 */
if(中断回数?) {
/* 状態保存 */
return true; // 継続中
}
}
return false; // 終了
}
handler1
console_task
handler2
task2
main
28
? プログラムの切り替え処理をいちいち埋
め込むのはとても煩雑
– プログラム追加毎に必要
– 計算量もそのつど決定
でも
void dump(void) {
while(データ残ってる?) {
/* データ出力 */
}
return;
}
本来行いたい処理
int dump(int cont) {
if(cont) {
/* 中断前の状態に戻す */
goto loop: // 再開
}
while(データ残ってる?) {
loop:
/* データ出力 */
if(中断回数?) {
/* 状態保存 */
return true; // 継続中
}
}
return false; // 終了
}
29
? 割込みを利用することで,急ぐ処理を優先的
に実行開始できる.
? プログラムを割込み処理とメイン処理に分け
ることで,割込み受付の遅延を尐なくでき
る.
? しかし,メインループの処理には優先度がな
いため,急ぐ処理が先に実行されることが保
証できない.
– デッドラインを守る上においては重要である.
ここまでの課題を整理
割込み処理A
割込み処理B
タスクA
タスクB
割込みA
割込みB
通知
通知
30
? 先に実行させたいタスクに高い優先度を
設定することで,先に実行させることが
できる.
– 優先度の低いタスクが動いていても関係ない
RTOSによる解決
void task2() {
/* タスク処理 */
}
void handler2() {
iact_task(TASK2); // 起動
}
void console_task () {
/* コマンド処理 */
}
handler1
console_task
handler2
task2
task2 起動
31
? RTOSを使うと
– メインプログラムの間に割込みのような優先
度を持たせ,急ぐ処理を常に先に実行でき
る.
– 複数のプログラムを並行に動作させた上でリ
アルタイム性が検討できるようになる
– プログラムの共通的な切り替え処理をOSとし
て分離できる.その結果,各プログラムの独
立性が高まり,保守管理が楽になる.
ということができる
RTOSのメリットまとめ
32
? 実行開始のタイミング
– 周期ハンドラ+タスク起動
– 割込み+タスク起動
? デッドライン(締め切り)
– スケジューリング規則と優先
度設定で最悪処理時間を調整
? ジッタ
– スケジューリング規則と優先
度設計で開始タイミングの遅
れの程度を調整
– (RTOSとは関係ないけど)処理が一定時間で終わる
ようなソフト設計とか,ハード設計とか
RTOSの時間制約への寄与
時間
T T T T
T1 T2 T3 T4
d
Δt
Δt
33
? 全ての利用者やプログラムに平等に計算
機資源を提供するという考え方に基づく
ため,リアルタイム性が保証できない
– TSS(タイムシェリングシステム)
– 実際には,リアルタイム性をもたせるための
拡張機能を取り込んでいる場合もある.
? 必要メモリ量が多すぎる.
– 最低でも1MBはRAMが必要というのでは,
RAMが尐ないシステムでは使えない.たくさん積
んでるなら良いけど
汎用OSではなぜダメか
34
? ハードウェアは年々変化する.開発の都
合でハード変更が必要となる場合がある
? ハードウェアが異なれば,割込み系な
ど,そのハードの定義や挙動も異なる.
? その都度システムが同じ振る舞いをする
かどうかの検討が必要となる.
? OSという共通の枠組みを使うことで,OS
移植とアプリ移植を独立に実施できる.
ハードに起因する挙動の違いを枠組みに
そって整理でき,検討しやすくなる.
RTOSの別のメリット
35
? 様々なRTOS
– μITRON (TOPPERS/JSP, NORTi など)
– OSEK/VDX (ISO 17356シリーズ)
– その他(QNX,VxWorks, とか)
? OS によっては目的別に機能のサブセット
が定義されている
– (μITRON4.0)スタンダードプロファイル,自
動車制御プロファイル
– (OSEK) BCC1,BCC2,ECC1,ECC2
? ここでは TOPPERS/SSP カーネルを対象にしますが,そういやTOPPERS
まだ紹介してないですね....
様々なリアルタイムOS(RTOS)
36
TOPPERSプロジェクト
37
? オープンソース開発プロジェクト
– TOPPERSとは Toyohashi OPen Platform for
Embedded Real-time Systems の略
– 2003年よりNPO法人化
? 目的
– 組込みシステム開発で基盤となるソフトウェ
アの提供による産業振興
* 非競争領域をオープンソース化し,企業?個人が
先進的な開発に取り組めるように
– 教育教材の提供による技術者育成
TOPPERSプロジェクトとは
38
TOPPERSプロジェクトとは
http://www.toppers.jp/project.html
39
? 組込みシステム用RTOS
– TOPPERS新世代カーネル系
* ASP(標準的)
* FMP(マルチコア拡張),FDMP(機能分散マルチプロ
セッサ向け)
* HRP2(高信頼)
* SSP(小規模)
– μITRON系
* JSP(スタンダード), FI4(フルセット)
– 欧州車載系
* ATK1(OSEK/VDX), ATK2(AUTOSAR)
成果物(1)
40
? ミドルウェア
– TINET(TCP/IP),CAN/LIN
– FatFs for TOPPERS (ファイルシステム)
– TECS(コンポーネントシステム)
? 設計?評価用ツール
– カーネル用テストスイート
– TLV(ログ可視化)
? 教育用教材
– 各種セミナー教材,ETロボコン用コンテンツ
成果物(2)
41
? TOPPERS開発成果物の採用事例
http://www.toppers.jp/applications.html
開発事例(再掲)
デジタルピアノ
CASIO PX-850BK
HDDデュプリケータ
株式会社ワイ?イー?シー
Demi PG520
ロケット
JAXA H-IIA型
ジェルジェットプリンタ
リコー IPSiO GX e3300
42
? オープンソースライセンスである
– だれでもすぐに利用できる
– 製品に取り込みやすい(レポートウェア)
? ITRONで長年培われた技術をベースとし
ており,実績がある
– ITRON(Industrial TRON, TRONはThe Real-
time Operating system Nucleusの略)はトロン
協会により定められた制御機器向けリアルタ
イムOSの業界標準仕様
– 現在では ITRON を改良した TOPPERS新世
代カーネル の開発が行われている
TOPPERSの特徴
43
? μITRON仕様の発展版
– 最新版はバージョン1.6.0 (2014/4 現在)
? TOPPERS/ASPが代表例で,他に
FMP, FDMP, HRP2などがある.
? TOPPERS新世代カーネルは TOPPERS新
世代カーネル統合仕様書(以後,統合仕様
書) にまとめて規定されている.
– TOPPERS/SSPカーネルはTOPPERS新世代
カーネルの一種である.したがってSSPカー
ネルは基本的にこの仕様に基づく.
TOPPERS新世代カーネル
44
新世代カーネル統合仕様書
45
※このイメージちょっと古いです
? TOPPERSプロジェクトが配布している小
規模組込みシステム用のRTOS
? ASPカーネルと比べて大幅に機能削減
? 2011年11月より一般公開
– 最新バージョンは1.2.1 (2014/4 現在)
? 対応MCU(他にも移植中)
– Cortex-M3
– R8C/M32C
– RX62N
– Cortex-M0(+)(非公式)
https://bitbucket.org/NSaitoNmiri/toppers_ssp_lpc812/
TOPPERS/SSPカーネルとは
TOPPERS/ASP TOPPERS/SSP
ROM RAM
約26KByte
約3KByte
52Byte
31Byte
46
ロードマップとSSPの位置づけ
47
? 出典:T-Engineフォーラム「2011年度組込
みシステムにおけるリアルタイムOSの利
用動向に関するアンケート調査報告書」
http://www.t-engine.org/ja/2012/tef-rtos2012.html
SSPの開発背景
48
? RTOSサイズに関する利用動向
– この数年,小規模システムの割合はあまり変
化がない
– 64KB未満のプログラムサイズが約19%を占
め,前年比でも減尐していない.
* RAMはたいていの場合,それよりさらに尐ない
– 今後も一定の割合で存在すると仮定
* メモリ増大化でこの仮定が崩れつつあるのではという気もする
? 従来のTOPPERSのRTOSではRAMの極め
て尐ない組込みシステムには適用が困難
– JSP や ASP が求めるリソースが小規模シス
テムには大きい.
SSPの開発背景
49
※ 基本,拡張,独自追加の各機能に大別
? 基本機能
– μITRON4.0仕様「仕様準拠の最低条件」を元
に,TOPPERS新世代カーネルの機能をサブ
セット化
* 最低限のタスク管理(タスクには待ち状態がない)
* 割込み管理,CPU例外管理,システム状態管理
SSPカーネル仕様の特徴(1)
μITRON4.0仕様
TOPPERS
新世代カーネル仕様
TOPPERSが
独自に拡張
(共通部分)
基本機能
独自拡張部分
(SSPのみ)
SSPカーネ
ル拡張機能
仕様準拠の
最低条件
50
? RTOSがμITRON4.0に準拠しているという
ために最低限必要な機能および仕様を定
めたもの
1.静的APIおよびサービスコールのサポート
* CRE_TSK タスクの生成
* (i)act_tsk タスクの起動
* ext_tsk 自タスクの終了
* DEF_INH 割込みハンドラの登録
2.μITRON4.0仕様のスケジューリング規則に
沿ったスケジューリングを行うこと
* 優先度ベースおよびFCFS(First Come First
Service)のスケジューリング
参考:仕様準拠の最低限の条件
51
? 拡張機能 (不要なら外すことが可能)
– 時間管理機能({周期,アラーム}ハンドラ)
– 同期?通信機能(データキュー,イベントフ
ラグ)
? 独自追加機能(SSPのみに存在する機能)
※システム全体のプログラムサイズを最小化す
るために有用な機能
– 共有スタック領域,実行時優先度
? TOPPERSの他のカーネル(ASPカーネル
など)が上位互換性を持つように配慮し
ているが,完全な互換にはなっていない
SSPカーネル仕様の特徴(2)
52
? 対象とするプログラム規模
– 実行プログラムサイズが数KB~数十KB程度
* ASPカーネルでは数十KB~1MB程度
– 尐し小さめのシステムにも適用可能
* 例えば ROM6KByte,RAM2KByte程度でも可能
* ROM4K, RAM1Kに挑戦中だが現状ちと厳しい
? プログラム機能
– 複雑な制御を必要としないシステム
* タスクスケジューラ,割込み管理で十分な場合
? OS導入ステップ
– リアルタイムOSを導入したいが,導入障壁が
高いと感じている開発チーム
SSPカーネルの適用範囲
53
? 組込みシステムはコンピュータシステム
であり目的に専用化されたRTSである
? 組込みソフトウェア開発ではリアルタイ
ム性を確保する点でRTOSが便利である
? RTOSは標準仕様品を使う意味での利点も
ある.選択肢の一つとしてTOPPERSの
カーネルを利用するという方法がある.
? TOPPERS/SSPカーネルはTOPPERSプロ
ジェクトの組込みシステム向けRTOSの一
つであり,小規模な点が特徴である.
まとめ
54

More Related Content

リアルタイム翱厂の必要性と罢翱笔笔贰搁厂/厂厂笔の绍介