- 1、本文档共17页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux 内核模块和系统调用
1.实验目的:
a. 了解Linux 内核模块和系统调用的相关知识
b.通过实验了解内核模块和系统调用实验的机制
2.Linux 内核模块
2.1.微 内核VS 单 内核
微内核:在微内核中,大部分内核都作为单独的进程在特权状态下运行,他
们通过消息传递进行通讯。在典型情况下,每个概念模块都有一个进程。因此,
假如在设计中有一个系统调用模块,那么就必然有一个相应的进程来接收系统调
用,并和能够执行系统调用的其他进程(或模块)通讯以完成所需任务。在这些
设计中,微内核部分经常只是个消息转发站:当系统调用模块要给文档系统模块
发送消息时,消息直接通过内核转发。这种方式有助于实现模块间的隔离。
优点 :
a. 无需的模块不会被加载到内存中,因此微内核就能够更有效的利用内存。
b. 充分的模块化,可独立更换任意模块而不会影响其他模块,从而方便 于
第三方开发、设计模块
c. 具有很高的可移植性,理论上讲只需要单独对微内核各部分进行移植修
改即可。由于微内核的体积通常很小,而且互不影响,因此工作量很小。
缺点 :效率问题
单内核 :单内核是个很大的进程。它的内部又能够被分为若干模块(或是层
次或其他)。但是在运行的时候,他是个单独的二进制大映像。其模块间的通讯
是通过直接调用其他模块中的函数实现的,而不是消息传递。
优点:单内核模型以提高系统执行效率为设计理念,因为整个系统是一个
统一的内核,所以其内部调用效率很高。
缺点:通常各模块之间的界限并不特别清晰,模块间的调用比较随意,所
以进行系统修改或升级时,往往 “牵一发而动全身” ,导致工作量加大,使其难
于维护。
微内核与单内核之争由来已久 ,1992 年两位上古巨牛 Tanenbaum 与 Linus 就
因此事展开了一场论述 ;/question
2.2 Linux 如何对待这个问题
Linux 是一个单内核,也就是说,Linux 内核运行在单独的内核地址空间。不
过,Linux 汲取了微内核的精华:其引以为傲的是模块化设计、抢占式内核、支
持内核线程以及动态装载内核模块的能力。不仅如此,Linux 还避免微内核设计
上性能损失的缺陷,让所有事情都运行在内核态,直接调用函数,无需消息传递。
至今,Linux 是模块化的、多线程的以及内核本身可调度的操作系统。
2.3 LKM (Loadable Kernel Module)
内核模块是一种没有经过连接,不能独立运行的目标文件,在内核空间运
行的程序。经过链接装载到内核里面成为内核的一部分,可以访问内核的公用符
号;LKM 可以在运行时加载内核模块功能,在不需要时可以卸载相关内核模块
节约系统资源;
优点:模块本身不编译进内核,从而控制了内核的大小;模块一旦被加载,
将和其它的部分完全一样。
缺点:可能会有内核与模块版本不兼容的问题,导致内核崩溃;
2.4 Linux 的内核模块相关命令
在内核模块开发的过程中常用的有以下指令。
1) insmod: 将模块插入内核中,使用方法:#insmod XXX.ko
2) rmmod: 将模块从内核中删除,使用方法:#rmmod XXX.ko
3) lsmod: 列表显示所有的内核模块,可以和 grep 指令结合使用。使用方
法:#lsmod | grep XXX
4) modprobe: modprobe 可载入指定的个别模块,或是载入一组相依赖的
模块。modprobe 会根据 depmod 所产生的依赖关系,决定要载入哪些模块。若在
载入过程中发生错误,在 modprobe 会卸载整组的模块。依赖关系是通过读取
/lib/modules/2.6.xx/modules.dep 得到的。而该文件是通过 depmod 所建立。
5) modinfo: 查看模块信息。使用方法:#modinfo XXX.ko
6) tree –a: 查看当前目录的整个树结构。使用方法:#tree -a
2.5 内核模块程序结构
#include linux/init.h //for moudle_in
文档评论(0)