← トップ

Operating Systems / FreeRTOS

動いて理解する OS

OS の教科書の多くは Linux のような大きな OS を扱いますが、それらは中身が大きすぎて「OS の芯」が見えにくいという問題があります。FreeRTOS のカーネルは C 言語で 1 万行に満たないのに、OS が OS であるための中核——タスクとスケジューラ、ブロックと起床、排他制御、時間の管理——をすべて備えています。この全22章は、その 1 万行を下から順に読み切るためのものです。CPU 固有の移植層は扱いません。移植層が約束する 5 つの契約だけ先に定義してしまえば、カーネルのロジックは完全に追えるからです。全章に触って動かせるデモ(LIVE・計26点)を埋め込みました。

第 I 部 — なぜ OS が要るのか

先に「OS を使う理由」を体で分かっておく。OS の機能はすべて、ここで見る破綻への処方箋です。

CH 01OS がない世界スーパーループはどこで破綻するのか。決定打は「途中で待てない」こと。▶ LIVE CH 02タスクという抽象タスク = 関数 + スタック + TCB。並行は並列ではない。▶ LIVE ×2 CH 03FreeRTOS の全体像カーネルの責務と、移植層が約束する 5 つの契約。▶ LIVE

第 II 部 — スケジューラの中核

カーネルの心臓。ここが腹に落ちれば、残りは全部応用です。

CH 04タスクの状態機械状態とは「どのリストに入っているか」。それだけ。▶ LIVE CH 05TCB とコンテキストスイッチ保存するのはスタックポインタ 1 個だけ。魔法ではない。▶ LIVE ×2 CH 06スケジューリング方針規則は一行。「実行可能な最高優先度が、必ず走っている」。▶ LIVE CH 07Ready リストの実装CLZ 1 命令で最高優先度が決まる。リアルタイムの根拠。▶ LIVE ×2 CH 08ティックとタイムスライスvTaskDelay(1) は「1 ティック待つ」ではない。誤差の話。▶ LIVE CH 09アイドルタスクとフック「規則の例外をなくす」ための常駐タスク。省電力の要でもある。▶ LIVE

第 III 部 — 待つ・起こす

OS の最大の価値である「途中で待つ」を、どう実装しているか。

CH 10ブロックと遅延リスト49.7 日ごとの折り返しを、リスト 2 本の交換で乗り切る。▶ LIVE CH 11キュー値渡し・ブロック・スレッドセーフ。他の全部の土台でもある。▶ LIVE CH 12セマフォとミューテックス実装は同じキュー。決定的な違いは「所有者」の有無だけ。▶ LIVE CH 13優先度逆転と優先度継承1997 年、火星の探査機を止めたバグ。そして無線で送られた修正。▶ LIVE CH 14タスク通知とイベントグループTCB に直接書くだけ。キューより速く、RAM も食わない。▶ LIVE

第 IV 部 — 時間とメモリ

組み込みで最も枯渇する資源の扱い方。ここでの選択が設計を決めます。

CH 15ソフトウェアタイマxTimerStart() はタイマを開始しない。コマンドを送るだけ。▶ LIVE CH 16メモリ管理heap_1〜heap_5 と静的確保。断片化を目で見る。▶ LIVE CH 17スタックとオーバーフローRTOS で最も多いバグ。原因と症状が別のタスクに現れる。▶ LIVE

第 V 部 — 正しく動かす

RTOS を入れると生まれる新しい種類のバグと、その避け方。

CH 18割り込みとの境界FromISR がなぜ別 API なのか。configMAX_SYSCALL の意味。▶ LIVE CH 19排他制御の設計レース・デッドロック・再入。共有しないのが最強の対策。▶ LIVE CH 20リアルタイム性の解析レートモノトニックと応答時間解析。「間に合う」を計算で示す。▶ LIVE ×2 CH 21デバッグとトレース止めた瞬間にタイミングが変わる。止めずに見る技術。▶ LIVE CH 22設計指針と他の OS との比較Zephyr・POSIX・Linux と、どこが同じでどこが違うか。▶ LIVE

目的別の近道

OS の芯だけ知りたい02 → 04 → 05 → 06 → 07 → 10
とりあえず FreeRTOS を使いたい03 → 04 → 06 → 11 → 12 → 18
バグに苦しんでいる17 → 18 → 19 → 21
応答時間を保証したい06 → 08 → 13 → 18 → 20
省メモリで作りたい14 → 16 → 17
他の OS へ移りたい02 → 04 → 11 → 22
ぜんぶ01 → 22(推奨)