一、内核源码数linux
内核源码树由不少目录组成,而大多数目录又包含更多的子目录,源码树的根目录及其子目录以下:编程
目录 | 描述 |
arch | 特定体系结构的源码 |
crypto | crypto API |
ducumention | 内核源码文档 |
drivers | 设备驱动程序 |
fs | VFS和各类文件系统 |
include | 内核头文件 |
init | 内核引导和初始化 |
ipc | 进程间通讯代码 |
kernel | 像调度程序这样的核心子系统 |
lib | 调用内核函数 |
mm | 内存管理子系统和VM |
net | 网络子系统 |
scripts | 编译内核所用的脚本 |
security | linux安全模块 |
sound | 语音子系统 |
usr | 早期用户空间代码 |
二、内核开发的特色安全
三、内核代码使用到的C语言扩展网络
GNU的C编译器支持内联函数,inline反应它的工做方式,函数会在它调用的位置上展开,这么作能够消除函数点永和返回所带来的开销。内联函数必须在使用以前就定义好,不然编译器就无法把这个函数展开。实践中通常在头文件中定义内联函数。因为使用了static做为关键字进行限制,因此编译器不会为内联函数单独创建一个函数体。并发
gcc编译器支持在C函数中嵌入汇编指令。Linux内核混合使用了C和汇编语言。在偏近体系结构的底层或对执行时间要求严格的地方,通常使用的是汇编语言,而内核其余部分的大部分代码是C语言编写的。异步
对于条件选择语句,gcc内奸了一条指令用于优化,在一个条件常常出现,或者该条件不多出现的时候,编译器能够根据这条指令对条件分支选择进行优化。函数
四、没有内存保护机制oop
若是一个用户程序试图进行一次非法的内存访问,内核会发现这个错误,发送SIGSEGV,并结束整个进程。然而,若是是内核本身非法访问了内存,那后果就很难控制了。内核中发生的内存错误会致使oops,这是内核中出现的最多见的错误。并且,内核中的内存都不分页,没用掉一个字节,物理内存就减小一个字节。优化
五、不要轻易在内核中使用浮点数操作系统
在用户空间的进程内进行浮点操做的时候,内核会完成从证书操做到浮点数操做的模式转换。
六、容积小而固定的栈
内核站的准确大小随体系结构而变。
七、同步和并发
内核和容易产生竞争条件。和单线程的用户空间程序不一样,内核的许多特性都要求可以冰法的访问共享数据,这就要求由同步机制保证不会出现竞争条件。
八、可移植性的重要性