DragonFly BSD

DragonFly BSDとは



DragonFly BSDは、NetBSDやFreeBSDと同じく、BSDの子孫として生まれたオープンソースのUnix系オペレーティング[[システム]]です。2003年にFreeBSD 4.8-STABLEから分岐する形で開発が始まり、2004年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とは異なり、仮想化のために特別なドライバを必要としません。

CPU局所化



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 2009のプロジェクトとして実装されました。
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

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。