リアルタイム組込みOS基礎講座(宇野 俊夫 有限会社ハラパン・メディアテック 有限会社ハラパン・メディアテック 宇野 みれ Qing Li Carolone Yao)|翔泳社の本
  1. ホーム >
  2. 書籍 >
  3. リアルタイム組込みOS基礎講座

リアルタイム組込みOS基礎講座

監修
編集
監修
編集


形式:
書籍
発売日:
ISBN:
9784798110042
定価:
3,740(本体3,400円+税10%)
仕様:
B5変・312ページ
カテゴリ:
ハードウェア・自作
キーワード:
#OS・アプリケーション,#開発環境,#ネットワーク・サーバ・セキュリティ,#システム運用

ユビキタス社会を切り拓く普遍的で汎用的な技術知識を
豊富な図解と例示で大解説!!

本書は、主に組込みコンピューティングの初級および中級ソフトウェア開発者を対象としています。
リアルタイム組込みシステム開発は初めて、という熟練開発者にとっても本書のアプローチは役立つことでしょう。リアルタイムシステムのソフトウェア設計レビューを担当するテクニカルマネージャにとっても、設計・実装フェーズの情報が役立つでしょう。電気工学、情報科学の学生の参考書としても使えます。
本書は読者が少なくとも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 まとめ

付録

本書は付属データの提供はございません。

お問い合わせ

内容についてのお問い合わせは、正誤表、追加情報をご確認後に、お送りいただくようお願いいたします。

正誤表、追加情報に掲載されていない書籍内容へのお問い合わせや
その他書籍に関するお問い合わせは、書籍のお問い合わせフォームからお送りください。

利用許諾に関するお問い合わせ

本書の書影(表紙画像)をご利用になりたい場合は書影許諾申請フォームから申請をお願いいたします。
書影(表紙画像)以外のご利用については、こちらからお問い合わせください。

追加情報はありません。

ご購入いただいた書籍の種類を選択してください。

書籍の刷数を選択してください。

刷数は奥付(書籍の最終ページ)に記載されています。

現在表示されている正誤表の対象書籍

書籍の種類:

書籍の刷数:

本書に誤りまたは不十分な記述がありました。下記のとおり訂正し、お詫び申し上げます。

対象の書籍は正誤表がありません。

最終更新日:2013年07月25日
発生刷 ページ数 書籍改訂刷 電子書籍訂正 内容 登録日
1刷 027
7~8行目
4刷
p_addrはプログラムセクションがターゲットメモリ内で存在すべきアドレスです。
p_addrはターゲットメモリでプログラムセグメントが存在すべきアドレスです。
2007.03.13
1刷 030
2行目
4刷
この例をMEMORYディレクティブに翻訳してみましょう(リスト2.4)。
この例をSECTIONディレクティブに翻訳してみましょう(リスト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刷
RunToCompletion Task()
{
Initialize application
Create 'endless loop tasks' Create Kernel objects
Delete or suspend this task
}

Initialize」の綴りが間違っていました。
endless loop tasks」は前後とも「'(シングルクォーテーション)」で囲みます。
2011.09.26
1刷 084
下から5行目
5刷
FIFO(first in/first our
FIFO(first in/first out
2011.09.20
1刷 112
本文2行目
5刷
tSouceTask
tSourceTask
2011.09.26
1刷 112
リスト7.3の1行目
5刷
tSourceTask( )
tClientTask( )
2011.09.26
1刷 112
リスト7.3の9行目
5刷
tSinkTask( )
tServerTask( )
2012.10.23
1刷 122
本文上から6行目
2刷
パイプのセレクト
パイプのセレクト(選択)
2006.03.03
1刷 122
下から3行目
5刷
グループのどれかが書込み用空間が利用できる
グループのどれかが書込み用空間が利用できる
2011.09.26
1刷 128
図8.10、右下の「シグナルルーチン」
5刷
singal_routine( )
signal_routine( )
2011.09.26
1刷 139
上から2行目および図中
2刷
Berkeleyソケットインタフェース
バークリーソケットインタフェース
2006.03.03
1刷 144
下から7行目
5刷
tcpip_int関数
tcpip_init関数
2011.09.29
1刷 145
5行目
5刷
net_comf.hに似たものです。
net_conf.hに似たものです。
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刷
バイナリセマフォを仕様して、
2つのバイナリセマフォを使用して
2011.09.26
1刷 236
リスト15.1(P236の2行目)
5刷
br-br_count = 0;
br->br_count = 0;

「>」が抜けていました。
2011.09.29
1刷 250
リスト15.3(P250の9行目)
5刷
enable(intterputs)
enable(interrupts)
2011.09.26
1刷 251
リスト15.4 8行目/12行目
5刷
if (the_ebents & EVENT_TYPE_TIMER)     counter = 0     disable(interrupts)     while (Get(Counting_Semaphore))         counter = counater + 1
if (the_events & EVENT_TYPE_TIMER)     counter = 0     disable(interrupts)     while (Get(Counting_Semaphore))         counter = counter + 1
2011.09.29
1刷 253
「注意」の1行目
5刷
event_recieveへの呼出しは
event_receiveへの呼出しは
2011.09.20
1刷 253
リスト15.5 2行目
5刷
Remove message from message que
Remove message from message queue
2011.09.29
1刷 256
リスト15.8 4~6行目
5刷
while (rwlodck->rw_count ! = 0)     wait_cond(&rwlock->write_condvar, &rwlock->guard_mutes); rwlock->rw_count = -1
while (rwlock->rw_count != 0)     wait_cond(&rwlock->write_condvar, &rwlock->guard_mutex); rwlock->rw_count = -1;

・「rwlock」に「d」が入っていました
・4行目の「!」と「=」の間の空白を削除します
・「mutex」の最後が「s」になっていました
・5行目の行末に「;」(セミコロン)を追加します
2011.09.29
1刷 256
リスト15.9の1行目
5刷
acquite_read(rwlock_t *rwlock)
acquire_read(rwlock_t *rwlock)

acquire」の綴りを訂正します。
2011.09.29
1刷 256
リスト15.9の7行目
5刷
rwlock->r_waiting = 0
rwlock->r_waiting = 0;

行末に「;」(セミコロン)を追加します。
2012.10.23
1刷 256
リスト15.9、下から4行目
5刷
if (rwlock->rw_count = 0)
if (rwlock->rw_count == 0)

= をもう1つ追加します。
2012.10.23
1刷 256
リスト15.9、下から2行目
5刷
unlock_mutex(&rwlock->guard_mutex)
unlock_mutex(&rwlock->guard_mutex);

行末に「;」(セミコロン)を追加します。
2012.10.23
1刷 257
リスト15.9 末尾から2行目
5刷
for (I = rwlock->read_waiting; i > 0; i--)
for (i = rwlock->read_waiting; i > 0; i--)

i」を小文字に訂正します。
2011.09.29
1刷 272
最下行
5刷
すべてのリソースが認めえれたときに
すべてのリソースが認められたときに
2011.09.20
4刷 032
表2.3 .bssセクションの摘要
5刷
.bss  128KB  RW  初期化された64KB以上のデータを格納
.bss  128KB  RW  初期化されていない64KB以上のデータを格納
2009.10.13

感想・レビュー

yshigeru さん

2008-11-17

リアルタイムOSに限定した珍しいOSの本。翻訳はよくない。

yu2ta7ka さん

2021-01-24

タイトル名が体を表している良著。リアルタイムな制約があり機械にソフトウェアを組込むシステムに関して、必要な知識の基礎が記されている。2005年の書籍であるが、ベースは変わっていないので問題無い。CH04までは概論的な話でここらへんの話題すらネット上では整理されていないので、組込みに興味あるプログラミング経験者は読んで損はしない。CH05以降の各論は理解不十分なところもあるので適宜再読していきたい。

fjt7tdmi さん

「リアルタイム組込み OS」というタイトルだが、内容としてはカーネルオブジェクト(セマフォなど)の仕組みの解説が多くの割合を占める。 リッチな OS に興味がある方も読んで損はないと思う。