!!!??? 2.3 核心模块与应用程序的对比

刚才我们知道了内核模块程序不同于驱动程序,那么内核模块程序和应用程序有什么不同呢?

1、大多数小规模及中规模应用程序是从头到尾执行单个任务,而模块却只是预先注册自己一边服务于将来的某个请求,然后它的初始化函数就立即结束了。也就是说,模块初始化函数的任务就是为以后调用模块函数预先做准备;而模块的退出函数会在模块被卸载之前调用。这就不同于应用程序从头到尾执行的单个任务,而是根据用户操作执行两个任务。

这种编程方式和事件驱动的编程有点类似,但并不是所有的应用程序都是事件驱动的,而每个内核模块却都是事件驱动的。另外,事件驱动的应用程序和内核模块代码之间也有一个主要的区别:应用程序在退出时,可以不管资源的释放或者其他的清楚,但是模块的退出函数却必须仔细撤销初始化函数所做的一切,否则,在熊重启之前某些东西就会残留在系统中。(与Windows下的卸载残留没有关系)这样的好处:可以缩短模块的开发周期,不需要每次测试的时候都要重启。

2、应用程序可以调用它自己并未定义的函数,这是因为连接过程能够解析外部引用从而使用适当的函数库。比如printf函数。但是,模块仅仅被链接到内核,因此它只能调用内核导出的那些函数,比如printk函数。

和内核相关的任何内容都在我们安装并配置好的内核源代码树的头文件中声明,其中,大多数相关头文件保存在include/linux和include/asm目录中,但include的其它子目录中保存有和特定内核子系统相关的头文件。

3、内核编程和应用程序编程在各环境下处理错误的方式也不同;应用程序开发过程中的段错误是无害的 ,并且总是可以使用调试器跟踪到源代码中的问题所在,而一个内核错误即使不影响整个系统,也至少会杀死当前进程,我们需要专门的调试技术来跟踪内核错误。

4、模块运行在内核空间,应用程序运行在用户空间,这是操作系统的基本理论。

如何在模块中使用函数调用和函数指针,从而为运行中的内核增加新的功能。

说实话,这张图并没有感觉到有什么,也许是我没有理解到位,希望以后能理解透。

来自为知笔记(Wiz)

时间: 2024-11-07 06:51:47

!!!??? 2.3 核心模块与应用程序的对比的相关文章

核心模块

核心模块Path 作用:用于帮助程序员来操作硬盘上的路径. 核心模块注意点:当引用核心模块的时候直接require('模块名'),不需要加任何路径或者后缀. Path中的常用API: dirname(路径): //获取传入路径中文件的路径 basename(路径): //如果不传入任何参数:直接获取到传入路径中文件的全名称(文件名+扩展名) //如果传入文件对应的后缀,会将后缀名去掉(传错与不传相同) extname(路径): //获取传入路径中文件的扩展名 join(): //将多个路径组装成

node.js学习笔记5——核心模块1

Node.js核心模块主要内容包括:(1)全局对象 (2)常用工具 (3)事件机制 (4)文件系统访问 (5)HTTP服务器与客户端 一: 全局对象 Node.js中的全局对象是global,所有的全局变量(除了global本身以外)都是global的属性. global 最根本的作用是作为全局变量的宿主. 全局变量的条件: (1)在最外层定义的变量; (2)全局对象的属性: (3)隐式定义的变量(未定义直接赋值的变量(strict模式下不可以)) 在Node.js中不可能在最外层定义变量,因为

JavaScript之:模块加载程序的历史与背景

原文:History and Background of JavaScript Module Loaders 作者:Elias Carlston 翻译:leotso 介绍 Web 应用程序的应用程序逻辑不断从后端移到浏览器端.但是,由于富客户端 JavaScript 应用程序的规模变得更大,它们遇到了类似于多年来传统应用所面临的挑战:共享代码以便重用,同时保持架构的隔离分层,并且足够灵活以便于轻松扩展. 这些挑战的一个解决方案是开发 JavaScript 模块和模块加载系统.这篇文章将着重于比较

单片机小白学步系列(十七) 单片机/计算机系统概述:核心模块

前面已经介绍了模块化设计的特点和巨大优势.在我们的实验板中,单片机是其中最核心的一个模块:而对于单片机来说,又是由更多的子模块组合而成.本文主要对单片机/计算机系统中最核心的几个模块进行简要介绍. 为了便于进行说明,后面会将单片机/计算机简单的统称为微机系统. 信息与数据 何为信息?可以理解成我们周围各种所能感知到的东西.还有人们所思所想等等,信息的概念不好解释,但是大家都能理解,也不是我要讨论的重点. 在微机系统中,能处理很多信息,例如我正在写的内容,就是文字和图像信息.处理信息的前提,就是对

Node.js【5】核心模块

笔记来自<Node.js开发指南>BYVoid编著 第4章 Node.js核心模块 4.1.全局对象 Node.js中的全局对象是global,所有全局变量(除了global本身以外)都是global对象的属性.我们在Node.js中能够直接访问到对象通常都是global的属性,如console.process等. 永远使用var定义变量以避免引入全局变量,因为全局变量会污染命名空间,提高代码的耦合风险. process用于描述当前Node.js进程状态的对象,提供了一个与操作系统的简单接口.

perl核心模块解析(一)POSIX

perl核心模块解析(一)    POSIX 详细文档链接如下 源自:http://blog.csdn.net/jonathanxqs 转自:http://perldoc.perl.org/POSIX.html POSIX/?p?z?ks/, 是可移植操作系统接口(Portable Operating System Interface ),POSIX标准定义了操作系统应该为应用程序提供的接口标准,是IEEE为要在各种UNIX操作系统上运行的软件而定义的一系列API标准的总称,其正式称呼为IEEE

[开源项目-MyBean轻量级配置框架] 使用MyBean快速搭建分模块的应用程序(主页面的TAB)(DLL-MDI)

[概述] 抱歉由于上次开源比较匆忙,没有来的及做一个DEMO,里面也有些垃圾的文件没有及时清理.DEMO其实昨天晚上已经调通.相关说明文档今天晚上才说明好,欢迎大家继续关注和交流,和大家一起分享我10多年的管理软件框架开发经验,后续会完善更多相应的有用的插件,供大家直接使用. [DEMO图片预览] [MDI-DEMO-BIN文件说明] 编译好的文件打包存放于根目录下面,文件名为:MDI-DEMO-BIN.zip,采用XE5编译,使用标准控件,其他版本编译myBeanConsole.exe和plu

Hadoop2源码分析-HDFS核心模块分析

1.概述 这篇博客接着<Hadoop2源码分析-RPC机制初识>来讲述,前面我们对MapReduce.序列化.RPC进行了分析和探索,对Hadoop V2的这些模块都有了大致的了解,通过对这些模块的研究,我们明白了MapReduce的运行流程以及内部的实现机制,Hadoop的序列化以及它的通信机制(RPC).今天我们来研究另一个核心的模块,那就是Hadoop的分布式文件存储系统——HDFS,下面是今天分享的内容目录: HDFS简述 NameNode DataNode 接下来,我们开始今天的分享

第四周作业之wcPro核心模块的实现

第四周作业之wcPro核心模块的实现 一.基本任务:代码编写+单元测试 小组github地址 https://github.com/SkateCloud/wcPro PSP表格 PSP2.1 PSP阶段 预估耗时(分钟) 实际耗时(分钟) Planning 计划 30 60 Estimate 估计任务需要多少时间 30 60 Development 开发 120 180 Analysis 需求分析 20 30 Design Spec 生成设计文档 20 30 Design Review 设计复审