linux内核设计与实现---chapter2

内核源码树

在这里插入图片描述
在这里插入图片描述

内核开发的特点

  1. 内核编程时既不能访问C库也不能访问标准C头文件
  2. 内核编程时必须使用GNU C
  3. 内核编程时缺乏像用户空间哪有的内存保护机制
  4. 内核编程难以执行浮点数运算
  5. 内核给每个进程只有一个很小的定长堆栈
  6. 内核支持异步中断,抢占和SMP,因此必须时刻注意同步和并发
  7. 要考虑可移植性

GNU C

  1. 内联函数(inline)
    1. 内联函数的工作方式:函数会在他所调用的位置进行展开,这么做就消除了函数调用和返回所带来的的开销(寄存器的存储和恢复)。
    2. 但是这么做的话,函数的代码会变长,就可能占用更多的内存空间或者更多的指令缓存。内核开发者通常把那些对时间要求比较高,而本身长度有比较短的函数定义成内联函数。
//define inline  function 
static inline void wolf(unsigned long tail_size);
  1. 内联汇编
    linux内核混合使用了C语言和汇编语言。在偏近体系结构的底层或对执时间要求严格的地方,一般使用汇编语言。而内核其他部分大部分使用C。

  2. 分支声明:
    对于条件选择语句,gcc内建了一条指令用于优化,在一个条件经常出现或者很少出现的时候,编译器可以根据这条质量对条件分支选择进行优化。内核把这条指令封装成了宏,比如unlikely()和likely() ,这样使用起来较为方便。

内核没有内存保护机制

  1. 应用程序进行非法内存访问的时候,内核会发现这个错误,并且返回信号(SIGSEGV)----segmentation violation
  2. 内核没有对内存进行分页,所以,每次用掉一个字节,物理内存就减少一个字节
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值