6.5 セマフォ セマフォ(semaphore): 複数のタスク(もしくはスレッド)が「同期」または「相互排除」の制御のために取得(acquire)・リリース(release)できるカーネルオブジェクトの総称
バイナリセマフォ ブロックタスク ありの場合の release 使用可能 使用不可 作成(1) acquire 作成(0) release
排他制御 AccessTask() { … acquire(); 共有資源に排他的にアクセス release(); }
ウェイト&シグナル同期 Signaling Task release acquire Waiting Task1 バイナリセマフォ Signaling Task release acquire Waiting Task1 初期値:使用不可(acquire は ブロック)
ウェイト&シグナル同期 WaitingTask() { … acquire(); } SignalingTask() { … release(); }
バイナリセマフォ ブロックタスク ありの場合の release 使用可能 使用不可 作成(1) acquire 作成(0) release オプション機能 flush: すべてのブロックタスクをブロック解除
マルチタスク-ウェイト&シグナル同期 Waiting Task1 acquire Signaling Task flush Waiting バイナリセマフォ Signaling Task flush Waiting Task2 acquire Waiting Task3 初期値:使用不可
mutex(mutual exclusion)セマフォ ブロックタスク ありの場合の unlock unlocked locked lock 作成 unlock (オーナーのみ) オプション機能 再帰lock-unlock: lockカウンタ 優先度継承プロトコル、シーリング優先度プロトコル
カウンティングセマフォ acquire (カウント--) acquire 作成(𝑛) カウント=𝑛 作成(0) カウント=0 使用可能 使用不可 release release (カウント++)
6.6 その他のタスク間通信オブジェクト
イベントレジスタ(フラグ) set(ビットパターン) clear(ビットパターン) 1 1 1 receive-and(ビットパターン) 1 1 1 receive-and(ビットパターン) receive-or(ビットパターン)
ウェイト&シグナル同期 WaitingTask() { … receive(パターン); } SignalingTask() { … set(パターン); }
メッセージキュー(メールボックス) メッセージキュー send(m) receive() 送信待ち タスク 受信待ち タスク
非インターロック型メッセージ通信 SourceTask() { … send(); } SinkTask() { … recieve();
インターロック型メッセージ通信 SourceTask() { … send(); acquire(); } SinkTask() { … recieve(); release(); }
アプリケーション初期化タスク ApplicationInitializing() { Create kernel objects; Create&Start ApplicationTasks; Delete itself; }
6.7 メモリ管理
内部断片化と外部断片化 割り当て失敗 ブロックサイズ=32 A= malloc(120) free(D) B= malloc(20) E=malloc(40) 割り当て失敗 C= malloc(50) D= malloc(32) free(B)
コンパクション(外部断片化の解消) E= malloc(40) ⇒ コンパクション起動(移動ブロックへのアクセス不可) ⇒ コンパクション起動(移動ブロックへのアクセス不可) メモリブロックの割当て
メモリプール方式 32 50 128
6.8 組み込みシステムの開発環境
通常のソフトウェアの開発環境 コンパイラ エディタ デバッガ 標準ライブラリ 汎用オペレーティングシステム 開発環境 汎用CPU 開発ソフトウェア 標準ライブラリ 汎用オペレーティングシステム 実行環境 サーバーCPU
組込みソフトウェアの開発環境 コンパイラ エディタ デバッガ 標準ライブラリ 汎用オペレーティングシステム 開発環境 汎用CPU 開発ソフトウェア(ROM) 特化されたライブラリ リアルタイム組込みOS 実行環境 専用CPU(開発中?)
テストとデバグ テスト開始 テスト実行 Yes OK? No No 原因究明 十分? デ バ Yes 対策実施 グ テスト終了 テストへの反映 十分? No デ バ グ Yes テスト終了
ターゲットデバグエージェント クロスプラットフォーム開発環境 e.g. 開発ホスト: Linux ターゲットシステム: Andoroid ホストシステム上でのソースレベルデバッグに必要な情報を提供するターゲットデバグエージェント ・メモリ、レジスタのR/W ・ブレークポイントの設定・削除 ・シングルステップ実行 ・ホストデバッガとの通信
ターゲットデバグエージェント ターゲットプログラム ホストデバッガ ・実行制御のための書換え ・デバッガインタフェース デバグエージェント ・参照、変更 ・ホストとの通信 ホストデバッガ ・デバッガインタフェース ・高級言語インタフェース ・ユーザインタフェース