Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1865501
  • 博文数量: 283
  • 博客积分: 10141
  • 博客等级: 上将
  • 技术积分: 2931
  • 用 户 组: 普通用户
  • 注册时间: 2005-12-21 14:33
文章分类

全部博文(283)

文章存档

2013年(2)

2012年(2)

2011年(17)

2010年(36)

2009年(17)

2008年(18)

2007年(66)

2006年(105)

2005年(20)

分类: LINUX

2006-05-09 10:04:13

内核编程的几个特点

1. 不能访问C库或是其它库(鸡、蛋……)
    这点比较好理解,内核空间与用户空间不同,但主要原因是效率问题,而且内核中也实现了大多数常用的C库函数。

2.  必须使用GNU C(Linux内核不完全符合ANSI C标准)
    内核开发者使用了gcc提供一些扩展特性,比如支持inline函数,支持内联汇编,分支声明。
    关于分支声明,是用于条件选择语句的,gcc内建了一条指令用于优化条件选择,而内核把这条指令封装成了宏。例如:
    if(likely(abc)) { //abc通常为真
          /*...*/
    }
    或
    if(unlikely(abc)) { //abc通常不为真
          /*...*/
    }

3.  缺乏像用户空间一样的保护机制
    内核可以发现用户程序非法访问内存,但如果内核自己发生内存错误,就会导致OOPS。在内核中发生的非法内存访问是危险的。

4.  内核中的内存不分页
    内核中的内存不进行分页,每用掉一个字节则意味着物理内存减少了一个字节。

5.  浮点数很难使用
    内核对浮点数操作支持不好,在用户空间的进程内进行浮点操作时,内核会从整数操作模式向浮点数操作模式转换,但具体做什么则和体系结构相关。在内核中使用浮点数时,要人工保存和恢复浮点寄存器。

6.  内核只有一个很小的定长堆栈
    x86可以在编译时配置,4KB or 8KB。2页大小的内存栈,32位机的内核栈是8KB,64位机的是64KB。

7.  由于内核支持异步中断、抢占和SMP,所以必须注意同步与并发问题。

8.  可移植性,注意字节序,64位对齐,不假定字长与页面长度。

  

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