Linux Kernel学习004——内核开发特点

相对与在用户空间内的应用开发,内核开发有很多独特之处:

  • 不能访问C库和标准C头文件
  • 必须使用GNU C
  • 没有内存保护机制
  • 难以执行浮点运算
  • 每个进程只有很小的定长堆栈
  • 必须保证同步与并发
  • 考虑可移植性

无libc和标准头文件

libc的实现是依赖于内核的,因此,内核中不存在可以直接使用的libc。但是,大部分常用的C语言库函数都在内核中得到了实现(在lib目录下)。

头文件,基本的头文件都位于include目录和arch/<处理器架构>/include中。

GNU C

虽然C语言有国际化的标准比如C90、C99、C11等,但是内核并不仅仅使用了便准C语言,它的开发还依赖于gcc体统的很多拓展功能。比如attribute

没有内存保护机制

在用户空间中的进程,如果进行非法内存访问,则内核会发现错误,并进行相应的处理。但是,若在内核中发生了非法内存访问,则后果很难控制。内存错误可能的会导致oops。

难以进行浮点数

内核中使用浮点数很繁琐,需要人工保存和恢复浮点寄存器,一般情况下,不要使用浮点操作。

很小的定长堆栈

内核栈的准确大小随体系结构而变化,一般是两页。

同步和并发

内核的许多特性要求能够并发地访问共享数据,这就要求同步机制一保证不出现竞争条件。

可移植性

Linux是一个支持多种架构的可移植操作系统,大部分内核代码应该与体系结构无关。

你可能感兴趣的:(Linux Kernel学习004——内核开发特点)