博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
!!!??? 2.3 核心模块与应用程序的对比
阅读量:4552 次
发布时间:2019-06-08

本文共 914 字,大约阅读时间需要 3 分钟。

    刚才我们知道了内核模块程序不同于驱动程序,那么内核模块程序和应用程序有什么不同呢?
    1、大多数小规模及中规模应用程序是从头到尾执行单个任务,而模块却只是预先注册自己一边服务于将来的某个请求,然后它的初始化函数就立即结束了。也就是说,模块初始化函数的任务就是为以后调用模块函数预先做准备;而模块的退出函数会在模块被卸载之前调用。这就不同于应用程序从头到尾执行的单个任务,而是根据用户操作执行两个任务。
    这种编程方式和事件驱动的编程有点类似,但
并不是所有的应用程序都是事件驱动的,而每个内核模块却都是事件驱动的。另外,事件驱动的应用程序和内核模块代码之间也有一个主要的区别:
应用程序在退出时,可以不管资源的释放或者其他的清楚,但是模块的退出函数却必须仔细撤销初始化函数所做的一切,否则,在熊重启之前某些东西就会残留在系统中。(与Windows下的卸载残留没有关系)这样的好处:可以缩短模块的开发周期,不需要每次测试的时候都要重启。
    2、
应用程序可以调用它自己并未定义的函数,这是因为连接过程能够解析外部引用从而使用适当的函数库。比如printf函数。但是,
模块仅仅被链接到内核,因此它只能调用内核导出的那些函数,比如printk函数。
    和内核相关的任何内容都在我们安装并配置好的内核源代码树的头文件中声明,其中,大多数相关头文件保存在include/linux和include/asm目录中,但include的其它子目录中保存有和特定内核子系统相关的头文件。
    3、
内核编程和应用程序编程在各环境下处理错误的方式也不同;应用程序开发过程中的段错误是无害的 ,并且总是可以使用调试器跟踪到源代码中的问题所在,而一个内核错误即使不影响整个系统,也至少会杀死当前进程,我们需要专门的调试技术来跟踪内核错误。
    4、
模块运行在内核空间,应用程序运行在用户空间,这是操作系统的基本理论。
    如何在模块中使用函数调用和函数指针,从而为运行中的内核增加新的功能。
    说实话,这张图并没有感觉到有什么,也许是我没有理解到位,希望以后能理解透。

转载于:https://www.cnblogs.com/fjutacm/p/5200549.html

你可能感兴趣的文章
Codeforces 1000C Covered Points Count 【前缀和优化】
查看>>
python高效读取文件、文件改写
查看>>
gulp
查看>>
pgsql查询优化之模糊查询
查看>>
[转]-Gradle使用手册(三):构建任务
查看>>
ExtJS下拉树
查看>>
android 调用系统相机录像并保存
查看>>
BW系统表的命名规则
查看>>
Asp.Net在IE10下出现_doPostBack未定义的解决办法 LinkButton
查看>>
《CLR via C#》Part2之Chapter5 基元类型、引用类型和值类型(一)
查看>>
1-9 RHEL7-文件权限管理
查看>>
apache服务器安装
查看>>
Search a 2D Matrix
查看>>
文件解析漏洞
查看>>
弹性成像的一些术语
查看>>
作业2
查看>>
vim 笔记
查看>>
MySQL的基本使用命令
查看>>
output 参数在存储过程中的用法
查看>>
大数加法和乘法(高精度)
查看>>