DragonFly BSD
DragonFly是一个以与FreeBSD采用的实现方式不同的方式来实现并发、SMP、集群以及其他操作系统特性的BSD分支。
基本信息
- 外文名
DragonFly BSD
- 最新版本
3.4.3
关于
DragonFly项目的创始人和目前的leader,MatthewDillon曾经是FreeBSDSMPng项目的重要开发人员,在FreeBSD3.x时代开始,他对FreeBSD虚拟内存子系统、VFS子系统等多个重要部分进行了重写和增强,这些工作给FreeBSD4.x系列的可靠性和性能打下了坚实的基础。FreeBSD项目于2000年6月在Sunnyvale的Yahoo公司总部举行了SMP峰会,并正式启动了SMPng计划,即利用BSDi捐赠的BSD/OS源代码和相关的设计思想来改善FreeBSD的SMP能力。
MatthewDillon对BSD/OS中的许多实现并不满意,并在SMPng开发过程中展现了卓越的天赋和才华。由于BSD/OS与FreeBSD之间的巨大差异和时间限制,MatthewDillon在开始移植细锁之后不久即决定重新实现上锁原语,而完成这些工作距离SMPng峰会结束仅经过几天时间。尽管如此,在随后的开发活动中,与其他开发人员不断爆发的冲突,导致他被多次停权警告,并最终撤销了commit权限。
2003年7月,Matt宣布在FreeBSD4.8-STABLE的基础上的fork,并正式定名为DragonFlyBSD(最初名字是TortoiseBSD,现在多称为DragonFly)。与FreeBSD5.x系列采用的细锁模型不同,DragonFly采用消息模型作为内核的主要同步机制,并希望由此获得更好的可伸缩性。
DragonFly同时采用了许多其他兄弟BSD系统的代码,其malloc()函数的安全特性来自于OpenBSD,WiFi框架来自于FreeBSD6,USB实现来源于NetBSD。许多DragonFly的特性也被移植到FreeBSD中。
目前DragonFly最值得关注的是MatthewDillon新设计的HAMMERFS文件系统。
设计理念
DragonFlyBSD初期打算改写FreeBSD4中的几个子系统,包括了Cache、I/O架构、Messaging、Threading、UserAPI及VFS架构。
目标和开发计划
DFBSD的最终目标是在内核中提供对通用集群系统原生的支持,为了达到此目标,DFBSD项目将开发分解为两个阶段。
第一个阶段从2003年至2007年初,主要关注对主要内核子系统的重写。这几乎涉及到所有的子系统,尤其是内核核心和文件系统的API。这也是第二阶段的准备工作。
第二个阶段主要是为文件系统命名空间、文件空间和VM空间创建一个精巧的cache管理框架,这将为横跨多台机器运行的重负荷交互性程序从各个方面完全保证cache的一致性,同时也解决了对资源的细分问题(包括通过可控的VM上下文来细分cpu资源),这样可为分布在internet的不安全的第三方集群实现安全的分配方式(即使这些集群自身都不清楚自己的安全性,对那些愿意捐赠系统(计算)资源的人来说最基本和最重要的事情是不要因为捐赠资源而遭到攻击)。
技术特色
Kerneldesign
同大多数现代内核一样,DragonFly的内核是混合型的,包含了微内核与统一内核的特色,并试图集成两种技术的优势。例如微内核的消息传递机制可以使OS能从被保护内存中节余更多空间;而统一内核在处理某些关键任务的速度方面更具优势。(DFBSD的)消息子系统看起来相似于某些微内核系统,例如Mach,虽然Mach设计的更加简单。DFBSD的消息子系统可以工作在同步或异步模式,并试图在给定条件下达到系统的最佳性能。
为达到项目的剩余目标,同时提供设备I/O和VFS的消息机制。新架构将允许内核的许多部分可以被转移到用户空间,其优点在于以更小的独立的程序取代了混杂在一起的大量代码,这使内核更小更容易调试;而那部分被允许在用户空间执行的内核代码带来的额外的好处是系统将更加稳定,即使用户空间的驱动崩溃了,内核也不会崩溃。
虽然同样被封装成消息,但实际上系统调用被分为用户空间版本和内核版本。把多种标准调用从内核转移到用户空间的兼容层有助于降低内核的的大小和复杂度,这就有助于维护DFBSD版本前向后向的兼容性。Linux和其他类UNIX系统的兼容性代码被转移出来就与此类似。DFBSD可在jails中创建原生用户空间兼容层的多个实例与UML(用户模式linux)就很相似。不同于UML(本质上宿主内核相当于一个不同的硬件平台,而UML是对其的一个linux移植)的是DFBSD的虚拟化对计算机的真实硬件不需要特殊驱动就可以直接通讯。
CPUlocalization
DFBSD中线程被设计成被CPU锁定,并且每个处理器有着自己的LWKT调度器。线程只能通过在cpu之间传递一个IPI(InterprocessorInterrupt)消息来转移,而不能依据优先级从一个处理器切换到另一个处理器。进程间的线程调度也是通过发送异步IPI消息来完成。(这样实现的)一个优点是通过线程子系统的明确的隔离使得SMP系统的处理器的板载cache不会包含重复数据,并通过给予系统里的每个处理器使用自己的cache来缓存不同的事物以达到更高的性能。