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是一个支持多种架构的可移植操作系统,大部分内核代码应该与体系结构无关。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容