DragonFly BSDとは
DragonFly BSDは、
NetBSDやFreeBSDと同じく、
BSDの子孫として生まれたオープンソースの
Unix系オペレーティング[[システム]]です。2
003年にFreeBSD 4.8-STABLEから分岐する形で開発が始まり、2
004年7月に最初のメジャー
バージョンがリリースされました。
プロジェクトリーダーはマシュー・ディロン氏が務めています。
DragonFly BSDは、FreeBSD 4.xの後継という位置づけでありながら、FreeBSD 5.xとは全く異なる
設計思想で開発されています。特に、LWKT(軽量
カーネルスレッド)や独自のメッセージング
システムなど、
AmigaOSに触発された多くの
概念が
実装されています。
バージョン4.8からは、UEFI(Unified Extensible Firmware Interface)にも対応し、現代的な環境での利用も考慮されています。
DragonFly BSDの
カーネルは、ハイブリッド
カーネルを採用しています。これは、モノリシック
カーネルとマイクロ
カーネルの利点を兼ね備えた
設計であり、メモリ保護の恩恵を受けつつ、高速な処理性能を維持することができます。
メッセージングサブ
[システム]]は、マイクロカーネルのデザインに似ていますが、よりシンプルな
実装となっています。また、同期
通信と非同期
通信の両方に対応しており、状況に応じて最適な性能を発揮できます。
デバイスI/Oや仮想ファイル
システム]もメッセージサブ[[システムを利用するように変更されており、
カーネルの一部をユーザーランドで実行できるようになりました。これにより、
カーネルの安定性が向上し、ユーザーランドのドライバがクラッシュしても、
カーネル全体がダウンすることを防ぐことができます。
システムコールも、ユーザーランド版と
カーネルランド版に分けられ、メッセージとして
カプセル化されています。これにより、標準
システムコールの
実装をユーザーランドの
互換レイヤーに移行することが容易になり、新旧のDragonFly BSDの
互換性を保ちやすくなっています。また、
Linuxなどの他の
Unix系OSのアプリケーションを動作させるための
機構もユーザーランドに
実装でき、UML(User-Mode
Linux)と同等の機能を実現できます。しかし、UMLとは異なり、
仮想化のために特別なドライバを必要としません。
DragonFly BSDでは、スレッドが特定の
CPUに強く結び付けられるように
設計されています。各
CPUは独自のLWKTスケジューラーを持ち、スレッドが勝手に別の
CPUに移動することはありません。スレッドの
CPU間移動は、IPI(Inter-Processor Interrupt)メッセージによってのみ行われます。この
設計により、スレッドサブ
システムを綺麗に分離でき、SMP(対称型
マルチプロセッシング)環境において、複数の
CPUのキャッシュに同一データが乗らないようにすることが可能です。これにより、各プロセッサがスレッド実行のために異なるデータをキャッシュできるようになり、高い性能を引き出すことができます。
LWKTサブ
システムは、複数の
カーネルスレッドに処理を分散するように
実装されており、複数の
カーネル内
タスクがリソースを
共有する際に発生する競合状態を回避できます。このように
CPU毎の局所性を保つ
アルゴリズムは、DragonFly BSD特有の
設計と言えるでしょう。
共有資源の保護
マルチプロセッサ環境では、
共有資源への
アクセスを直列化する必要があります。DragonFly BSDでは、クリティカルセクションと直列化トークンを使用して、複数のスレッドが同時に
共有リソースを変更することを防いでいます。かつてはSPL(Software Priority Level)も使用されていましたが、現在はクリティカルセクションに置き換えられています。
システムの中心的な部分(LWKTサブ
システム、IPIメッセージサブ
システム、メモリアロケーターなど)の多くはロックを使用しません。つまり、ミューテックスを使わずに
CPU毎に処理を行います。クリティカルセクションは、局所的な割り込みから保護するために使用され、スレッドの実行中に
CPUを横取りされないことを保証します。
直列化トークンは、他の
CPUからの並列
アクセスを防ぐために使用され、複数のスレッドで同時に保持できます。これにより、特定の時間内に1つのスレッドが処理を行うことが保証されます。直列化トークンを使用することで、ミューテックスを使用した際に起こりうるデッドロックや優先度の逆転を防ぐことができ、
共有リソースを扱う長い
プロシージャの
実装を簡略化できます。直列化トークンの
実装は、最近の
LinuxにあるRCU(Read-Copy-Update)によく似ていますが、影響範囲が同じトークンで競合しているプロセッサ同士に限定されている点が異なります。
その他の特徴
スラブアロケーター: メモリ割り当て時に排他制御やブロック操作を必要としない、MPSAFEなアロケーターを採用しています。
SFBUF/MSFBUF: 短時間だけ使用する単一ページのマップを操作するSFBUFと、複数のページマップを操作するMSFBUFを使用しています。これらは、ゼロコピー転送などを実現するために利用されています。
sendfile(2): FreeBSDのデイビッド・グリーンマン氏が考案したsendfile(2)を、アラン・L・コックス氏とマシュー・ディロン氏がリライトし、SFBUFの概念に組み込んでいます。また、MSFBUFは、ハイテン・パーンディヤ氏とマシュー・ディロン氏によって考案されました。
開発の方向性
対応プロセッサー
DragonFly BSDは現在、x86-64アーキテクチャベースのコンピュータで動作します。32ビット版(i386)のサポートは3.8で終了しており、現在は64ビット版のみがサポートされています。単一プロセッサとSMPの両方に対応しています。
パッケージ管理
初期のDragonFly BSDでは、FreeBSDのportsをパッケージ管理システムとして使用していましたが、1.4からpkgsrcが公式のパッケージ管理システムとなりました。3.4からは、FreeBSDのportsをDragonFly BSDで使用できるようにする仕組みであるDPortsが導入されましたが、pkgsrcとDPortsを同時に使用することはできません。
スレッドとメッセージング
システムコールとデバイスI/Oの実装は、DragonFly BSDのスレッドメッセージングシステムを使用するように変更されましたが、まだ同期的に動作しています。将来的には、全てのメッセージサブシステムを同期または非同期のどちらでも動作するようにする予定です。また、ユーザーランドスレッドのサポートも今後の重要な課題です。現在のところN:1スレッドしかサポートされていませんが、近代的なスレッド実装が予定されています。
DragonFly BSD 2.0より、ファイルシステムとしてHAMMERが採用されています。HAMMERの後継としてHAMMER2の開発が進められており、5.0から実験的にサポートされ、5.2で正式にサポートされました。
その他
devfsが
Google Summer of Code 2
009の
プロジェクトとして
実装されました。
PUFFSがNetBSDから移植されました。
USB4BSDがFreeBSDから移植されました。
バージョン4.0.1より、i386アーキテクチャのサポートが廃止され、x86_64版のみがサポートされるようになりました。
開発と配布
FreeBSDやOpenBSDと同様に、DragonFly BSDの開発者は、関数プロトタイプスタイルのCコードを、より現代的でANSI準拠のものに徐々に置き換えています。他のOSと同様に、DragonFlyのGCCには、Stack-Smashing Protectorがデフォルトで有効になっており、バッファオーバーフローに基づく攻撃に対する保護を提供しています。ただし、2005年7月23日からは、この保護付きのカーネルビルドはデフォルトではなくなっています。
FreeBSDの派生物として、DragonFlyは、簡単に利用できる統合されたビルドシステムを持ち、少ないコマンドでベースシステム全体をソースコードからリビルドできます。開発にはGitが使用されており、安定版と非安定版のリリースの両方を1つのソースツリーで管理しています。
配布メディア
DragonFly BSDは、Live CDとLive USB(完全なX11環境が利用可能)として配布されており、これらのメディアから完全なDragonFlyシステムを起動できます。これらのメディアには、マニュアルページ、ソースコード、将来のバージョンで有用なパッケージとベースシステムが含まれています。これにより、単一のメディアでOSのインストール、システムの修復、OSの評価が可能になります。
デイリースナップショットはマスターサイトから入手でき、ソースコードからのビルドなしで最新版を試したいユーザーに適しています。
DragonFly BSDは、他のオープンソースのBSDと同様に、BSDライセンスの下で配布されています。
関連情報
公式サイト
DragonFly BSD開発者向けリソース
DragonFly BSDメーリングリストアーカイブ
DragonFly BSDバグトラッカー
Gitリポジトリ
avalon.dragonflybsd.org
GitHub
FreeBSD and Linux Kernel Cross-Reference
DFBSD