最初计划使用C ++接口。如果您查看早期的内核,您会发现它是针对C ++进行的配置,但从未有人使用过。
如果您要编写OS内核,则C ++库非常尴尬,因为您不必使用任何需要OS内核的东西。在Linux中,您会注意到设置了标志来阻止任何运行时库的链接。
C ++会生成大量代码。最初编写Linux时,最主要的机器是386SX’,只有几兆字节的扩展内存。不需要协处理器,支持小内存模型,没有可用的交换空间。将编译器与源一起放入内存是一个挑战。
这些机器也很慢。您今天肯定不想使用16MHz的计算机。像这样说,编译X11R4花了我大约一天半的时间。但那只是X Windows。我不记得,Manchester Computing Center发行版包括内核,一系列系统实用程序,游戏,可能还有LaTeX。老实说,我很惊讶他们在同年发行了发行版。
后来,当Linux开始移植到其他体系结构(IIRC,Atari ST就是其中之一)时,您受到了进一步的限制-现有源代码必须在其他平台上进行编译,除了特定于体系结构的元素外,不能进行其他任何修改。这意味着编译器必须在内存限制内可靠地在那些平台上工作,并生成干净的二进制文件。
C实际上非常灵活。由于什么都不能放入(所以没有STL,没有库,什么也没有),因此所有内容都必须从头开始编写,Linus,AC和该团伙的其他成员绝对可以自由编写任何内容,任何实用程序,任何宏,任何东西,他们可以随意编写伪对象。但是他们不仅没有这样做,还使人们束手无策地进行代码整合,这会导致性能下降。大量的堆栈,队列等并不是偶然的,而是有意将每个实现调整为精确的任务而不会降低速度。
当时,Linux的主要竞争对手是William Jolitz的386BSD(用C语言编写,基于BSD4.3磁带)。大约第二个竞争对手HURD(基于MACH磁带)也与当时的竞争对手同时出现,同时还有Dell和SCO的商用PC Unix。 386BSD死了,并由BSDI(被遗忘)和FreeBSD取代。当时的386BSD和FreeBSD都是相当扎实的代码,运行稳定并且能够完成人们需要完成的大多数工作,但是它们确实存在一些性能问题。 HURD一无所获,最终因过多的微内核而死亡。
Linux之所以幸免于难,是因为它干净,紧凑且运行迅速。它也很容易阅读,并且程序员的数量非常多(我认为第1版有数千名,今天有数十万)。
FreeBSD之所以能够幸存,是因为它虽然膨胀,但它很稳定,并且可以满足人们所需的大多数工作,而且再次通过用C编写,大量的程序员都可以访问它。
如今,C在OS开发人员中仍然很流行,但是原因略有不同。有用于C的程序验证器,这意味着可以开发被证明正确的专业内核。的确是。 C在机器级别的操作方面也非常擅长。
领取专属 10元无门槛券
私享最新 技术干货