- 论坛徽章:
- 2
|
平时一直在Linux和Solaris上工作,对FreeBSD也就是大概的了解。
也上来讲一些自己观点里 FreeBSD和别的系统的不同点,侧重于应用,而不是驱动。
1. os kernel本身,Linux版本的变化比较大,社区化的开发模式,让更多新的特性融入,但也带来了代码版本兼容性的问题,这个在FreeBSD里就比较少问题,因为架构变得少,更像Solaris这样的UNIX更是10年换一个版本的,旧代码兼容性问题少了很多。
但这并不代表BSD自己就没有特立独行的地方, 像Linux里的LKM(Linux Kernel Module),在现在版本的FreeBSD里,被称为KLD,我个人觉得这是FreeBSD的自己玩的地方,我在linux kernel里做调试的那一套,搬到FreeBSD里基本上就没用了。
2. 跟驱动相关一些的,内核模块相关的interrupt/module event handler, 这边我觉得从架构上讲就和Linux不同了,像Linux上新kernel从2.5开始就把旧的bottomhalves完全清掉了,本身现在就有tasklet/softirq/workqueues,这些在BSD上也没有。我觉得与其说BSD稳定,不如说Linux更追求性能。
3. 从C的API实现角度,大同小异,因为要做移植工作,我平时一直会把SUS3的标准拿来看看,也可以看得出很多不同的地方,比较著名的是vfork()在FreeBSD上有其实现,但在新版本Linux上利益于copy-on-write技术,就直接抄的fork(),并标为过时。还有Linux现在考虑不同平台的移植性,很多时候使用了包装ssize_t,而像lseek()这个api,在linux上正常返回值为正,而在FreeBSD上,比如/dev/kmem设备,offset也可以是负值。同样像fcntl()这种比较依赖实现的,比如F_SETFL 可以在BSD上改O_SYNC,而在Linux上不能设。
4.
比如thread的实现,这一块FreeBSD上也可以用pthread, 这样移植的问题也少了。 网络编程这一块,不同处显然少了更多,因为socket/TCPIP这些本来就是UNIX/SYSV都实现好了拿来用的,而且很稳定,协议本身不要太多改,直接搬apue/unp,移植压力不大。 |
|