[Linux内核设计与实现]Linux内核开发特点
来源:互联网 发布:wifi破解mac版 编辑:程序博客网 时间:2024/04/28 23:45
Linux内核开发特点:
- 内核编程时不能访问标准C库;
- 内核编程时必须使用GNU C;
- 内核编程时缺乏像用户空间那样的内存保护机制;
- 内核编程时浮点数很难使用;
- 内核只有一个很小的定长堆栈;
- 由于内核支持异步中断,抢占和SMP,因此必须时刻注意同步和并发控制;
- 内核编程要考虑可移植性。
没有libc库
与用户空间的应用程序不同,内核不能链接使用标准C函数库,其他函数库也不能使用。对于内核来说,完整的C库太大了,即使从中抽取一个合适的子集,在大小和效率方面也不能接受。不过大部分常用的C库函数在内核中都已经得到了实现。
GNU C
内核使用C语言编写,但是内核不完全符合ANSI C标准。内核开发者总是要用到gcc提供的许多语言扩展部分。内核代码中常使用的C语言扩展有下面几点:
内联(inline)函数,使用static inline来声明;
内联汇编,gcc编译器支持在C中嵌入汇编语言;
分支声明,gcc内建了一条指令来优化条件选择语句,比如likely(),unlikely()。
没有内存保护机制
用户程序试图进行一些非法内存访问时,内核会发现这个错误,发送SIGSEGV,并结束用户进程。然而,内核自己访问了非法内存将会导致oops。所以内核开发时,对内存的操作一定要小心。此外,内核中的内存不能分页。也就是说每用掉一个字节,物理内存就会减少一个字节。
容量小而固定的栈
内核栈的准确大小随体系结构而变。在x86上,栈的大小在编译时配置,可以是4kb也可以是8kb。从历史上说,内核栈的大小是两页,这就意味着,32位机器的内核栈是8kb,而64位机器的内核栈大小是16kb。
同步和并发
内核很容易产生竞争条件。体现在以下方面:
Linux内核是抢占多任务操作系统;
Linux内核支持多处理器系统;
中断是异步到来,完全不顾及当前正在执行的代码;
Linux内核可以抢占。
可移植性的重要性
Linux是一个可以移植的操作系统,必须把体系结构相关的代码从内核代码树的特定目录中分离出来。
参考资料:
《Linux内核设计与实现》,第二版
- [Linux内核设计与实现]Linux内核开发特点
- [Linux内核设计与实现]Linux内核简介
- [Linux内核设计与实现]Linux内核编译
- 《Linux内核设计与实现》笔记——内核编译过程以及内核编程特点
- 《Linux内核设计与实现》- 内核数据结构
- 《Linux内核设计与实现》--内核数据结构
- [Linux内核设计与实现]Linux进程管理
- [Linux内核设计与实现]Linux进程调度
- [Linux内核设计与实现]Linux系统调用
- Linux内核设计与实现
- Linux内核设计与实现
- Linux内核设计与实现
- Linux内核开发的特点
- Linux内核设计与实现 之一 Linux内核简介
- Linux内核设计与实现读书笔记(1)-Linux内核简介
- linux内核设计与实现(第一章)----linux内核简介
- 《Linux内核设计与实现》笔记-1-linux内核简介
- 《Linux内核设计与实现》——Linux内核简介
- 开始学习python
- 获取wxStaticBitmap的鼠标处的图像的颜色值
- linux配置java环境变量(详细)
- C#与Flash交互问题
- java 环境变量配置
- [Linux内核设计与实现]Linux内核开发特点
- C 某些库函数中字符串处理函数的具体实现
- 笔记本怎么设置WIfi热点
- 设计模式6:建造者模式【创建型】
- 使用数据库做缓存
- Oracle的pl/sql 编程的hello实例
- Java Web : Struts2第一个简单例子 浅解
- 关于JSONKit的使用
- C++指针探讨一