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

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

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

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

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

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

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值