统计缺页次数.docxVIP

  • 6
  • 0
  • 约1.57千字
  • 约 3页
  • 2020-11-13 发布于天津
  • 举报
统计缺页次数 统计操作系统缺页次数 实验目的 学习虚拟内存的基本原理和 Linux虚拟内存管理技术; 深入理解、掌握 Linux的按需调页过程; 掌握内核模块的概念和操作方法,和向 /proc文件系统中增加文件的方法; 综合运用内存管理、系统调用、 proc文件系统、内核编译的知识。 实验内容 原理 Linux的虚拟内存技术采用按需调页,当 CPU请求一个不在内存中的页面时,会发生缺 页,缺页被定义为一种异常(缺页异常),会触发缺页中断处理流程。每种 CPU结构都提供 一个do_page_fault 处理缺页中断。由于每发生一次缺页都要进入缺页中断服务函数 do_page_fault —次,所以可以认为执行该函数的次数就是系统发生缺页的次数。因此可以 定义一个全局变量 pfcount作为计数变量, 在执行do_page_fault 时,该变量值加1。本实 验通过动态加载模块的方法,利用 /proc文件系统作为中介来获取该值。 实验环境 操作系统:Ubuntu 12.04 (内核版本为 3.2.0-23-generic-pae) 内核源码:linu x-3.2.58 实验指导 1.下载一份内核源代码并解压 Linux受GNU通用公共许可证(GPL )保护,其内核源代码是完全开放的。现在很多 Linux的网站都提供内核代码的下载。推荐使用 Linux的官方网站:。 统计缺页次数 图1 Linux的官方网站 在terminal下可以通过wget命令下载源代码: $ cd /tmp $ wget 切换到root身份,解压源代码到/usr/src目录下: xz — linu x-3.2.58.tar.xz tar -vf linux-3.2.58.tar -C /usr/src 修改内核源代码,添加统计变量 1、 切换到预编译内核目录 #cd /usr/src/li nux-3.2.58 2、 修改处理内存访问异常的代码 //用vi编辑器打开fault.c, 一般使用In tel x86体系结构,则修改 arch/x86/目录下的文件 #vi arch/x86/mm/fault.c 〃在do_page_fault函数的上一行定义统计缺页次数的全局变量 pfcount un sig ned long volatile pfcount; //将pfcount加入到do_page_fault中,用以统计缺页次数 pfcoun t++; 3、 修改内存管理代码 //用vi编辑器打开头文件 mm.h #vi in clude/li nu x/mm.h 〃在mm.h中加入全局变量 pfcount的声明,代码加在 extern int page_cluster;语句之后 exter n un sig ned long volatile pfcount; 4、 导出pfcount全局变量,让整个内核(包括模块)都可以访问。方法是: #vi kernel/kallsyms.c //在文件最后加入一行代码 EXPORT_SYMBOL(pfcou nt); 配置编译新内核 用编译Linux内核预备实验中的方法完成新内核的配置、编译、替换,重启后验证是否 完成替换。 #uname - 〃如果为3.2.58 (与你采用的新内核版本一至)说明替换完成 编写读取pfcount值的模块代码 系统重启后,执行如下操作: #mkdir source 〃在当前用户目录下创建 source文件夹,用于存放编写的用户程序 #cd source 〃切换至U source 目录 #vi pf.c //新建用于构建模块的代码 /*pf.c*/ /*modules program*/ #in clude li nux/ini t.h

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档