Linux操作系统分析与实践.ppt

Linux操作系统分析与实践.ppt

ID:51595543

大小:544.50 KB

页数:20页

时间:2020-03-25

Linux操作系统分析与实践.ppt_第1页
Linux操作系统分析与实践.ppt_第2页
Linux操作系统分析与实践.ppt_第3页
Linux操作系统分析与实践.ppt_第4页
Linux操作系统分析与实践.ppt_第5页
资源描述:

《Linux操作系统分析与实践.ppt》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、Linux操作系统分析与实践实验二:内存管理《Linux操作系统分析与实践》课程建设小组北京大学二零零八年春季*致谢:感谢Intel对本课程项目的资助实验目的1.理解Linux虚拟内存管理的机制。2.学习模块编程的基本技能。实验内容1.模块编写一个内核模块,分别实现如下几个函数:staticvoidmtest_dump_vma_list(void):依次列出当前进程各段的读、写或执行权限。staticvoidmtest_find_vma(unsignedlongaddr):找到虚地址addr所在的vma,通过printk打印该段的起始地址、终止地址、段标志等信

2、息。staticvoidmtest_find_page(unsignedlongaddr):找到虚拟地址addr,显示出其对应的物理地址。为了测试和使用以上函数,在内核模块的初始化函数中创建一个名为mtest的/proc文件。mtest文件绑定的写函数mtest_write允许用户程序写入一串字符串,指定要使用以上的那个内核函数及其参数。mtest_write函数的定义为:staticssize_tmtest_write(structfile*file,constchar__user*buffer,size_tcount,loff_t*data)2.测试程序为

3、了测试以上模块的正确性,要求编写一个称为test的应用程序,它通过打开/proc文件mtest,调用模块内的相关函数并给出相应的测试信息。Linux内核模块Linux操作系统的内核是单一体系结构(monolithickernel)有了模块机制后,提高Linux操作系统的可扩充性,内核编程不再是一个恶梦什么是模块呢?模块的全称是“动态可加载内核模块”(LoadableKernelModule,LKM)模块在内核空间运行模块实际上是一种目标对象文件没有链接,不能独立运行,但是其代码可以在运行时链接到系统中作为内核的一部分运行或从内核中取下,从而可以动态扩充内核的功

4、能这种目标代码通常由一组函数和数据结构组成Linux内核模块的优点与缺点优点使得内核更加紧凑和灵活修改内核时,不必全部重新编译整个内核。系统如果需要使用新模块,只要编译相应的模块,然后使用insmod将模块装载即可模块的目标代码一旦被链接到内核,它的作用域和静态链接的内核目标代码完全等价缺点由于内核所占用的内存是不会被换出的,所以链接进内核的模块会给整个系统带来一定的性能和内存利用方面的损失;装入内核的模块就成为内核的一部分,可以修改内核中的其他部分,因此,模块的使用不当会导致系统崩溃;为了让内核模块能访问所有内核资源,内核必须维护符号表,并在装入和卸载模块时

5、修改符号表;模块会要求利用其它模块的功能,所以,内核要维护模块之间的依赖性.Linux内核模块与应用程序的区别C语言程序Linux内核模块运行用户空间内核空间入口main()module_init()指定;出口无module_exit()指定;编译gcc–cMakefile连接ldinsmod运行直接运行insmod调试gdbkdbug,kdb,kgdb等模块相关命令insmod[moduleparameters]Loadthemodule注意,只有超级用户才能使用这个命令RmmodUnloadthemodulelsmodListallm

6、odulesloadedintothekernel这个命令和cat/proc/modules等价modprobe[-r]–Loadthemodulespecifiedandmodulesitdepends模块依赖一个模块A引用另一个模块B所导出的符号,我们就说模块B被模块A引用。如果要装载模块A,必须先要装载模块B。否则,模块B所导出的那些符号的引用就不可能被链接到模块A中。这种模块间的相互关系就叫做模块依赖。最简单的内核模块例子#include#include#inclu

7、destaticint__inithello_init(void){printk(KERN_INFO"Helloworld");return0;}staticvoid__exithello_exit(void){printk(KERN_INFO"Goodbyeworld");}module_init(hello_init);module_exit(hello_exit);staticint__inithello_init(void)staticvoid__exithello_exit(void)Static声明,因为这种函数

8、在特定文件之外没有其它意义__init

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。