文档简介(最多显示3000字):
第2章代码初识6第第2章章代码初识代码初识本章首先从较高层次介绍Linux内核源程序的概况,这些都是大家关心的一些基本特点。随后将简要介绍一些实际代码。最后以如何编译内核来检验个人所进行的修改的讨论来作为本章的收尾。Linux内核源程序的部分特点内核源程序的部分特点在过去的一段时期,Linux内核同时使用C语言和汇编语言实现的。这两种语言需要一定的平衡:C语言编写的代码移植性较好、易于维护,而汇编语言编写的程序则速度较快。一般只有在速度是关键因素或者一些因平台相关特性而产生的特殊要求(例如直接和内存管理硬件进行通讯)时才使用汇编语言。正如同实际中所做的,即使内核并未使用C++的对象特性,部分内核也可以在g++(GNU的C++编译器)下进行编译。同其它面向对象的编程语言相比较,相对而言C++的开销是较低的,但是对于内核开发人员来说,这已经足够甚至太多了。内核开发人员不断发展编程风格,形成了Linux代码独有的特色。本节将讨论其中的一些问题。gcc特性的使用特性的使用Linux内核被设计为必须使用GNU的C编译器gcc来编译,而不是任何一种C编译器都可以使用。内核代码有时要使用gcc特性,伴随着本书的进程,我们将陆续介绍其中的一部分。一些gcc特有代码只是简单地使用gcc语言扩展,例如允许在C(不只是C++)中使用inline关键字指示内联函数。也就是说,代码中被调用的函数在每次函数调用时都会被扩充,因而就可以节约实际函数调用的开销。更为普遍的情况是代码的编写方式比较复杂。因为对于某些类型的输入,gcc能够产生比其它输入效率更高的执行代码。从理论上讲,编译器可以优化具有相同功能的两种对等的方法,并且得到相同的结果。因此,代码的编写方式是无关紧要的。但在实际上,用一些方法编写所产生的代码要比用其它方法编写所产生的代码的执行速度快得多。内核开发人员清楚如何才能产生更高效的执行代码的方法,而且这种知识也不断在他们编写的代码中反映出来。例如,考虑内核中经常使用的goto语句——为了提高速度,内核中经常大量使用这种一般要避免使用的语句。在本书中所包含的不到40,000行代码中,一共有500多条goto语句,大约是每80行一个。除汇编文件外,精确的统计数字是接近每72行一个goto语句。公平的说,这是选择偏向的结果:比例如此高的原因之一是本书中涉及的是内核源程序的核心,在这里速度比其它因素都需要优先考虑。整个内核的比例大概是每260行一个goto语句。然而,这仍然是我不再使用Basic进行编程以来见过的使用goto频率最高的地方。代码必需受特定编译器限制的特性不仅与普通应用程序的开发有很大不同,而且也不同于大多数内核的开发。大多数的开发人员使用C语言编写代码来保持较高的可移植性,即使在编写操作系统时也是如此。这样做的优点是显而易见的,最为重要的一点是一旦出现更
评论
发表评论