FreeBSD と DragonFlyBSD における実行モデルの違い

本資料は、FreeBSD と DragonFly BSD におけるカーネル内部の実行モデルの違い、
特に以下の点にフォーカスしてまとめました。あってるかは知りません。

  • 割り込みの扱い
  • スレッド / 実行主体の考え方
  • DragonflyBSDならではのLWKTとは

2. FreeBSD:実行主体(人)中心

FreeBSD では、OSの内部処理を考える際の軸は「今どのスレッドが実行されているか」である。

  • 現在実行中のスレッド(current thread)が判断の中心
  • 割り込みは、既存の実行文脈に割り込んで処理される
  • スケジューラは「誰を次に走らせるか」を常に判断する

例:飲食店のくそバイト方式(人間中心モデル)

  • バイト = スレッド / プロセス
  • 店長 = スケジューラ
  • 仕事 = 割り込み・処理要求

状況例


店長:「いまAくん、手空いてるな」
店長:「これもやって」
Aくん:「もう終わりました」
店長:「じゃあ次はこれ」

仕事を早く終わらせられる人ほど、次の仕事がどんどん与えられる
一方で、処理が遅い人が担当している仕事は、途中で他人に移されることもある。

OS的な対応関係

  • 「今どのスレッドが動いているか」を中心に管理
  • 割り込みは「今動いている文脈」に割り込んで処理
  • 実行時に頻繁に判断が入る

人間にとって直感的で、
「今なにをすればいいか」「誰が重いか」を把握しやすい設計。

その一方、
割り込みや並列処理が多くなると文脈切替やロックが増えやすい。

3. DragonFly BSD:イベント(仕事)中心

DragonFly BSD では、実行主体ではなく「何が起きたか(イベント)」が中心となる。

  • 割り込みはイベントとして扱われる
  • イベントはメッセージ化され、対応する LWKT に配送される
  • 実行主体は「仕事を処理する役割」として位置づけられる

人(スレッド)を見て仕事を振るのではなく、
仕事の種類を見て、あらかじめ決められた担当に流す
という設計になっている。

例:ベルトコンベア工場ライン方式(仕事中心モデル)

  • ライン = CPU コア
  • 機械 = LWKT
  • 流れてくる部品 = 割り込み・イベント

初期設計


ラインA:ネットワーク処理
ラインB:ディスク処理
ラインC:USB処理

この役割分担は 最初にほぼ固定 される。

実行中の挙動


イベント発生
→ 種類を判定
→ 対応するラインに投入
  • ラインAが速ければすぐ空く
  • ラインBが遅ければずっと処理中
  • 他ラインが暇でも手助けしない

「人が暇だから助けに行く」という判断は原則行われない。
仕事は必ず担当ラインに流れる

OS的な対応関係

  • 「何が起きたか」を中心に処理を決定
  • スレッドは仕事を処理する“役割”にすぎない
  • 実行時の判断を極力排除

人間から見ると冷たいが、割り込み洪水や高負荷状態でも構造が壊れにくい。

4. 比喩的まとめ

  • FreeBSD:人を見て仕事を割り振る上司
  • DragonFly BSD:仕事の流れを最初に決める上司

どちらが優れているという話ではなく、
「何を中心に世界を見るか」が異なる設計思想である。

5. LWKT(Light Weight Kernel Thread)とは何か

DragonFly BSD において、これまで例として説明してきた
「工場ラインの機械」に相当する実体が
LWKT(Light Weight Kernel Thread)である。

  • LWKT は DragonFly BSD 固有のカーネルスレッド機構
  • ユーザープロセスではなく、カーネル内部処理のための実行主体
  • 割り込みやイベントを処理するために設計されている

DragonFly BSD では、割り込みや内部イベントは
直接「今動いているスレッド」に押し込まれるのではなく、
あらかじめ割り当てられた LWKT にメッセージとして配送される

このため、実行の判断は
「どのスレッドが空いているか」ではなく、
「このイベントはどの LWKT の担当か」
によって行われる。

6. まとめ

  • 本資料はユーザープロセス管理ではなく、カーネル内部の実行モデルの話である
  • FreeBSD は実行主体(スレッド)中心
  • DragonFly BSD はイベント中心
  • 設計思想の違いが、コードの書き方・見え方に直結している

\ Get the latest news /

Leave a Reply

Your email address will not be published. Required fields are marked *