内核开发特点

1、内联函数(inline)
  • 使用内联函数时,该函数会在它所调用的位置上展开,这样做的原因是可以消除函数调用和返回带来的开销,不过代码会变长。
  • 在使用内联函数的时候通常会吧那些对时间要求比较高,而代码本身的长度比较短的函数定义为内联函数。
  • 定义内联函数的时候通常使用static作为关键字,并用inline来限定:
    • static inline void eolf(insigned long tail_size)
  • 内联函数在使用之前要定义好,否则编译器无法对这个函数进行展开。实践中一般在头文件中定义内联函数。
  • 在内核中,为了类型安全和易读性,优先使用内联函数而不是复杂的宏。
2、内联汇编
  • gcc编译器支持在c函数中嵌入汇编指令
  • 通常使用asm()指令嵌入汇编代码,例如:
asm volatile("rdtsc" : "=a" (low), "=d" (high));
  • 一般偏向底层的或对执行时间要求严格的使用汇编,大部分使用c
3、分支声明
4、没有内存保护机制
  • 在用户态程序发生非法访问内存,内核会报出段错误并结束进程,但是内核出现非法访问内存会导致oops(http://www.cnblogs.com/wwang/archive/2010/11/14/1876735.html)并且系统死掉。
  • 在内核中的内存都是不分页的,就是说用掉一个字节就是一个字节
  • 在内核中加入新功能的时候需要注意这些
5、不要轻易在内核中使用浮点数
6、内核中的栈是固定不变的,不像用户空间可以分配大量的空间来存放变量
  • 从历史上说,内核的栈大小是2页,也就是32位的内核栈是8KB,64位的是16KB
7、同步和并发
  • 内核很容易产生竟争条件。和单线程的用户空间程序不同.内核的许多特性都要求能够并发地访问共享数据.这就要求有同步机制以保证不出现竞争条件,特别是:
    • Linux是抢占多任务操作系统。内核的进程调度程序即兴对进程进行调度和重新调度。内核必须和这些任务同步。
    • Linux内核支持对称多处理器系统(SMP)。所以,如果没有适当的保护同时在两个或两个以上的处理器上执行的内核代码很可能会同时访问共享的同一个资源。
    • 中断是异步到来的.完全不顾及当前正在执行的代码。也就是说,如果不加以适当的保护.中断完全有可能在代码访问资源的时侯到来,这样,中断处理程序就有可能访问同一资源。
    • linux内核可以抢占。所以,如果不加以适当的保护,内核中一段正在执行的代码可能会被另外一段代码抢占,从而有可能导致几段代码同时访问相同的资源。
8、可移植性的重要性
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘星燎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值