分类: LINUX
2010-08-19 19:18:43
今天读了第一章 - linux内核简介。收获如下:
1、处理器在任何指定时间点上的活动范围可以概括为下列三者之一:
• 运行于内核空间,处于进程上下文,代表某个特定的进程执行。
• 运行于内核空间,处于中断上下文,与任何进程无关,处理某个特定的中断。
• 运行于用户空间,执行用户进程。
2、Linux内核和传统UNIX内核特点的比较
• Linux支持动态加载内核模块。
• Linux支持对称多处理(SMP)机制
• Linux内核可以抢占。
• Linux内核并不区分线程和其他的一般进程。
3、Linux内核编程与用户空间内应用程序开发的差异
• Linux内核编程时不能访问C库。
• Linux内核编程时必须使用GNU C。
• Linux内核编程时缺乏像用户空间那样的内存保护机制。
• Linux内核编程时浮点数很难使用。
• 内核只有一个很小的定长堆栈。
• 由于内核支持异步中断、抢占式和SMP,因此必须时刻注意同步和并发。
• 要考虑可移植性的重要性。
4、likely()和unlikely()
对于条件选择语句,gcc内建了一条指令用于优化,在一个条件经常出现(likely()),或者该条件很少出现时(unlikely()),编译器可以根据这条指令对条件分支选择进行优化。内核将该指令封装成了宏。
在你想要对某个条件选择语句进行优化之前,一定要搞清楚其中是不是存在这么一个条件,在绝大多数情况下都会成立。如果你的判断正确,确实是这个条件占压倒性的地位,那么性能会得到提升,如果你搞错了,性能反而会下降。