DragonFly BSD 6.2.1 UEFIブートローダー | |
| 開発者 | マシュー・ディロン |
|---|---|
| OSファミリー | Unix系(BSD) |
| 作業状態 | 現在 |
| ソースモデル | オープンソース |
| 初回リリース | 1.0 / 2004年7月12日 |
| 最新リリース | 6.4.0 / 2022年12月30日[1] |
| リポジトリ |
|
| 利用可能 | 英語 |
| パッケージマネージャー | パッケージ |
| プラットフォーム | 64ビット |
| カーネルタイプ | ハイブリッド[2] |
| ユーザーランド | BSDA の |
| デフォルトの ユーザーインターフェース | Unixシェル |
| ライセンス | BSDS [3] |
| 公式サイト | 詳しくはこちら |
DragonFly BSD は、 FreeBSD 4.8から分岐した、フリーでオープンソースの Unix ライクな オペレーティングシステム です。1980 年代後半から 1990 年代前半にかけてAmiga の開発に携わり、1994 年から 2003 年にかけて FreeBSD の開発に携わったMatthew Dillon は、2003 年 6 月に DragonFly BSD の開発を開始し、2003 年 7 月 16 日に FreeBSD メーリングリストで発表しました。[4]
ディロンは、 FreeBSD 5 [5]でスレッドと対称型マルチプロセッシングに採用された技術がパフォーマンスの低下とメンテナンスの問題につながると考え、DragonFly を立ち上げました。彼は、FreeBSD プロジェクト内でこれらの予想される問題を修正しようとしました。[6]彼のアイデアの実装をめぐって他の FreeBSD 開発者と対立したため、[7]最終的にコードベースを直接変更する権限は取り消されました。それにもかかわらず、DragonFly BSD プロジェクトと FreeBSD プロジェクトは、バグ修正、ドライバー更新、その他の改善を共有しながら、現在も連携して作業しています。ディロンは、FreeBSD の開発中に自宅の庭でトンボを撮影したことにちなんで、このプロジェクトに名前を付けました。[要出典]
FreeBSD 4.xシリーズの論理的継続として意図されたDragonFlyは、軽量カーネルスレッド(LWKT)、カーネル内メッセージパッシングシステム、およびHAMMER ファイルシステムを実装し、FreeBSDから大きく逸脱しています。[8]多くの設計概念はAmigaOSの影響を受けています。[9]
システム設計
カーネル
開発中のカーネルメッセージングサブシステムは、Machなどのマイクロカーネルに見られるものと似ていますが、設計上それほど複雑ではありません。DragonFlyのメッセージングサブシステムは、同期または非同期のいずれかの方法で動作する機能を備えており、この機能を使用して、特定の状況で可能な限り最高のパフォーマンスを実現しようとします。[10]
開発者のマシュー・ディロン氏によると、デバイスの入出力(I/O) と仮想ファイルシステム(VFS) の両方のメッセージング機能の提供が進んでおり、これによりプロジェクトの残りの目標も達成できるとのことです。新しいインフラストラクチャにより、カーネルの多くの部分をユーザー空間に移行できるようになります。ここでは、大きなコードに絡み合った小さな部分ではなく、小さくて独立したプログラムになるため、デバッグが容易になります。さらに、特定のカーネルコードをユーザー空間に移行すると、システムの堅牢性が向上するという利点があります。ユーザー空間のドライバーがクラッシュしても、カーネルはクラッシュしません。[11]
システムコールはユーザーランド版とカーネル版に分割され、メッセージにカプセル化されています。これにより、標準システムコールのバリアントをユーザーランド互換レイヤーに移動することでカーネルのサイズと複雑さが軽減され、DragonFlyバージョン間の前方互換性と後方互換性が維持されます。Linuxやその他のUnix系OSの互換コードも同様に移行されています。[9]
スレッド
複数の命令セットアーキテクチャのサポートは対称型マルチプロセッシング(SMP)のサポートを複雑にするため、 [7] DragonFly BSD は現在、サポートをx86-64プラットフォームに限定しています。[12] DragonFly はもともとx86アーキテクチャで動作していましたが、バージョン 4.0 以降はサポートされなくなりました。バージョン 1.10 以降、DragonFly は 1:1 ユーザランドスレッド(ユーザランドスレッドごとに 1 つのカーネルスレッド)をサポートしています。[13]これは比較的シンプルで、メンテナンスも簡単なソリューションであると考えられています。[9] FreeBSD から継承された DragonFly は、マルチスレッドもサポートしています。[14]
DragonFly では、各CPUに独自のスレッド スケジューラがあります。スレッドは作成されるとプロセッサに割り当てられ、プロセッサ間でプリエンプティブに切り替えられることはありません。スレッドは、関係する CPU 間でプロセッサ間割り込み(IPI) メッセージを渡すことによってのみ移行されます。プロセッサ間のスレッド スケジューリングも、非同期 IPI メッセージを送信することによって行われます。スレッド サブシステムのこの明確な区分化の利点の 1 つは、対称型マルチプロセッサ システムのプロセッサのオンボードキャッシュに重複したデータが含まれないことです。これにより、システム内の各プロセッサが独自のキャッシュを使用してさまざまな作業対象を保存できるため、パフォーマンスが向上します。[9]
LWKTサブシステムは、複数のカーネルスレッド間で作業を分割するために使用されています(たとえば、ネットワークコードでは、プロセッサごとにプロトコルごとに1つのスレッドがあります)。これにより、さまざまなカーネルタスク間で特定のリソースを共有する必要がなくなり、競合が減少します。[7]
共有リソースの保護
マルチプロセッサマシンで安全に実行するには、共有リソース(ファイル、データ構造など)へのアクセスをシリアル化して、スレッドまたはプロセスが同時に同じリソースを変更しないようにする必要があります。複数のスレッドが共有リソースに同時にアクセスしたり変更したりするのを防ぐために、DragonFlyはクリティカルセクションとシリアル化トークンを使用して同時アクセスを防止します。LinuxとFreeBSD 5はどちらもマルチプロセッサシステムでより高いパフォーマンスを実現するために細粒度のミューテックスモデルを採用していますが、DragonFlyは採用していません。[7]最近まで、DragonFlyもsplを採用していましたが、これらはクリティカルセクションに置き換えられました。
LWKTサブシステム、IPIメッセージングサブシステム、新しいカーネルメモリアロケータを含むシステムのコアの多くはロックレスです。つまり、ミューテックスを使用せずに動作し、各プロセスは単一のCPUで動作します。クリティカルセクションは、各CPUごとに個別にローカル割り込みから保護するために使用され、現在実行中のスレッドがプリエンプトされないことを保証します。[13]
シリアル化トークンは、他の CPU からの同時アクセスを防ぐために使用され、複数のスレッドによって同時に保持される可能性があり、特定の時点で実行されているのはそれらのスレッドのうちの 1 つだけであることが保証されます。したがって、ブロックされたスレッドまたはスリープ状態のスレッドは、ミューテックスを保持しているスレッドとは異なり、他のスレッドが共有リソースにアクセスするのを妨げることはありません。シリアル化トークンを使用すると、ミューテックスの使用時にデッドロックや優先順位の逆転につながる可能性のある多くの状況を防ぐことができるほか、複数のスレッド間でリソースを共有する必要のある多くの手順の設計と実装が大幅に簡素化されます。シリアル化トークン コードは、現在 Linux で利用できる「読み取りコピー更新」機能に非常に似たものに進化しています。Linux の現在の RCU 実装とは異なり、DragonFly の実装では、コンピューター内のすべてのプロセッサではなく、同じトークンを競合するプロセッサのみが影響を受けるように実装されています。[15]
DragonFlyは、メモリ割り当てタスクにミューテックスもブロッキング操作も必要としない、マルチプロセッサセーフなスラブアロケータに切り替えました。 [16]これは最終的にユーザーランドの標準Cライブラリに移植され、FreeBSDのmalloc実装に取って代わりました。[17]
仮想カーネル
DragonFly 1.8リリース以降、 User-mode Linuxに似た仮想化メカニズムが導入され、[18]ユーザーはユーザーランドで別のカーネルを実行できるようになりました。仮想カーネル(vkernel)は、エミュレートされたネットワークおよびストレージインターフェイスを備えた完全に分離された環境で実行されるため、カーネルサブシステムのテストやクラスタリング機能が簡素化されます。[9] [11]
vkernel には実際のカーネルとの 2 つの重要な違いがあります。低レベルのハードウェア管理を処理するためのルーチンが多数欠けていることと、可能な限りカーネル内実装の代わりにC 標準ライブラリ(libc) 関数を使用していることです。実際のカーネルと仮想カーネルの両方が同じコード ベースからコンパイルされているため、プラットフォーム依存のルーチンと libc 関数の再実装がソース ツリー内で明確に分離されていることを意味します。[19]
vkernelは、実際のカーネルによって提供されるハードウェア抽象化の上で実行されます。これには、kqueueベースのタイマー、コンソール( vkernelが実行される仮想端末にマップされます)、ディスクイメージ、仮想カーネルイーサネットデバイス(VKE)が含まれ、すべてのパケットをホストのタップインターフェイスにトンネリングします。[20]
パッケージ管理
サードパーティのソフトウェアは、pkgngネイティブポートコレクション(DPorts)経由で、またはそこからバイナリパッケージとしてDragonFly上で利用できます。[21]
DragonFlyは当初、FreeBSD Portsコレクションを公式パッケージ管理システムとして使用していましたが、1.4リリースからNetBSDのpkgsrcシステムに切り替えました。これは、サードパーティのソフトウェアの可用性に必要な作業量を軽減する方法として認識されていました。 [6] [22]最終的に、との互換性を維持するには当初予想されていたよりも多くの労力が必要であることが判明したため、プロジェクトはFreeBSD Portspkgsrcコレクションの上にオーバーレイするDPortsを作成しました。[23] [24]
CARPサポート
共通アドレス冗長プロトコル(一般にCARPと呼ばれる)の最初の実装は2007年3月に完了しました。[25] 2011年現在、CARPサポートはDragonFly BSDに統合されています。[26]
HAMMER ファイルシステム
通常BSD のデフォルトファイル システムであるUnix ファイル システムに加えて、DragonFly BSD はHAMMERおよびHAMMER2ファイル システムをサポートしています。HAMMER2 はバージョン 5.2.0 以降のデフォルト ファイル システムです。
HAMMERはDragonFly BSD専用に開発され、ますます人気が高まっているZFSの、機能豊富でありながらより優れた設計の類似物を提供します。[9] [11] [27] HAMMERは、設定可能なファイルシステム履歴、スナップショット、チェックサム、データ重複排除、およびこの種のファイルシステムに典型的なその他の機能をサポートしています。[18] [28]
HAMMERファイルシステムの後継であるHAMMER2は現在安定していると考えられており、デフォルトで使用されており、さらなる開発の焦点となっています。その開発計画は2012年に初めて発表されました。[29] 2017年に、ディロンは次期DragonFly BSDバージョン(5.0.0)に、まだ実験的ではあるものの使用可能なバージョンのHAMMER2が含まれることを発表し、設計の特徴について説明しました。[30] 5.0.0の次のリリースであるバージョン5.2.0では、HAMMER2が新しいデフォルトのファイルシステムになりました。
devfs
2007年にDragonFly BSDは新しいデバイスファイルシステム(devfs)を導入しました。これにより、デバイスノードを動的に追加および削除し、接続パスでデバイスにアクセスし、シリアル番号でドライブを認識し、事前に設定されたファイルシステム階層が不要になります。これは、 Google Summer of Code/dev 2009プロジェクトとして実装されました。[31]
アプリケーションスナップショット
DragonFly BSD はAmigaスタイルの常駐アプリケーション機能をサポートしています。この機能は、ロード後に大規模で動的にリンクされたプログラムの仮想メモリ空間のスナップショットを取得し、プログラムの将来のインスタンスを通常よりはるかに速く起動できるようにします。これは、常駐サポートの方がはるかに効率的であるため、プロジェクトの初期に取り組まれていた事前リンク機能に代わるものです。KDEソフトウェア コンパイルに見られるような、多数の共有ライブラリを持つ大規模プログラムは、このサポートから最も恩恵を受けるでしょう。[32]
開発と流通

FreeBSDやOpenBSDと同様に、DragonFly BSD の開発者は、関数前のプロトタイプ形式のCコードを、より現代的なANSI相当のコードに徐々に置き換えています。他のオペレーティングシステムと同様に、DragonFly のGNU コンパイラコレクションのバージョンでは、デフォルトで有効になっているStack-Smashing Protector (ProPolice)と呼ばれる拡張機能があり、バッファオーバーフローベースの攻撃に対する追加の保護を提供します。2005 年 7 月 23 日現在[アップデート]、カーネルはデフォルトでこの保護を備えて構築されなくなりました。[32]
FreeBSD の派生版である DragonFly は、使いやすい統合ビルド システムを継承しており、わずか数コマンドでソースからベース システム全体を再構築できます。DragonFly の開発者は、Gitバージョン コントロール システムを使用して DragonFlyソース コードの変更を管理しています。親の FreeBSD とは異なり、DragonFly は開発者ベースが小さいため、単一のソース ツリーに安定版と不安定版の両方のリリースがあります。[7]
他の BSD カーネル (および最近のほとんどのオペレーティング システムのカーネル) と同様に、DragonFly は組み込みのカーネル デバッガを使用して、開発者がカーネルのバグを見つけるのを支援します。さらに、2004 年 10 月現在[アップデート]、比較的少量のディスク領域を消費する代わりに、カーネル関連の問題を追跡するのにバグ レポートをより有効にするデバッグ カーネルがデフォルトでインストールされます。新しいカーネルがインストールされると、以前のカーネルとそのモジュールのバックアップ コピーからデバッグ シンボルが削除され、ディスク領域の使用がさらに最小限に抑えられます。
配信メディア
このオペレーティングシステムは、完全な DragonFly システムをブートするLive CDおよびLive USBとして配布されています。 [18] [31]これには基本システムと完全なマニュアルページセットが含まれており、将来のバージョンではソースコードと便利なパッケージが含まれる可能性があります。これの利点は、1 枚の CD で、コンピュータにソフトウェアをインストールしたり、ツール一式を使用して破損したインストールを修復したり、インストールせずにシステムの機能をデモしたりできることです。ソースからビルドせずに最新バージョンの DragonFly をインストールしたい人のために、マスターサイトから毎日スナップショットが提供されています。
他の無料およびオープンソースの BSD と同様に、DragonFly はBSD ライセンスの最新バージョンの条件に基づいて配布されます。
リリース履歴

参照
参考文献
- ^ 「DragonFly BSD 6.4」。Dragonfly BSD 。 2023年1月15日閲覧。
- ^ Dillon, Matthew (2006 年 8 月 22 日)、「Re: マイクロカーネルの程度は?」カーネル メーリング リスト、 2011 年9 月 14 日閲覧
- ^ 「DragonFly BSD ライセンス」、DragonFly BSD 、2015 年1 月 17 日閲覧
- ^ Dillon, Matthew (2003 年 7 月 16 日)、「DragonFly BSD を発表!」、freebsd-current メーリング リスト、2007 年7 月 26 日閲覧
- ^ Lehey, Greg (2001)、FreeBSD SMP 実装の改善(PDF)、USENIX 、2012 年2 月 22 日閲覧
- ^ ab Kerner, Sean Michael (2006年1月10日)、「BSDユーザー向けに新しいDragonFlyがリリース」、InternetNews、2011年6月28日時点のオリジナルよりアーカイブ、 2011年11月20日閲覧。
- ^ abcdef Biancuzzi, Federico (2004年7月8日)、「Behind DragonFly BSD」、O'Reilly Media、2014年4月9日時点のオリジナルよりアーカイブ、 2011年11月20日閲覧。
- ^ Loli-Queru, Eugenia (2004 年 3 月 13 日)、「DragonFly BSD の Matthew Dillon 氏へのインタビュー」、OSNews 、 2012 年2 月 22 日閲覧
- ^ abcdef Chisnall, David (2007 年 6 月 15 日)、「DragonFly BSD: UNIX for Clusters?」、InformIT 、 2011 年11 月 22 日閲覧
- ^ Hsu, Jeffery M. (2004 年 3 月 13 日). DragonFly BSD オペレーティングシステム(PDF) . AsiaBSDCon 2004. 台北、台湾. 2011 年11 月 20 日閲覧。
- ^ abc Andrews, Jeremy (2007年8月6日)、「Interview: Matthew Dillon」、KernelTrap、2011年5月15日時点のオリジナルよりアーカイブ
- ^ 「DragonFly BSD MP のパフォーマンスが大幅に向上」、OSNews、2011 年 11 月 16 日、2011 年11 月 19 日閲覧
- ^ ab Luciani, Robert (2009 年 5 月 24 日)、DragonflyBSD での M:N スレッド(PDF) 、BSDCon、 2010 年 12 月 23 日のオリジナル(PDF)からアーカイブ
- ^ Sherrill, Justin (2004年1月11日) Paying off already、2014年4月30日時点のオリジナルよりアーカイブ、 2011年11月20日閲覧。
- ^ Pistritto, Joe; Dillon, Matthew; Sherrill, Justin C.; et al. (2004 年 4 月 24 日)、「Serializing token」、カーネル メーリング リスト、2013 年 4 月 15 日時点のオリジナルよりアーカイブ、 2012 年3 月 20 日閲覧
- ^ Bonwick, Jeff ; Adams, Jonathan (2002 年 1 月 3 日)、Magazines and Vmem: Extending the Slab Allocator to Many CPUs and Arbitrary Resources、USENIX 、 2011 年11 月 20 日閲覧
- ^ Dillon, Matthew (2009 年 4 月 23 日)、「新しい libc malloc がコミットされました」、カーネル メーリング リスト、 2011 年8 月 8 日閲覧
- ^ abcd Vervloesem, Koen (2010 年 4 月 21 日)、「DragonFly BSD 2.6: フリー クラスタリング オペレーティング システムに向けて」、LWN.net 、 2011 年11 月 19 日閲覧
- ^ Economopoulos、Aggelos (2007 年 4 月 16 日)、「DragonFly 仮想カーネルの概要」、LWN.net、no.パート 1、2011年12 月 8 日に取得
- ^ Economopoulos、Aggelos (2007 年 4 月 16 日)、「DragonFly 仮想カーネルの概要」、LWN.net、no.パート 2、2011年12 月 8 日に取得
- ^ 「HowTo DPorts」、DragonFly BSD 、2013年12月2日閲覧
- ^ Weinem, Mark (2007)。「10 years of pkgsrc」。NetBSD。Joerg Sonnenberger による DragonFly BSD 上の pkgsrc と彼の pkgsrc 開発プロジェクトについて。2011年11 月 22 日閲覧。
- ^ Sherrill, Justin (2013年9月30日)、「Why dports?」、DragonFly BSD Digest、2014年4月30日時点のオリジナルよりアーカイブ、 2011年12月2日閲覧。
- ^ Sherrill, Justin (2013 年 9 月 29 日)、「新しいパッケージはありますか?」、ユーザー メーリング リスト、 2013 年12 月 2 日閲覧
- ^ Buschmann, Jonathan (2007 年 3 月 14 日)、「Dfly で CARP を取得するための最初のパッチ」、カーネル メーリング リスト、 2011 年11 月 20 日閲覧
- ^ 「CARP(4) マニュアルページ」、DragonFly オンラインマニュアルページ、 2011年11月20日閲覧
- ^ Dillon, Matthew (2007 年 10 月 10 日)、「Re: HAMMER ファイルシステムの更新 - 設計文書」、カーネル メーリング リスト、2011 年11 月 20 日閲覧
- ^ Larabel, Michael (2011 年 1 月 7 日)、「DragonFlyBSD の HAMMER は Btrfs、ZFS と競合できるか?」、Phoronix 、 2011 年11 月 20 日取得、
HAMMER は非常に興味深い BSD ファイルシステムのようです。BSD の ZFS ファイルシステムほど高速ではありませんが、これも OpenSolaris からの移植ではなく、DragonFlyBSD プロジェクトのオリジナルのファイルシステムです。HAMMER は一般に一般的な UFS ファイルシステムよりも高速であるだけでなく、はるかに優れた機能セットも備えています。
- ^ Dillon, Matthew (2012年2月8日)、「HAMMER2の設計文書(2012年2月8日更新)」、ユーザー、 2012年2月22日閲覧
- ^ Dillon, Matthew (2017年8月18日)、「次のDFlyリリースには、最初のHAMMER2実装が含まれます」、ユーザー、 2018年7月3日閲覧。
- ^ ab Mr (2010年1月7日)、「DragonFlyBSD with Matthew Dillon」、bsdtalk 、 2012年4月25日時点のオリジナル(ogg)からアーカイブ、 2011年11月20日閲覧。
- ^ ab 「DragonFly BSD diary」、DragonFly BSD、2006年1月7日、 2011年11月19日閲覧
- ^ 「DragonFly: Releases」、DragonFly BSD 、2014年6月19日閲覧
- ^ Tigeot, Francois (2007 年 7 月 31 日)、「KMS + i915 のサポートが -master に導入されました」、ユーザー メーリング リスト、 2013 年12 月 2 日閲覧
- ^ Matthew Dillon (2009 年 6 月 4 日). 「Re: DragonFly-2.3.1.165.g25822 master sys/dev/disk/ahci Makefile TODO ahci.c ahci.h ahci_attach.c ahci_cam.c ahci_dragonfly.c ahci_dragonfly.h atascsi.h」。
- ^ ab Kerner, Sean Michael (2006 年 7 月 25 日)、「DragonFly BSD 1.6 Cuts the Cord」、InternetNews 、 2011 年11 月 20 日閲覧
- ^ Townsend, Trent (2006 年 1 月 18 日)、「DragonFly BSD 1.4 の簡単なレビュー」、OSNews 、 2011 年11 月 16 日閲覧
外部リンク
- 公式サイト
