Linux kernel development Chapter1 内核简介

 1 linux内核 并不区分线程和进程。对于内核来说,所有的线程和进程都一样,只是其中的一些共享资源而已。

 

 2 内核开发特点:

    2.1 linux内核开发不能使用c函数库,因为c库需要操作系统的支持,而且c库的大小和效率也是内核开发所不能容忍的;

          但是大部分c库函数在内核中都是被实现了。只要包含内核代码 中相应的头文件,就能够使用相应的类似函数;

    2.2 linux内核开发只能使用GNU c标准;

           linux内核并不安全符合ANSI C标准,用到了许多gcc提供的语言扩展部分:

                   2.2.1 内联(inline)函数,gcc支持内联函数(ANSI C在C99中也开始支持inline)。定义一个内联函数的时候,要使用static关键

                             字进行限定 (为什么需要static关键字,参考《gcc的内联支持》),并且内联函数常在头文件中定义。

                   2.2.2 内联汇编。gcc支持在c语言代码中嵌入汇编代码。

                   2.2.3 分支声明。对于条件选择语句,gcc内建了一条指令用于优化。如果一个条件为真或为假的概率比较大,那么编译器就可以根

                             据该指令对条件分支选择进行优化。

                              内核把这条指令封装成了宏,比如likely()和unlikyle(),以方便使用,例如:

                              (1) /*foo很少为真*/

                                        if (unlikely(foo)) {

                                                    /* ... */

                                        }

                              (2) /*foo很有可能为真*/

                                        if (likely(foo)) {

                                                    /* ... */

                                        }

                              但是在使用之前,一定要对条件是否为真有正确的判断,否则可能引起性能下降。在对一些错误条件进行判断时,常会使用到。

    2.3 内核开发缺乏类似用户空间的内存保护机制;

    2.4 内核之用一个很小的定长堆栈供开发使用;

           内核栈不能动态增长而且很小。32位系统为8kB,而64位为16kB。

    2.5 内核开发时浮点是很难使用;

    2.6 内核支持异步中断,抢占和smp,所以要时刻注意同步和并发;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值