欢迎来到天天文库
浏览记录
ID:48763619
大小:265.50 KB
页数:36页
时间:2020-01-22
《课设2讲义:内核模块.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、操作系统课程设计专题二:内核模块主讲:褚华1AbstractLinux内核模块12内核模块举例实验要求321.Linux内核模块3单体内核VS微内核(概念)单体内核(Macrokernel)整个核心程序都是以核心空间(KernelSpace)的身份及监管者模式(SupervisorMode)来运行;操作系统的代码高度紧密,所有的模块都在同一块寻址空间内运行微内核(Microkernel)微内核本身只提供最基本的操作系统的功能,比如进程调度与消息传递等其他的功能由其独立的模块提供,每个独立的功能模
2、块都可以是一个进程。当我们需要使用某个功能的时候,我们只需要在运行的操作系统里安装这个模块,并且运行对应服务,当这个功能不再需要的时候,我们可以停止这个服务,这样这个功能模块将不占据系统内存和处理器的资源,而不会破坏当前的系统正常运行4效率问题驱动程序问题内核升级问题微内核设计方式带来的优势模块化的方式设计操作系统,模块的设计者只需要关注自己的功能模块。操作系统更新时,除了微内核本身,可以动态的更新其他功能模块在系统运行时,可以根据需要动态的使能/禁止对应的模块,以释放计算机的资源。单体内核VS
3、微内核(优缺点)5单体内核VS微内核(实例)单体内核传统的UNIX大行其道的Linux商业化非常成功的Solaris微内核WindowsMacOSWindRiverVxWorksLinux系统如何解决单体内核的缺陷6Linux的内核模块(概念)Linux内核引入内核模块机制LKM--LoadableKernelModule通过动态加载内核模块,使得在运行过程中扩展内核的功能不需要的时候,卸载该内核模块7Linux的内核模块(概念)内核模块是一种没有经过链接,不能独立运行的目标文件,是在内核空间中
4、运行的程序。经过链接装载到内核里面成为内核的一部分,可以访问内核的公用符号(函数和变量)。内核模块可以让操作系统内核在需要时载入和执行,在不需要时由操作系统卸载。它们扩展了操作系统内核的功能却不需要重新启动系统。如果没有内核模块,我们不得不一次又一次重新编译生成单内核操作系统的内核镜像来加入新的功能。这还意味着一个臃肿的内核。8Linux的内核模块(图)9Linux的内核模块(图)1011Linux的内核模块(优缺点)模块机制的优点:减小内核映像尺寸,增加系统灵活性;节省开发时间;修改内核,不必
5、重新编译整个内核。模块的目标代码一旦被链入内核,作用和静态链接的内核目标代码完全等价。模块机制的缺点:对系统性能有一定损失;使用不当时会导致系统崩溃;Linux的内核模块(相关命令)内核模块的加载#insmodmodule_name内核模块的卸载#rmmodmodule_name或者#modprobe–rmodule_name查看系统已经加载的模块#lsmod查看系统已经加载的模块信息#modinfo12132.内核模块举例14内核模块实现的几个步骤新建模块目录用编辑器(vi)编辑源文件用编辑器
6、编辑Makefile编译模块内核模块源代码15#include//formodule_init()#include//mustbeinclude#include//forprintk()staticinthello_init(void){//模块入口函数printk("Helloworld");return0;}staticvoidhello_exit(void){//模块退出函数printk("He
7、llomoduleexit");}module_init(hello_init);module_exit(hello_exit);MODULE_LICENSE("GPL");MODULE_AUTHOR("CHUHUA");MODULE_DESCRIPTION("hello");内核模块说明说明:模块入口函数为hello_init(),由module_init()宏指定,在模块被加载的时候被调用向系统注册。入口函数的返回值:0表示成功,非0表示失败。模块的退出函数为hello_exit(),由
8、module_exit()宏指定,在模块被卸载时被调用向系统注销,主要来完成资源的清理工作。它被调用完毕后,就模块就被内核清除了。一个模块最少需要有入口和退出函数。16内核模块说明说明:2.4内核后,引入识别代码是否在GPL许可下发布的机制。在使用非公开的源代码产品时会得到警告。通过宏MODULE_LICENSE(“GPL”),设置模块遵守GPL证书,取消警告信息。宏MODULE_DESCRIPTION()用来描述模块的用途。宏MODULE_AUTHOR()用来声明模块的作者。宏MODULE_S
此文档下载收益归作者所有