上QQ阅读APP看书,第一时间看更新
1.1 Linux内核编程注意事项
Linux可以运行在两种模式下:用户模式(user mode)和内核模式(kernel mode)。当我们编写一个普通程序时,有时会包含stdlib.h文件,也就是说我们使用了C标准库,这是典型的用户模式编程,在这种情况下,用户模式的应用程序要链接标准C库。在内核模式下不存在libc库,即没有这些函数供我们调用。
此外,在内核模式下编程还存在一些限制:
❑不能使用浮点运算。因为Linux内核在切换模式时不保存处理器的浮点状态。
❑不要让内核程序进行长时间等待。Linux操作系统本身是抢占式的,但是在内核是非抢占式的,也就是说用户空间的程序可以抢占运行,但是内核空间程序不可以。
❑尽可能保持代码的整洁性。内核调试不像调试应用程序那样方便,因此,在前期代码编写的过程中保持代码的整洁易懂,将大大方便后期的调试。
❑在内核态下编程,系统内的所有资源都是在内核统一调配的,并且数量有限,因此在申请的资源用完后一定要进行释放,避免出现死锁情况。
❑Linux内核API有很多配对使用。例如,文件引用计数有加操作,也会有相应的减操作,如果在实验中进行了“引用计数”加操作,函数执行后未进行减操作还原,可能会出现系统崩溃。
本书中的所有内核API验证实例都是在Linux内核态下进行编程与验证的。