/*
mtest_dump_vma_list():打印出当前进程的各个VMA,这个功能我们简称”l
istvma”
mtest_find_vma():
找出某个虚地址所在的VMA,这个功能我们简称“findvma”
my_follow_page(
):根据页表,求出某个虚地址所在的物理页面,这个功能我们简称”findpage
”
mtest_write_val(),
在某个地址写上具体数据,这个功能我们简称“writeval”.
*/
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/proc_fs.h>
#include <linux/string.h>
#include <linux/vmalloc.h>
#include <asm/uaccess.h>
#include <linux/init.h>
#include <linux/slab.h>
#include <linux/mm.h>
#include <linux/vmalloc.h>
#include<linux/spinlock>
// MODULE_LICENSE(“GPL”);
/*
@如何编写代码查看自己的进程到底有哪些虚拟区?
*/
static void mtest_dump_vma_list(void)
{
Struct task_struct tsk;//指针用来指向请求缺页处理的进程
Tsk = current;//指向当前发生页错误的进程
struct mm_struct *mm = tsk->mm; //
mm_struct结构是用来描述整个进程用户空间,在这里将当前运行的进程所指向
的内存区赋给结构体指针mm(使mm指向当前进程的内存区的首地址)
struct vm_area_struct *vma;
//定义一个代表进程虚拟地址区间的结构体指针
printk(“The current process is %s”,tsk-
>comm);//打印当前进程所指向的内存地址
printk(“mtest_dump_vma_list”); //打印mtest_dump_vma_list
down_read(&mm->mmap_sem); //获取mm信号量
for (vma = mm->mmap;vma; vma = vma->vm_next) {
//如果进程用户空间的虚存区不为空则执行打印