相对与在用户空间内的应用开发,内核开发有很多独特之处:
- 不能访问C库和标准C头文件
- 必须使用GNU C
- 没有内存保护机制
- 难以执行浮点运算
- 每个进程只有很小的定长堆栈
- 必须保证同步与并发
- 考虑可移植性
无libc和标准头文件
libc的实现是依赖于内核的,因此,内核中不存在可以直接使用的libc。但是,大部分常用的C语言库函数都在内核中得到了实现(在lib目录下)。
头文件,基本的头文件都位于include目录和arch/<处理器架构>/include中。
GNU C
虽然C语言有国际化的标准比如C90、C99、C11等,但是内核并不仅仅使用了便准C语言,它的开发还依赖于gcc体统的很多拓展功能。比如attribute。
没有内存保护机制
在用户空间中的进程,如果进行非法内存访问,则内核会发现错误,并进行相应的处理。但是,若在内核中发生了非法内存访问,则后果很难控制。内存错误可能的会导致oops。
难以进行浮点数
内核中使用浮点数很繁琐,需要人工保存和恢复浮点寄存器,一般情况下,不要使用浮点操作。
很小的定长堆栈
内核栈的准确大小随体系结构而变化,一般是两页。
同步和并发
内核的许多特性要求能够并发地访问共享数据,这就要求同步机制一保证不出现竞争条件。
可移植性
Linux是一个支持多种架构的可移植操作系统,大部分内核代码应该与体系结构无关。
网友评论