Chinaunix首页 | 论坛 | 博客
  • 博客访问: 132885
  • 博文数量: 55
  • 博客积分: 1870
  • 博客等级: 上尉
  • 技术积分: 540
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-21 20:51
文章分类

全部博文(55)

文章存档

2011年(27)

2009年(3)

2008年(25)

我的朋友

分类: LINUX

2008-05-08 21:28:08

第二章 从内核出发

内核开发的特点:

    • 内核编程时不能访问C库:
      内核不能直接链接使用标准C函数库,主要原因在于速度和大小,不过常用的C库函数在内核都已经实现;
    • 内核编程时必须使用GUN C
      内核开发者使用的C语言涵盖了ISO C99标准和GNU C扩展特性;
    • 内核编程时缺乏像用户空间那样的内存保护机制:
      内核没有内存保护机制,所以后果很难控制,所以风险很大。此外,内核中的内存都不分页,每用掉一个字节,物理内存就减少一个字节。
    • 内核编程时浮点数很难使用:
      内核不能完美地支持浮点操作;
    • 内核只有一个很小的定长堆栈:
      内核栈的准确大小随体系结构而变。在x86上,栈的大小在编译时配置,可以是4KB也可以是8KB。从历史上说,内核栈的大小是两页,这就意味着,32位机的内核代码是8KB,而64位机是16Kb,这是固定不变的。每个处理器都有自己的栈。
    • 由于内核支持异步中断、抢占和SMP,因此必须时刻注意同步和并发:
      内核很容易产生竞争条件,因为:
      • Linux是抢占多任务处理器系统;
      • Linux支持多处理器系统;
      • 中断是异步到来的,完全不顾及当前正在执行的代码;

解决的办法是:自旋锁和信号量。

    • 考虑可移植性的重要性

     

     

    阅读(634) | 评论(0) | 转发(0) |
    给主人留下些什么吧!~~