SlideShare uma empresa Scribd logo
1 de 35
リアルタイム OS のカスタマ
イズ
ポリテクセンター兵庫
2015.1.10,17,24
アライブビジョンソフトウェア株式会
社
高橋和浩
2
目次  1 日目
1. リアルタイム OS のカスタマイズの必
要性
2.ITRON の作り方
3.TOPPERS/SSP 、インストール
4.TOPPERS/SSP プログラム演習
3
目次  2 日目
5. シュリンク版 SSP の紹介とインストー
ル
6. カーネルコード解説
7.TOPPERS/SSP のカスタマイズ 一部
改造編
4
目次  3 日目
8.TOPPERS/SSP のカスタマイズ フル
改造編
(1)待ち状態を持つカーネルの設計
(2)実装
(3) dly_tsk の追加
( 4)評価・改善
3 日間のまとめ
5
1. リアルタイム OS のカスタマイズの必要性
さまざまな局面
1) 無償の RTOS を無償で使っていて自ら
メンテナンスしたい
2) 自社製 OS を使っているが我流にやっ
ていて、メンテ方法を学びたい
3)OS レスでやっているが、今のシステム
にマルチタスク機能をいれたい。
4)OS の自作をやってみたいと思っている
6
対象の RTOS
 1) シングルコア
 2) スレッドモデル
 以下は、さらに基礎を元に応用が必要
 プロセスモデル
 マルチコア (SMP)
7
2.ITRON の作り方
 「 ITRON 標準ガイドブック 2 」
「 PartⅢITRON を作りたい人のため
に」
 解説:
 本では非常に端的に書かれている。た
ぶんこれを読んですっとわかる人はす
でに ITRON の構造を理解している人だ
と考えています。解説しながら進めて
いきます。
8
用語
 タスクディスパッチ / タスクスイッチ タス
クディスパッチャ
 タスクスケジューリング タスクスケジュー
ラ
 優先度ベーススケジューリング
 レディーキュー
 遅延ディスパッチ(の原則)
 ret_int システムコール
 タスク独立部 --> 特有の用語で、ユーザー割
り込みルーチンのこと
9
OS の動き 概要
 OS 未実行(タスクが実行中)
 -->
 システムコールまたは割り込み
 -->
 OS 実行状態 すぐにユーザー割り込み処理をコール
 システムコールならなんかやる
 -->
 遅延ディスパッチ
 ret_int でタスクにいく
10
プログラムの動作優先度
 ( カーネル管理外)
 カーネルマスクレベル
 ユーザー割り込みハンドラ
 ユーザータスク
11
TCB の作り方
 タスクコントロールブロック
 レディーキューとは TCB の行列のこと
12
3.TOPPERS/SSP 、インストール
  最少セットカーネル
   リアルタイムカーネル (RTOS)
   リアルタイム性能はそのまま、メモリ使用を抑
えた
   特徴的、「待ち状態を持たない」
   スタック共有も可能
  待ち状態を持たない --> プリエンプトされないの
で
             コンテキストの保存が不
要になり
             シンプルに実装されてい
13
インストール
演習テキスト参照 
14
4.TOPPERS/SSP プログラム
演習 
 演習テキスト参照
 演習 4-1
15
1 日目まとめ
 RTOS の用語
 RTOS の大まかな動き
 TOPPERS/SSP
16
5. シュリンク版 SSP, インス
トール
 演習テキスト参照 
 演習 5-1,5-2
17
6. カーネルコード解説
 sta_ker() から始まる。
 マルチタスクになる前
段階の処理
 ブート一回目だけの処
理としてカーネルオブ
ジェクトの生成がある
。
 SSP はカーネルオブ
ジェクトといってもタ
スクのみ
 TCB の初期設定をする
。
void
sta_ker(void)
{
initialize_object();
kerflg = true;
intnest = 0;
dispatcher();
}
18
6. カーネルコード解説 2
 ディスパッチャ部分
 これは、途中で待ちになら
ない SSP 特有のディスパッ
チ処理。
 優先度の高いタスクにプリ
エンプトはするが、待ち状
態にはならないから、タス
クの高いタスクが終了して
から低いタスクの起動はこ
ういう単純な呼び出しでよ
い。
 さらに SSP はスタック共有
型なのでスタックを切り替
える必要はない。
19
6. カーネルコード解説 3
 スケジューラは、今の
レディーキューから、
次にディスパッチする
タスクを選ぶ処理。
 レディーキューの構造
に依存するが、 SSP
は単純なビットマップ
のみ
uint_t
search_schedtsk(void)
{
return primap_search();
}
20
6. カーネルコード解説 4
ER
act_tsk(ID tskid)
{
ER ercd;
uint_t tskpri;
LOG_ACT_TSK_ENTER(tskid);
CHECK_TSKCTX_UNL();
CHECK_TSKID_SELF(tskid);
tskpri = get_ipri_self(tskid);
t_lock_cpu();
if (test_dormant(tskpri)) {
if(make_active(tskpri)) {
run_task(tskpri);
}
ercd = E_OK;
}
else {
ercd = E_QOVR;
}
t_unlock_cpu();
error_exit:
LOG_ACT_TSK_LEAVE(ercd);
return(ercd);
}
21
6. カーネルコード解説 5
 最後は、ユーザーからの OS 呼び出しである。
 タスクの起動で、基本はまずレディーキューに指
定したタスクの TCB をキューイングする
 カーネルの最後(遅延ディスパッチで)今の最優
先タスクを動かす。
 SSP は単純にサブルーチンコールしかしていない
ので、
 タスクは常に頭から動くが、プリエンプトされて
復帰するケースは
 自タスクよりも高いタスクを起動した場合。
 起動されたタスクが終了した時点で、タスク起動
後に戻ればいいのでサブルーチンコールするのと
同じ作りで実現している
22
6. カーネルコード解説 6
フローチャート 別紙 A1 参照
割り込みおよび遅延ディスパッチ部分
CPU が違っても同じ処理をアセンブリ言
語でこの部分を移植することで、シュ
リンク版 SSP の移植が可能
23
7.TOPPERS/SSP のカスタマイズ 一部改造編
 演習テキスト参照
 演習 7-1
24
2 日目まとめ
 シュリンク版 SSP のインストール
 カーネルコードリーディング
 標準的なカーネルカスタマイズ
25
8.TOPPERS/SSP のカスタマイズ フル改造編
 (1)待ち状態を持つカーネルの設計
 (2)実装
   イ.コンテキストの保存と復元
   ロ.サービスコール部の作成
 (3) dly_tsk の追加
   イ.実装に必要な項目の整理
   ロ.指定時間待ちの実装 (dly_tsk)
 (4)評価・改善
   イ.制作したカーネルを用いる際の問題点の把
握
26
(1)待ち状態を持つカーネルの設計
 待ちを持つということは
 タスクが  run --> wait --> dormant
     wait --> ready
 中断したところから再開しなければな
らない。
27
コンテキストの保存と復元
 1. コンテキストの保存エリアを検討す
る。
 2. コンテキストからタスクが復帰する
仕組みでのタスク起動部を実装する
 3. タスクスイッチする場合にコンテキ
ストの保存と復帰をします。
 タスクがスイッチするときにコンテキ
ストを保存 / 復帰するように実装する。
28
longjmp/setjmp の仕組み
 コンテキストの保存領域を渡して call すれば
、そこに保存される。
 保存時は戻り値 0 でリターンする。 保存さ
れたものが使われた場合には 1 でリターンす
る。
 1 でリターンした場合は、レジスターやス
タックポインタなど、保存時の状態に戻る。
 setjmp は保存領域を利用して jmp する。コン
テキストは保存領域のものに復帰する。
29
longjmp/setjmp の限界
 RTOS のコンテキスト保存
は、 longjmp/setjmp だけでは、すべて
の場合に対応できません。
 少なくとも戻り値が、 R1 レジスタが保
存されないことがある。
 割り込みには対応できない
 割り込み部でレジスタ保存 / 復帰を補
完する必要がある。
30
(2)実装
 演習 8-1
 演習 8-2
 Wait-ssp との差分を参考
31
(3) dly_tsk の追加
 Delay 状態の定義
 待ち状態かつタイムアウト値が 0 以外の場合
 変数の追加 タイムアウト値
  TCB に追加する
 Isig_tim を 1ms のタイマー割り込みから呼び出す。
 Isig_tim の処理
 全タスクループ
  タイムアウト値が 0 以外
  タイムアウト値 -- == 0 か ?
   wait 解除処理
 Wait 解除処理
   1.TCB を WAIT  READY 状態に変更
   2.TCB をレディーキューにつなげる
  タスクスイッチは、ディスパッチャで実行される
32
(3) dly_tsk の追加 実装
 演習 8-3
33
( 4)評価・改善
 イ.制作したカーネルを用いる際の問
題点の把握
 ロ.問題点の改善
34
イ.制作したカーネルを用いる際の問題点の把
握
 1. 実行速度
 2.RAM 利用削減
 2 点改善事項
 コンテキストの保存と復元を割り込み
では 2 度行っている
 コンテキスト領域を固定で RAM を使用
  タスクスタックを利用
35
まとめ
 演習 8-3 がカーネルの処理の一般的な
実装の形
 パターン化
 1) コントロールブロックを直す
 2) 待ち行列に並べる、取り出す

Mais conteúdo relacionado

Mais procurados

あるコンテキストスイッチの話
あるコンテキストスイッチの話あるコンテキストスイッチの話
あるコンテキストスイッチの話nullnilaki
 
Completely Fair Scheduler (CFS)
Completely Fair Scheduler (CFS)Completely Fair Scheduler (CFS)
Completely Fair Scheduler (CFS)gokzy
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門sandai
 
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)Yahoo!デベロッパーネットワーク
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門sandai
 
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 sandai
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチMasami Ichikawa
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチKazuki Onishi
 
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化Takatoshi Matsuo
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例kazuhcurry
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiTakashi Hoshino
 
痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさ痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさTakatoshi Matsuo
 
Lagopus.confの書式(for lagopus 0.1.x)
Lagopus.confの書式(for lagopus 0.1.x)Lagopus.confの書式(for lagopus 0.1.x)
Lagopus.confの書式(for lagopus 0.1.x)Masaru Oki
 
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料KamezawaHiroyuki
 
Linux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutesLinux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutesYohei Azekatsu
 
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#135ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13Uptime Technologies LLC (JP)
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。Kazuki Onishi
 
Ylug 110th kpatch code reading
Ylug 110th kpatch code readingYlug 110th kpatch code reading
Ylug 110th kpatch code readingMasami Hiramatsu
 

Mais procurados (20)

あるコンテキストスイッチの話
あるコンテキストスイッチの話あるコンテキストスイッチの話
あるコンテキストスイッチの話
 
Completely Fair Scheduler (CFS)
Completely Fair Scheduler (CFS)Completely Fair Scheduler (CFS)
Completely Fair Scheduler (CFS)
 
【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門【学習メモ#3rd】12ステップで作る組込みOS自作入門
【学習メモ#3rd】12ステップで作る組込みOS自作入門
 
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
Linux女子会 - お仕事メリハリ術♪(プロセススケジューラ編)
 
【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門【学習メモ#1st】12ステップで作る組込みOS自作入門
【学習メモ#1st】12ステップで作る組込みOS自作入門
 
【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門 【学習メモ#11th】12ステップで作る組込みOS自作入門
【学習メモ#11th】12ステップで作る組込みOS自作入門
 
x86とコンテキストスイッチ
x86とコンテキストスイッチx86とコンテキストスイッチ
x86とコンテキストスイッチ
 
プロセスとコンテキストスイッチ
プロセスとコンテキストスイッチプロセスとコンテキストスイッチ
プロセスとコンテキストスイッチ
 
Lagopus 0.2
Lagopus 0.2Lagopus 0.2
Lagopus 0.2
 
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化HAクラスタで PostgreSQLレプリケーション構成の 高可用化
HAクラスタで PostgreSQLレプリケーション構成の 高可用化
 
PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例PG-REXで学ぶPacemaker運用の実例
PG-REXで学ぶPacemaker運用の実例
 
Intel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86optiIntel TSX HLE を触ってみた x86opti
Intel TSX HLE を触ってみた x86opti
 
痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさ痛い目にあってわかる HAクラスタのありがたさ
痛い目にあってわかる HAクラスタのありがたさ
 
Lagopus.confの書式(for lagopus 0.1.x)
Lagopus.confの書式(for lagopus 0.1.x)Lagopus.confの書式(for lagopus 0.1.x)
Lagopus.confの書式(for lagopus 0.1.x)
 
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
Cgroupあれこれ-第4回コンテナ型仮想化の情報交換会資料
 
systemdを始めよう
systemdを始めようsystemdを始めよう
systemdを始めよう
 
Linux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutesLinux Performance Analysis in 15 minutes
Linux Performance Analysis in 15 minutes
 
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#135ステップで始めるPostgreSQLレプリケーション@hbstudy#13
5ステップで始めるPostgreSQLレプリケーション@hbstudy#13
 
ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。ラズパイでデバイスドライバを作ってみた。
ラズパイでデバイスドライバを作ってみた。
 
Ylug 110th kpatch code reading
Ylug 110th kpatch code readingYlug 110th kpatch code reading
Ylug 110th kpatch code reading
 

Semelhante a リアルタイムOsのカスタマイズ

Stellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイドStellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイドryos36
 
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎Insight Technology, Inc.
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLakirahiguchi
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishYohei Azekatsu
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)Mr. Vengineer
 
Spmv9forpublic
Spmv9forpublicSpmv9forpublic
Spmv9forpublicT2C_
 
PEZY-SC programming overview
PEZY-SC programming overviewPEZY-SC programming overview
PEZY-SC programming overviewRyo Sakamoto
 
Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119metamd
 
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活Kuninobu SaSaki
 
Machine configoperatorのちょっとイイかもしれない話
Machine configoperatorのちょっとイイかもしれない話 Machine configoperatorのちょっとイイかもしれない話
Machine configoperatorのちょっとイイかもしれない話 Toshihiro Araki
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会Hirotaka Kawata
 
マイコンロボット実習
マイコンロボット実習マイコンロボット実習
マイコンロボット実習Takehiko YOSHIDA
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3openrtm
 
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncDbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncKoji Shinkubo
 
PHPとシグナル、その裏側
PHPとシグナル、その裏側PHPとシグナル、その裏側
PHPとシグナル、その裏側do_aki
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1Etsuji Nakai
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1信之 岩永
 
Operator reading and writing ( Operator SDK 編 )
Operator reading and writing ( Operator SDK 編 )Operator reading and writing ( Operator SDK 編 )
Operator reading and writing ( Operator SDK 編 )ロフト くん
 

Semelhante a リアルタイムOsのカスタマイズ (20)

Stellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイドStellaris を使った組み込みアプリ開発ガイド
Stellaris を使った組み込みアプリ開発ガイド
 
C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎C21 SQL Server のスレッド管理 by 古賀啓一郎
C21 SQL Server のスレッド管理 by 古賀啓一郎
 
HandlerSocket plugin for MySQL
HandlerSocket plugin for MySQLHandlerSocket plugin for MySQL
HandlerSocket plugin for MySQL
 
Dbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publishDbts2012 unconference wttrw_yazekatsu_publish
Dbts2012 unconference wttrw_yazekatsu_publish
 
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
ZynqMPのブートとパワーマネージメント : (ZynqMP Boot and Power Management)
 
Spmv9forpublic
Spmv9forpublicSpmv9forpublic
Spmv9forpublic
 
PEZY-SC programming overview
PEZY-SC programming overviewPEZY-SC programming overview
PEZY-SC programming overview
 
Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119Open-FCoE_osc2011tokyofall_20111119
Open-FCoE_osc2011tokyofall_20111119
 
EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活EnrootとPyxisで快適コンテナ生活
EnrootとPyxisで快適コンテナ生活
 
Machine configoperatorのちょっとイイかもしれない話
Machine configoperatorのちょっとイイかもしれない話 Machine configoperatorのちょっとイイかもしれない話
Machine configoperatorのちょっとイイかもしれない話
 
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
自作コンピューターでなんかする - 第八回 カーネル/VM探検隊&懇親会
 
マイコンロボット実習
マイコンロボット実習マイコンロボット実習
マイコンロボット実習
 
20130329 rtm3
20130329 rtm320130329 rtm3
20130329 rtm3
 
Dbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_syncDbts2013 特濃jpoug log_file_sync
Dbts2013 特濃jpoug log_file_sync
 
PHPとシグナル、その裏側
PHPとシグナル、その裏側PHPとシグナル、その裏側
PHPとシグナル、その裏側
 
Mt basic as-os_on_danbot
Mt basic as-os_on_danbotMt basic as-os_on_danbot
Mt basic as-os_on_danbot
 
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
OpenStackクラウド基盤構築ハンズオンセミナー 第1日:ハンズオンNo1
 
C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1C# 7.2 with .NET Core 2.1
C# 7.2 with .NET Core 2.1
 
Multi Chassis LAG for Cloud builders
Multi Chassis LAG for Cloud buildersMulti Chassis LAG for Cloud builders
Multi Chassis LAG for Cloud builders
 
Operator reading and writing ( Operator SDK 編 )
Operator reading and writing ( Operator SDK 編 )Operator reading and writing ( Operator SDK 編 )
Operator reading and writing ( Operator SDK 編 )
 

Mais de Kazuhiro Takahashi

Gr sakuraで動く mrubyスマホリモコンカー(タミヤ製ラジコン改造)
Gr sakuraで動く mrubyスマホリモコンカー(タミヤ製ラジコン改造)Gr sakuraで動く mrubyスマホリモコンカー(タミヤ製ラジコン改造)
Gr sakuraで動く mrubyスマホリモコンカー(タミヤ製ラジコン改造)Kazuhiro Takahashi
 
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編Kazuhiro Takahashi
 
TOPPERS/SSPを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ @ソフトウェア講演会名古屋
TOPPERS/SSPを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ @ソフトウェア講演会名古屋TOPPERS/SSPを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ @ソフトウェア講演会名古屋
TOPPERS/SSPを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ @ソフトウェア講演会名古屋Kazuhiro Takahashi
 
Rx hew-シミュレータで動かすー説明書
Rx hew-シミュレータで動かすー説明書Rx hew-シミュレータで動かすー説明書
Rx hew-シミュレータで動かすー説明書Kazuhiro Takahashi
 
Toppers sspを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ
Toppers sspを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズToppers sspを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ
Toppers sspを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズKazuhiro Takahashi
 
リアルタイムOsのカスタマイズチラシ023
リアルタイムOsのカスタマイズチラシ023リアルタイムOsのカスタマイズチラシ023
リアルタイムOsのカスタマイズチラシ023Kazuhiro Takahashi
 
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Kazuhiro Takahashi
 

Mais de Kazuhiro Takahashi (13)

mrubyOSチラシ
mrubyOSチラシmrubyOSチラシ
mrubyOSチラシ
 
Gr sakuraで動く mrubyスマホリモコンカー(タミヤ製ラジコン改造)
Gr sakuraで動く mrubyスマホリモコンカー(タミヤ製ラジコン改造)Gr sakuraで動く mrubyスマホリモコンカー(タミヤ製ラジコン改造)
Gr sakuraで動く mrubyスマホリモコンカー(タミヤ製ラジコン改造)
 
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編
Raspberry pi で スマホリモコンでラジコンカーを動かすさっと動かす編
 
TOPPERS/SSPを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ @ソフトウェア講演会名古屋
TOPPERS/SSPを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ @ソフトウェア講演会名古屋TOPPERS/SSPを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ @ソフトウェア講演会名古屋
TOPPERS/SSPを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ @ソフトウェア講演会名古屋
 
Gr sakuraでtinet
Gr sakuraでtinetGr sakuraでtinet
Gr sakuraでtinet
 
Rx hew-シミュレータで動かすー説明書
Rx hew-シミュレータで動かすー説明書Rx hew-シミュレータで動かすー説明書
Rx hew-シミュレータで動かすー説明書
 
mruby os(案)の開発
mruby os(案)の開発mruby os(案)の開発
mruby os(案)の開発
 
Toppers sspを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ
Toppers sspを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズToppers sspを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ
Toppers sspを用いた教育訓練カリキュラムカーネルの自作およびカスタマイズ
 
リアルタイムOsのカスタマイズチラシ023
リアルタイムOsのカスタマイズチラシ023リアルタイムOsのカスタマイズチラシ023
リアルタイムOsのカスタマイズチラシ023
 
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
Raspberry pi 用 toppers ssp シュリンク版(海賊版)の紹介
 
G7プレゼンrtos自作
G7プレゼンrtos自作G7プレゼンrtos自作
G7プレゼンrtos自作
 
G7プレゼンrtos自作
G7プレゼンrtos自作G7プレゼンrtos自作
G7プレゼンrtos自作
 
G7プレゼンrtos自作
G7プレゼンrtos自作G7プレゼンrtos自作
G7プレゼンrtos自作
 

リアルタイムOsのカスタマイズ

  • 2. 2 目次  1 日目 1. リアルタイム OS のカスタマイズの必 要性 2.ITRON の作り方 3.TOPPERS/SSP 、インストール 4.TOPPERS/SSP プログラム演習
  • 3. 3 目次  2 日目 5. シュリンク版 SSP の紹介とインストー ル 6. カーネルコード解説 7.TOPPERS/SSP のカスタマイズ 一部 改造編
  • 4. 4 目次  3 日目 8.TOPPERS/SSP のカスタマイズ フル 改造編 (1)待ち状態を持つカーネルの設計 (2)実装 (3) dly_tsk の追加 ( 4)評価・改善 3 日間のまとめ
  • 5. 5 1. リアルタイム OS のカスタマイズの必要性 さまざまな局面 1) 無償の RTOS を無償で使っていて自ら メンテナンスしたい 2) 自社製 OS を使っているが我流にやっ ていて、メンテ方法を学びたい 3)OS レスでやっているが、今のシステム にマルチタスク機能をいれたい。 4)OS の自作をやってみたいと思っている
  • 6. 6 対象の RTOS  1) シングルコア  2) スレッドモデル  以下は、さらに基礎を元に応用が必要  プロセスモデル  マルチコア (SMP)
  • 7. 7 2.ITRON の作り方  「 ITRON 標準ガイドブック 2 」 「 PartⅢITRON を作りたい人のため に」  解説:  本では非常に端的に書かれている。た ぶんこれを読んですっとわかる人はす でに ITRON の構造を理解している人だ と考えています。解説しながら進めて いきます。
  • 8. 8 用語  タスクディスパッチ / タスクスイッチ タス クディスパッチャ  タスクスケジューリング タスクスケジュー ラ  優先度ベーススケジューリング  レディーキュー  遅延ディスパッチ(の原則)  ret_int システムコール  タスク独立部 --> 特有の用語で、ユーザー割 り込みルーチンのこと
  • 9. 9 OS の動き 概要  OS 未実行(タスクが実行中)  -->  システムコールまたは割り込み  -->  OS 実行状態 すぐにユーザー割り込み処理をコール  システムコールならなんかやる  -->  遅延ディスパッチ  ret_int でタスクにいく
  • 10. 10 プログラムの動作優先度  ( カーネル管理外)  カーネルマスクレベル  ユーザー割り込みハンドラ  ユーザータスク
  • 11. 11 TCB の作り方  タスクコントロールブロック  レディーキューとは TCB の行列のこと
  • 12. 12 3.TOPPERS/SSP 、インストール   最少セットカーネル    リアルタイムカーネル (RTOS)    リアルタイム性能はそのまま、メモリ使用を抑 えた    特徴的、「待ち状態を持たない」    スタック共有も可能   待ち状態を持たない --> プリエンプトされないの で              コンテキストの保存が不 要になり              シンプルに実装されてい
  • 15. 15 1 日目まとめ  RTOS の用語  RTOS の大まかな動き  TOPPERS/SSP
  • 16. 16 5. シュリンク版 SSP, インス トール  演習テキスト参照   演習 5-1,5-2
  • 17. 17 6. カーネルコード解説  sta_ker() から始まる。  マルチタスクになる前 段階の処理  ブート一回目だけの処 理としてカーネルオブ ジェクトの生成がある 。  SSP はカーネルオブ ジェクトといってもタ スクのみ  TCB の初期設定をする 。 void sta_ker(void) { initialize_object(); kerflg = true; intnest = 0; dispatcher(); }
  • 18. 18 6. カーネルコード解説 2  ディスパッチャ部分  これは、途中で待ちになら ない SSP 特有のディスパッ チ処理。  優先度の高いタスクにプリ エンプトはするが、待ち状 態にはならないから、タス クの高いタスクが終了して から低いタスクの起動はこ ういう単純な呼び出しでよ い。  さらに SSP はスタック共有 型なのでスタックを切り替 える必要はない。
  • 19. 19 6. カーネルコード解説 3  スケジューラは、今の レディーキューから、 次にディスパッチする タスクを選ぶ処理。  レディーキューの構造 に依存するが、 SSP は単純なビットマップ のみ uint_t search_schedtsk(void) { return primap_search(); }
  • 20. 20 6. カーネルコード解説 4 ER act_tsk(ID tskid) { ER ercd; uint_t tskpri; LOG_ACT_TSK_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); tskpri = get_ipri_self(tskid); t_lock_cpu(); if (test_dormant(tskpri)) { if(make_active(tskpri)) { run_task(tskpri); } ercd = E_OK; } else { ercd = E_QOVR; } t_unlock_cpu(); error_exit: LOG_ACT_TSK_LEAVE(ercd); return(ercd); }
  • 21. 21 6. カーネルコード解説 5  最後は、ユーザーからの OS 呼び出しである。  タスクの起動で、基本はまずレディーキューに指 定したタスクの TCB をキューイングする  カーネルの最後(遅延ディスパッチで)今の最優 先タスクを動かす。  SSP は単純にサブルーチンコールしかしていない ので、  タスクは常に頭から動くが、プリエンプトされて 復帰するケースは  自タスクよりも高いタスクを起動した場合。  起動されたタスクが終了した時点で、タスク起動 後に戻ればいいのでサブルーチンコールするのと 同じ作りで実現している
  • 22. 22 6. カーネルコード解説 6 フローチャート 別紙 A1 参照 割り込みおよび遅延ディスパッチ部分 CPU が違っても同じ処理をアセンブリ言 語でこの部分を移植することで、シュ リンク版 SSP の移植が可能
  • 24. 24 2 日目まとめ  シュリンク版 SSP のインストール  カーネルコードリーディング  標準的なカーネルカスタマイズ
  • 25. 25 8.TOPPERS/SSP のカスタマイズ フル改造編  (1)待ち状態を持つカーネルの設計  (2)実装    イ.コンテキストの保存と復元    ロ.サービスコール部の作成  (3) dly_tsk の追加    イ.実装に必要な項目の整理    ロ.指定時間待ちの実装 (dly_tsk)  (4)評価・改善    イ.制作したカーネルを用いる際の問題点の把 握
  • 26. 26 (1)待ち状態を持つカーネルの設計  待ちを持つということは  タスクが  run --> wait --> dormant      wait --> ready  中断したところから再開しなければな らない。
  • 27. 27 コンテキストの保存と復元  1. コンテキストの保存エリアを検討す る。  2. コンテキストからタスクが復帰する 仕組みでのタスク起動部を実装する  3. タスクスイッチする場合にコンテキ ストの保存と復帰をします。  タスクがスイッチするときにコンテキ ストを保存 / 復帰するように実装する。
  • 28. 28 longjmp/setjmp の仕組み  コンテキストの保存領域を渡して call すれば 、そこに保存される。  保存時は戻り値 0 でリターンする。 保存さ れたものが使われた場合には 1 でリターンす る。  1 でリターンした場合は、レジスターやス タックポインタなど、保存時の状態に戻る。  setjmp は保存領域を利用して jmp する。コン テキストは保存領域のものに復帰する。
  • 29. 29 longjmp/setjmp の限界  RTOS のコンテキスト保存 は、 longjmp/setjmp だけでは、すべて の場合に対応できません。  少なくとも戻り値が、 R1 レジスタが保 存されないことがある。  割り込みには対応できない  割り込み部でレジスタ保存 / 復帰を補 完する必要がある。
  • 30. 30 (2)実装  演習 8-1  演習 8-2  Wait-ssp との差分を参考
  • 31. 31 (3) dly_tsk の追加  Delay 状態の定義  待ち状態かつタイムアウト値が 0 以外の場合  変数の追加 タイムアウト値   TCB に追加する  Isig_tim を 1ms のタイマー割り込みから呼び出す。  Isig_tim の処理  全タスクループ   タイムアウト値が 0 以外   タイムアウト値 -- == 0 か ?    wait 解除処理  Wait 解除処理    1.TCB を WAIT  READY 状態に変更    2.TCB をレディーキューにつなげる   タスクスイッチは、ディスパッチャで実行される
  • 34. 34 イ.制作したカーネルを用いる際の問題点の把 握  1. 実行速度  2.RAM 利用削減  2 点改善事項  コンテキストの保存と復元を割り込み では 2 度行っている  コンテキスト領域を固定で RAM を使用   タスクスタックを利用
  • 35. 35 まとめ  演習 8-3 がカーネルの処理の一般的な 実装の形  パターン化  1) コントロールブロックを直す  2) 待ち行列に並べる、取り出す