美文网首页
Linux Kernel学习004——内核开发特点

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

作者: 若梦儿 | 来源:发表于2019-01-24 21:04 被阅读36次

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

    • 不能访问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——内核开发特点

          本文链接:https://www.haomeiwen.com/subject/ajnujqtx.html