内核开发的特点:
- 内核编程时既不能访问C库也不能访问标准C头文件(大部分常用的C库函数在内核中都已经得到实现)
- 内核编程时必须使用GNU C(内核开发者总要用到gcc提供的语言扩展部分,而gcc是多种GNU编译器的集合),内核中C语言的扩展部分包含:
- 内联函数
- 内联汇编:使用asm()指令在C函数中嵌入汇编指令
- 分支声明:对于条件选择语句,gcc内建一条指令用于优化,在一个条件经常出现(likely()宏)或很少出现(unlikely()宏),编译器可以根据这条指令对于条件分支选择进行优化。
- 缺乏像用户空间那样的内存保护机制
- 难以执行浮点运算
- 内核给每一个进程只有一个很小的定长堆栈
- 由于内核支持异步中断、抢占和SMP,因此必须时刻注意同步和并发
- 要考虑可移植性的重要性(如保持字节序、64位对齐、不假定字长和页面长度等)
网友评论