宇野 俊夫 監修
有限会社ハラパン・メディアテック 編集
有限会社ハラパン・メディアテック 監修
宇野 みれ 編集
Qing Li 著
Carolone Yao 著
本書は、主に組込みコンピューティングの初級および中級ソフトウェア開発者を対象としています。
リアルタイム組込みシステム開発は初めて、という熟練開発者にとっても本書のアプローチは役立つことでしょう。リアルタイムシステムのソフトウェア設計レビューを担当するテクニカルマネージャにとっても、設計・実装フェーズの情報が役立つでしょう。電気工学、情報科学の学生の参考書としても使えます。
本書は読者が少なくとも1つのプログラミング言語に習熟しており、ソフトウェアの開発にある程度の経験があることを想定しています。(著者前書きより)
第1章 概要
1.1 組込みシステムの実例と定義
1.1.1 家庭内の組込みシステム
1.1.2 オフィスの組込みシステム
1.1.3 レジャー向けの組込みシステム
1.1.4 組込みシステムの定義
1.1.5 組込みプロセッサとアプリケーションアウェアネス
1.1.6 ハードウェア/ソフトウェア共同設計モデル
1.1.7 クロスプラットフォーム開発
1.1.8 ソフトウェアストレージとアップグレード性
1.2 リアルタイムで動作する組込みシステムの定義
1.2.1 リアルタイムシステム
1.2.2 リアルタイムシステムの特性
1.2.3 ハード/ソフトリアルタイムシステム
1.3 組込みシステムのトレンドと将来
1.4 まとめ
第2章 組込みシステム開発の基礎
2.1 はじめに
2.2 リンカとリンキングプロセス
2.3 ELFオブジェクトファイルフォーマット
2.4 ターゲット組込みシステムへの実行可能イメージのマッピング
2.4.1 リンカコマンドファイル
2.4.2 実行可能イメージをマッピングする
2.4.3 実例
2.5 まとめ
第3章 組込みシステムの初期化
3.1 はじめに
3.2 ターゲットシステムツールとイメージ転送
3.2.1 組込みローダ
3.2.2 組込みモニタ
3.2.3 ターゲットデバッグエージェント
3.3 ターゲットのブートシナリオ
3.3.1 RAMをデータ領域として使用しROMから実行する
3.3.2 ROMから転送後にRAMから実行する
3.3.3 ホストシステムから転送後にRAMから実行する
3.4 ターゲットシステムソフトウェアの初期化シーケンス
3.4.1 ハードウェアの初期化
3.4.2 RTOSの初期化
3.4.3 アプリケーションの初期化
3.5 オンチップデバッギング
3.6 まとめ
第4章 リアルタイムオペレーティングシステム入門
4.1 はじめに
4.2 オペレーティングシステムの歴史
4.3 RTOSの定義
4.4 スケジューラ
4.4.1 スケジュール可能なエンティティ
4.4.2 マルチタスク
4.4.3 コンテキストスイッチ
4.4.4 ディスパッチャ
4.4.5 スケジューリングアルゴリズム
4.5 オブジェクト
4.6 サービス
4.7 RTOSの主な特色
4.7.1 信頼性
4.7.2 予測可能性
4.7.3 パフォーマンス
4.7.4 コンパクトさ
4.7.5 スケーラビリティ
4.8 まとめ
第5章 タスク
5.1 はじめに
5.2 タスクとは
5.3 タスクの状態とスケジューリング
5.3.1 レディ状態
5.3.2 実行状態
5.3.3 ブロック状態
5.4 典型的なタスク操作
5.4.1 タスクの生成と削除
5.4.2 タスクスケジューリング
5.4.3 タスク情報の取得
5.5 典型的なタスク構造
5.5.1 完了までの実行するタスク
5.5.2 エンドレスループするタスク
5.6 同期/通信と並行処理
5.7 まとめ
第6章 セマフォ
6.1 はじめに
6.2 セマフォの定義
6.2.1 バイナリセマフォ
6.2.2 カウンティングセマフォ
6.2.3 mutexセマフォ
6.3 典型的なセマフォ操作
6.3.1 セマフォの作成と削除
6.3.2 セマフォの取得とリリース
6.3.3 セマフォのタスク待ちリストのクリア
6.3.4 セマフォ情報の取得
6.4 一般的なセマフォの利用法
6.4.1 ウェイト&シグナル同期
6.4.2 マルチタスクのウェイト&シグナル同期
6.4.3 クレジットトラッキング同期
6.4.4 単一の共有リソースアクセス同期
6.4.5 再帰的共有リソースアクセスの同期
6.4.6 共有リソースへの複数アクセス同期
6.5 まとめ
第7章 メッセージキュー
7.1 はじめに
7.2 メッセージキューの定義
7.3 メッセージキューの状態
7.4 メッセージキューの内容
7.5 メッセージキューのストレージ
7.5.1 システムプール
7.5.2 プライベートバッファ
7.6 典型的なメッセージキュー操作
7.6.1 メッセージキューの作成/削除
7.6.2 メッセージの送受信
7.6.3 メッセージキュー情報の取得
7.7 典型的なメッセージキュー利用法
7.7.1 非インターロック/一方向データ通信
7.7.2 インターロック/一方向データ通信
7.7.3 インターロック/双方向データ通信
7.7.4 ブロードキャスト通信
7.8 まとめ
第8章 パイプ/レジスタ/シグナル/条件変数などのカーネルオブジェクト
8.1 はじめに
8.2 パイプ
8.2.1 パイプコントロールブロック
8.2.2 パイプの状態
8.2.3 名前付きパイプと名前なしパイプ
8.2.4 典型的なパイプ操作
8.2.5 典型的なパイプの使用法
8.3 イベントレジスタ
8.3.1 イベントレジスタコントロールブロック
8.3.2 典型的なイベントレジスタ
8.3.3 イベントレジスタの典型的な利用法
8.4 シグナル
8.4.1 シグナルコントロールブロック
8.4.2 典型的なシグナル操作
8.4.3 典型的なシグナルの利用法
8.5 条件変数
8.5.1 条件変数コントロールブロック
8.5.2 典型的な条件変数操作
8.5.3 典型的な条件変数の使用法
8.6 まとめ
第9章 さまざまなリアルタイムOSサービス
9.1 はじめに
9.2 さまざまなビルディングブロック
9.2.1 TCP/IPプロトコルスタック
9.2.2 ファイルシステムコンポーネント
9.2.3 リモートプロシージャコールコンポーネント
9.2.4 コマンドシェル
9.2.5 ターゲットデバッグエージェント
9.2.6 その他のコンポーネント
9.3 コンポーネントの構成
9.4 まとめ
第10章 例外と割込み
10.1 はじめに
10.2 例外と割込みとは
10.3 例外と割り込みのアプリケーション
10.3.1 内部エラーと特別な条件管理
10.3.2 ハードウェアの並行性とサービス要件管理
10.4 例外と割込みの詳細
10.4.1 プログラム可能な割込みコントローラと例外割込み
10.4.2 一般的な例外の分類
10.4.3 一般的な例外の優先度
10.5 一般例外の処理
10.5.1 例外ハンドラのインストール
10.5.2 プロセッサ状態の保存
10.5.3 例外ハンドラのロードと起動
10.5.4 ネストされた例外とスタックオーバーフロー
10.5.5 例外ハンドラ
10.6 スプリアス割込みの性質
10.7 まとめ
第11章 タイマとタイマサービス
11.1 はじめに
11.2 リアルタイムクロックとシステムクロック
11.3 プログラマブルインターバルタイマ(PIT)
11.4 タイマ割込みサービスルーチン
11.5 ソフトタイマ
11.5.1 処理のディレイの可能性
11.5.2 実装上の考慮点
11.6 タイミングホール
11.6.1 課題
11.6.2 階層的タイミングホイール
11.7 ソフトタイマとタイマ関連の操作
11.8 まとめ
第12章 I/Oサブシステム
12.1 はじめに
12.2 I/O基本コンセプト
12.2.1 ポートマップドI/O vs メモリマップI/OとDMA
12.2.2 キャラクタモードとブロックモードのデバイス
12.3 I/Oサブシステム
12.3.1 標準I/O関数
12.3.2 汎用関数をドライバ関数にマップする
12.3.3 デバイスとデバイストライ場の関連付け
12.4 まとめ
第13章 メモリ管理
13.1 はじめに
13.2 組込みシステムの動的メモリ割当て
13.2.1 メモリフラグメンテーションとコンパクション
13.2.2 malloc関数とfree関数の例
13.2.3 フリーブロックの迅速な発見
13.2.4 free操作
13.3 固定サイズのメモリ管理
13.4 メモリ関数のブロッキングと非ブロッキング
13.5 ハードウェアMMU
13.6 まとめ
第14章 並行処理のためのアプリケーションのモジュール化
14.1 はじめに
14.2 アプリケーション分解のアウトサイド―インアプローチ
14.3 並行処理の特定のためのガイドラインと推奨開発技法
14.3.1 並行処理の単位
14.3.2 擬似並行処理と真の並行実行
14.3.3 ガイドライン
14.4 スケジューラビリティ分析:レートモノトニック分析
14.4.1 ベーシックRMAスケジューラビリティテスト
14.4.2 拡張RMAスケジューラビリティテスト
14.5 まとめ
第15章 同期と通信
15.1 はじめに
15.2 同期
15.2.1 リソース同期
15.2.2 アクティビティ同期
15.2.3 バリアの実装
15.3 通信
15.4 リソース同期のメソッド
15.4.1 割込みロック
15.4.2 プリエンプションロック
15.5 クリティカルセクション
15.6 一般的な実践的デザインパターン
15.6.1 同期的なアクティビティ同期
15.6.2 シグナルを使った非同期イベントの通知
15.6.3 リソース同期
15.7 特定のソリューションのデザインパターン
15.7.1 フロー制御を伴うデータ転送
15.7.2 複数データ通信チャネルからの非同期的なデータ受信
15.7.3 複数の入力通信チャネル
15.7.4 読取り側と書込み側の同期に状態変数を使用する
15.7.5 タスク間で高優先度のデータを送信する
15.7.6 条件変数を使用してリーダ/ライターロックを実装する
15.8 まとめ
第16章 デッドロック/優先度の逆転
16.1 はじめに
16.2 リソースの分類
16.3 デッドロック
16.3.1 リソース要求モデル
16.3.2 デッドロックの検出
16.3.3 デッドロックからの復旧
16.3.4 デッドロックの回避
16.3.5 デッドロックの予防
16.4 優先度の逆転問題
16.4.1 優先度継承プロトコルルール
16.4.2 シーリング優先度プロトコル
16.4.3 優先度シーリングプロトコル
16.5 まとめ
付録
内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。
正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。
本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。
刷数は奥付(書籍の最終ページ)に記載されています。
書籍の種類:
書籍の刷数:
本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。
対象の書籍は正誤表がありません。
発生刷 | ページ数 | 書籍改訂刷 | 電子書籍訂正 | 内容 | 登録日 | ||||||
---|---|---|---|---|---|---|---|---|---|---|---|
1刷 | 027 7~8行目 |
4刷 | 未 |
|
2007.03.13 | ||||||
1刷 | 030 2行目 |
4刷 | 未 |
|
2007.03.13 | ||||||
1刷 | 044 5~6行目 |
6刷 | 未 |
|
2013.07.25 | ||||||
1刷 | 070 図5.1の4行上 |
5刷 | 未 |
|
2011.09.26 | ||||||
1刷 | 072 図5.2 |
4刷 | 未 |
|
2006.09.25 | ||||||
1刷 | 080 リスト5.1 |
5刷 | 未 |
|
2011.09.26 | ||||||
1刷 | 084 下から5行目 |
5刷 | 未 |
|
2011.09.20 | ||||||
1刷 | 112 本文2行目 |
5刷 | 未 |
|
2011.09.26 | ||||||
1刷 | 112 リスト7.3の1行目 |
5刷 | 未 |
|
2011.09.26 | ||||||
1刷 | 112 リスト7.3の9行目 |
5刷 | 未 |
|
2012.10.23 | ||||||
1刷 | 122 本文上から6行目 |
2刷 | 未 |
|
2006.03.03 | ||||||
1刷 | 122 下から3行目 |
5刷 | 未 |
|
2011.09.26 | ||||||
1刷 | 128 図8.10、右下の「シグナルルーチン」 |
5刷 | 未 |
|
2011.09.26 | ||||||
1刷 | 139 上から2行目および図中 |
2刷 | 未 |
|
2006.03.03 | ||||||
1刷 | 144 下から7行目 |
5刷 | 未 |
|
2011.09.29 | ||||||
1刷 | 145 5行目 |
5刷 | 未 |
|
2011.09.29 | ||||||
1刷 | 156 上から15行目 |
2刷 | 未 |
|
2006.03.03 | ||||||
1刷 | 167 上から1行目 |
2刷 | 未 |
|
2006.03.03 | ||||||
1刷 | 229 式を含めて5行目 |
5刷 | 未 |
|
2011.09.29 | ||||||
1刷 | 232 図15.1(中央) |
5刷 | 未 |
|
2011.09.26 | ||||||
1刷 | 235 3行目 |
5刷 | 未 |
|
2011.09.26 | ||||||
1刷 | 236 リスト15.1(P236の2行目) |
5刷 | 未 |
|
2011.09.29 | ||||||
1刷 | 250 リスト15.3(P250の9行目) |
5刷 | 未 |
|
2011.09.26 | ||||||
1刷 | 251 リスト15.4 8行目/12行目 |
5刷 | 未 |
|
2011.09.29 | ||||||
1刷 | 253 「注意」の1行目 |
5刷 | 未 |
|
2011.09.20 | ||||||
1刷 | 253 リスト15.5 2行目 |
5刷 | 未 |
|
2011.09.29 | ||||||
1刷 | 256 リスト15.8 4~6行目 |
5刷 | 未 |
|
2011.09.29 | ||||||
1刷 | 256 リスト15.9の1行目 |
5刷 | 未 |
|
2011.09.29 | ||||||
1刷 | 256 リスト15.9の7行目 |
5刷 | 未 |
|
2012.10.23 | ||||||
1刷 | 256 リスト15.9、下から4行目 |
5刷 | 未 |
|
2012.10.23 | ||||||
1刷 | 256 リスト15.9、下から2行目 |
5刷 | 未 |
|
2012.10.23 | ||||||
1刷 | 257 リスト15.9 末尾から2行目 |
5刷 | 未 |
|
2011.09.29 | ||||||
1刷 | 272 最下行 |
5刷 | 未 |
|
2011.09.20 | ||||||
4刷 | 032 表2.3 .bssセクションの摘要 |
5刷 | 未 |
|
2009.10.13 |
yshigeru さん
2008-11-17
リアルタイムOSに限定した珍しいOSの本。翻訳はよくない。
yu2ta7ka さん
2021-01-24
タイトル名が体を表している良著。リアルタイムな制約があり機械にソフトウェアを組込むシステムに関して、必要な知識の基礎が記されている。2005年の書籍であるが、ベースは変わっていないので問題無い。CH04までは概論的な話でここらへんの話題すらネット上では整理されていないので、組込みに興味あるプログラミング経験者は読んで損はしない。CH05以降の各論は理解不十分なところもあるので適宜再読していきたい。
fjt7tdmi さん
「リアルタイム組込み OS」というタイトルだが、内容としてはカーネルオブジェクト(セマフォなど)の仕組みの解説が多くの割合を占める。 リッチな OS に興味がある方も読んで損はないと思う。