内核模块和普通应用程序之间的差异

1、内核模块是操作系统内核的一部分,运行在内核空间;而应用程序运行在用户空间。

2、内核模块中的函数是被动地被调用的,比如初始化函数和清楚函数分别是在内核模块被加载和被删除的时候调用,模块通常注册一些服务性质的函数供其它功能单元在之后调用,而其他应用程序则是顺序执行,然后通常进入一个循环反复调用某些函数。

3、内核模块处于C函数库值下,自然就不能调用C函数库,(内核源码中会实现类似的函数);而应用程序则可以随意调用C库函数。

4、内核模块要做一些清除性的工作,比如在一个操作失败后或在内核的清除函数中;而应用程序有些工作通常不需要做,比如在程序退出前关闭所有已打开的文件。

5、内核模块如果产生了非法访问(比如对野指针的访问),将很有可能导致整个系统的崩溃;而应用程序通常只是影响自己。

6、内核模块的并发更多,比如终端、多处理器;而应用程序一般只考虑多进程和多线程。

7、整个内核空间的调用链上只有4KB或8KB的栈,相对于应用程序来说非常的小。所以如果需要打的内存空间,通常应该动态分配。

8、虽然printk和printf的行为非常相似,但是通常printk不支持浮点数,例如要打印一个浮点变量,在编译时通常会出现如下警告,并且模块也不会加载成功。/

你可能感兴趣的:(内核模块和普通应用程序之间的差异)