Linux内核设计与实现读书笔记(1)

来源:互联网 发布:遗传算法实现排课系统 编辑:程序博客网 时间:2024/05/17 07:07

    我现在要做的科研项目涉及到内核编程的知识,所以在学校的图书馆借了一本《Linux内核设计与实现》(英文名:linux kernel development),打算通过这本书来了解一下linux内核各部分的原理。我选择这本书的原因很简单-薄。全书只有二百多页,但内容还是很全面的。翻译质量还可以,译者还在文中加了自己的解释。看译者序中说这本书适合内核初学者,看过后对内核各个核心子系统有个整体把握。这很好,符合我的要求,《Understand Linux Kernel》实在太厚了,太细了,有时间再看吧。

    今天读了第一章 - 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()),编译器可以根据这条指令对条件分支选择进行优化。内核将该指令封装成了宏。

    在你想要对某个条件选择语句进行优化之前,一定要搞清楚其中是不是存在这么一个条件,在绝大多数情况下都会成立。如果你的判断正确,确实是这个条件占压倒性的地位,那么性能会得到提升,如果你搞错了,性能反而会下降。