西南交通大学【操作系统实验7】

实验目的

  1. (1)理解内存管理中缺页的概念。
  2. (2)综合运用实验1,实验5,实验6中/proc文件系统、内存管理、系统调用、  内核编译的知识。
  3. (3)掌握向/proc文件系统中增加文件的方法。
  4. (4)掌握Linux内核模块的概念和操作方法。

实验内容

通过在内核中自建变量并利用/proc文件系统作为中介的方法来统计系统缺页次数:

  1. (1)在内核中实现缺页次数统计。
  2. (2)编译并安装新内核。
  3. (3)新建内核模块,并加载到新内核,通过/proc实现用户态下查看缺页次数。

实验环境

系统版本:Ubuntu 14.04 LTS

内核版本: Linux 3.2.0.29-generic

欲编译内核:Linux-2.6.32.60

实验步骤

第一部分:在内核中实现缺页次数统计

ubuntu@oslinux-virtual-machine:~$

cd /usr/src/linux-2.6.32.60

//切换到预编译内核目录

ubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$

sudo gedit arch/x86/mm/fault.c

//在do_page_fault函数上一行定义统计缺页次数全局变量pfcount

unsigned long volatile pfcount;

//将pfcount加入到do_page_fault中,用以统计缺页次数.

pfcount++;

ubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$

sudo gedit include/linux/mm.h

//声明全局变量pfcount到头文件mm.h中,在extern int page_cluster下面

添加代码:

extern unsigned long volatile pfcount;

ubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$

sudo gedit kernel/kallsyms.c

//导出pfcount全局变量,让整个内核都可以访问

//最后一行添加代码如下:

EXPORT_SYMBOL(pfcount);

第二部分:编译安装新内核

ubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$

sudo make mrproper

//删除原来编译产生的垃圾

ubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$

sudo cp /boot/config-3.2.0-29-generic-pae .config

//导入原系统的内核配置ubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$

sudo make oldconfig

//更改配置,一直回车

//导入配置到欲编译内核中 )

ubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$

sudo make cleanubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$

sudo make bzImage

//编译内核

ubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$

sudo make modules

//编译模块

ubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$

sudo make modules_install

//添加模块到内核

ubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$

sudo make install

//链接、组建内核

ubuntu@oslinux-virtual-machine:~$ /usr/src/linux-2.6.32.60$

sudo reboot

//重新启动Linux系统重新启动Linux系统,开机时长按shift键直到进入启动加载界面,选择新编译的内核版本,按回车进入系统。进入系统后,使用命令uname –a 验证内核版本

是否安装成功

第三部分:新建内核模块,通过/proc实现用户态下查看缺页次数

ubuntu@oslinux-virtual-machine:~$ mkdir source

//系统重启后,创建source文件夹,用于存放编写的模块程序

ubuntu@oslinux-virtual-machine:~$ cd source/

//切换到source目录

ubuntu@oslinux-virtual-machine:~/source$ gedit pf.c

//新建用于构建模块的代码

ubuntu@oslinux-virtual-machine:~/source$

gedit Makefile

//构建Makefile,在Makefile中添加如下内容:

obj-m := pf.o

ubuntu@oslinux-virtual-machine:~/source$

sudo make -C /usr/src/linux-2.6.32.60 SUBDIRS=$PWD modules

//编译、构建内核模块

ubuntu@oslinux-virtual-machine:~/source$

sudo insmod pf.ko

//加载内核模块到内核中ubuntu@oslinux-virtual-machine:~/source$ sudo lsmod | grep pf

//验证pf内核模块是否加载到内核进程中,运行命令出现pf信息说明加载成功

ubuntu@oslinux-virtual-machine:~/source$ cat /proc/pf/pfcount

//打印/proc/pf/pfcount,查看缺页统计次数

实验结果

验证内核版本是否安装成功

验证pf内核模块是否加载到内核进程中,运行命令出现pf信息说明加载成功

打印/proc/pf/pfcount,查看缺页统计次数

核心代码

/*pf.c*/

/*内核模块代码*/

#include <linux/init.h>

#include <linux/module.h>

#include <linux/kernel.h>

#include <linux/mm.h>

#include <linux/proc_fs.h>

#include <linux/string.h>

#include <asm/uaccess.h>

struct proc_dir_entry *proc_pf;

struct proc_dir_entry *proc_pfcount;

extern unsigned long volatile pfcount;static inline struct proc_dir_entry *proc_pf_create(const

char* name,

mode_t mode, read_proc_t *get_info)

{

return create_proc_read_entry(name, mode, proc_pf,

get_info, NULL);

}

int get_pfcount(char *buffer, char **start, off_t offset, int

length, int *peof,void *data)

{

int len = 0;

len = sprintf(buffer, "%ld \n", pfcount);

return len;

}static int pf_init(void)

{

proc_pf = proc_mkdir("pf", 0);

proc_pf_create("pfcount", 0, get_pfcount);

return 0;

}

static void pf_exit(void)

{

remove_proc_entry("pfcount", proc_pf);

remove_proc_entry("pf", 0);

}

module_init(pf_init);

module_exit(pf_exit);

MODULE_LICENSE("GPL");

MODULE_AUTHOR("Aron.t.wang");

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/699005.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

人人必看:人工智能成熟后,被社会广泛使用后,可能被取代的行业有哪些,以及AI后新兴的行业和职位有哪些?

随着人工智能技术的不断成熟和广泛应用&#xff0c;许多行业和职位可能会受到影响&#xff0c;一些可能被取代&#xff0c;而另一些则会因为AI技术的引入而新兴。人人必看&#xff1a;人工智能成熟后&#xff0c;被社会广泛使用后&#xff0c;可能被取代的行业有哪些&#xff0…

高德地图AI革新:智能导航提升驾驶安全与个性化体验

AITOP100平台了解到&#xff0c;近期&#xff0c;高德地图的用户们在社交平台上分享了令人惊叹的体验&#xff0c;纷纷点赞并称之为“黑科技”。这源于高德地图推出的“车道级安全预警”功能&#xff0c;这一创新不仅适用于两轮和四轮车辆&#xff0c;也成为新老司机的出行必备…

Matlab使用Simulink仿真实现AM和BPSK信号的解调及误码率对比

前言 本篇实现了基于AM和BPSK调制的通信系统&#xff0c;采用Bernoulli Binary Generator生成随机二元序列&#xff0c;码元速率为0.5秒/个。AM调制使用Sine Wave模块生成载波&#xff0c;频率40Hz&#xff0c;相位π/2。BPSK调制通过Switch模块切换相位0和π的载波。信号传输…

乡村振兴的多元化产业发展:推动农村一二三产业融合发展,培育乡村新业态,打造多元化发展的美丽乡村

一、引言 乡村振兴是我国当前及未来一段时间内的重大战略任务&#xff0c;旨在促进农村经济的全面发展&#xff0c;提高农民的生活水平&#xff0c;实现城乡融合发展。在乡村振兴的进程中&#xff0c;推动农村一二三产业融合发展&#xff0c;培育乡村新业态&#xff0c;是打造…

绿色转型,节能攻坚

随着人口增长和经济发展&#xff0c;资源短缺和环境污染问题愈发严重&#xff0c;绿色转型和节能已成为我们共同的责任。为了推动环保事业的发展&#xff0c;阜阳善于善行志愿者团队&#xff0c;参与了本年度以“绿色转型&#xff0c;节能攻坚”为主题的全国节能宣传周活动。这…

echart盒子没有跟着当前div大小变化而自适应

一、问题描述 当echarts图表在一个盒子里的时候&#xff0c;盒子大小变化了&#xff0c;但是图表没有跟着自适应&#xff0c;比如这样&#xff0c;盒子变大了&#xff0c;但是图表没变化 二、解决方法 在盒子大小更改的同时&#xff0c;调用图表的resize方法&#xff0c;记…

海思Hi3519DV500方案1200万无人机吊舱套板

海思Hi3519DV500方案1200万无人机吊舱套板 Hi3519DV500 是一颗面向行业市场推出的超高清智能网络摄像头SoC。该芯片最高 支持四路sensor 输入&#xff0c;支持最高4K30fps 的ISP 图像处理能力&#xff0c;支持2F WDR、 多级降噪、六轴防抖、全景拼接、多光谱融合等多种传统图像…

FL Studio21永久免费破解中文版下载,让我这个音乐制作爱好者如获至宝!

FL Studio21永久免费破解中文版下载&#xff0c;让我这个音乐制作爱好者如获至宝&#xff01;&#x1f3b6; 这款软件功能强大&#xff0c;操作简单易上手。我可以轻松地创作出各种风格的音乐作品。无论是流行、摇滚还是电子音乐&#xff0c;都能轻松驾驭。&#x1f3a7; 使用F…

Java 基础语法

Java 基础语法 一个 Java 程序可以认为是一系列对象的集合&#xff0c;而这些对象通过调用彼此的方法来协同工作。下面简要介绍下类、对象、方法和实例变量的概念。 对象&#xff1a;对象是类的一个实例&#xff0c;有状态和行为。例如&#xff0c;一条狗是一个对象&#xff…

vue3中实现点击ctrl+enter换行,enter发送

效果 TS部分&#xff1a; <script lang"ts" setup> import { Promotion } from element-plus/icons-vue import { ref } from vue;const question ref() const keyDownCode ref(0)// 键盘按下事件处理函数 const keyDownEnter (e: any) > {console.log(…

AI魔法相机:实时3D重建与场景魔法化

一、产品概述 AI魔法相机是一款创新的硬件产品,它结合了AI技术和3D重建扫描技术,能够实时捕捉并重建3D场景和物理世界。用户只需通过简单的点击操作,即可捕捉现实物体或环境,并将其无缝融合到任何场景中,创造出全新的想象现实。 二、核心功能 实时捕捉:一键式操作,迅速…

CV每日论文--2024.6.6

1、Dealing with All-stage Missing Modality: Towards A Universal Model with Robust Reconstruction and Personalization 中文标题&#xff1a;处理全阶段缺失模态&#xff1a;迈向具有鲁棒重建和个性化的通用模型 简介&#xff1a;这篇论文提出了一种具有模态重建和模型个…

QT漂亮QSS样式模仿流行VUE Element UI ,QSS漂亮大方美观样式 QSS样式 QTableWidget 漂亮样式QSS 快速开发QSS漂亮界面

在现代应用程序开发中&#xff0c;用户界面&#xff08;UI&#xff09;的设计与用户体验&#xff08;UX&#xff09;占据了至关重要的位置。Vue.js框架因其灵活性和丰富的生态系统而广受欢迎&#xff0c;其中Element UI作为一套为Vue设计的桌面端组件库&#xff0c;以其清晰的视…

红海云入选《2024中国数据智能产业图谱1.0》

近日&#xff0c;国内知名大数据产业创新服务媒体数据猿携手上海大数据联盟重磅发布了《2024中国数据智能产业图谱1.0》。红海云凭借在人力资源数字化应用领域的卓越产品创新与服务&#xff0c;成功入选图谱「 企业应用-人力资源」板块。 《2024中国数据智能产业图谱1.0》由数…

视频直播点播EasyDSS平台授权时,出现授权时间即将到期的提示是什么原因?

视频直播点播EasyDSS平台具备灵活的视频能力&#xff0c;包括直播、点播、转码、管理、录像、检索、时移回看等&#xff0c;平台支持音视频采集、视频推拉流、播放H.265编码视频、存储、分发等能力服务&#xff0c;可应用在无人机推流、在线直播、虚拟直播、远程培训等场景中。…

快递一键查询,只需快递单号,轻松掌握全程物流信息,让您的包裹追踪无忧!

在快节奏的现代生活中&#xff0c;快递已经成为我们生活中不可或缺的一部分。无论是网购的宝贝、亲朋好友寄来的礼物&#xff0c;还是工作中的紧急文件&#xff0c;快递都承载着我们的期待和需要。然而&#xff0c;面对众多的快递公司和复杂的查询流程&#xff0c;如何快速、准…

css图片适配,不随屏幕的大小变化

.carimg {width: 100%;height: 100%;max-width: 100%;max-height: 100%;object-fit: cover; } <img class"carimg" :src"item.imageUrl" alt"" /> 效果&#xff1a; 全屏时 屏幕变小时

【Three.js】知识梳理三:Three.js几何体Geometry

1.什么是几何体Geometry&#xff1f; 在 Three.js 中&#xff0c;几何体&#xff08;Geometry&#xff09;是一个数据结构&#xff0c;包含了用于描述三维物体的基本信息&#xff0c;如顶点&#xff08;vertices&#xff09;、面&#xff08;faces&#xff09;和它们的关联属性…

关于会议论文/CPCI/ISTP会议论文

关于会议论文 会议论文是公开发表的学术论文&#xff0c;一般正式的国际学术会议都会公开征稿&#xff0c;并要求录用的论文在会议上进行宣读、交流&#xff0c;然后集结出版&#xff0c;这就是我们常说的会议论文集&#xff0c;而这些发表的论文也可用于硕博毕业、项目结题、…

1 c++多线程创建和传参

什么是进程&#xff1f; 系统资源分配的最小单位。 什么是线程&#xff1f; 操作系统调度的最小单位&#xff0c;即程序执行的最小单位。 为什么需要多线程&#xff1f; &#xff08;1&#xff09;加快程序执行速度和响应速度, 使得程序充分利用CPU资源。 &#xff08;2&…