虚拟内存实践

 

 

 

 

实现目的: 通过实验了解虚拟内存

 

 实验内容:在proc 文件系统下,我们建立一个文件,每次向这个文件写人字符时,调用相应的虚拟内存处理函数

  1. /* 
  2. mtest_dump_vma_list():打印出当前进程的各个VMA,这个功能我们简称"listvma" 
  3. mtest_find_vma(): 找出某个虚地址所在的VMA,这个功能我们简称“findvma" 
  4. my_follow_page( ):根据页表,求出某个虚地址所在的物理页面,这个功能我们简称"findpage" 
  5. mtest_write_val(), 在某个地址写上具体数据,这个功能我们简称“writeval". 
  6. */  
  7.   
  8. #include <linux/module.h>  
  9. #include <linux/kernel.h>  
  10. #include <linux/proc_fs.h>  
  11. #include <linux/string.h>  
  12. #include <linux/vmalloc.h>  
  13. #include <asm/uaccess.h>  
  14. MODULE_LICENSE("GPL");  
  15. MODULE_DESCRIPTION("Fortune Cookie Kernel Module");  
  16.   
  17.   
  18. #include <linux/module.h>  
  19. #include <linux/init.h>  
  20. #include <linux/slab.h>  
  21. #include <linux/mm.h>  
  22. #include <linux/vmalloc.h>  
  23. MODULE_LICENSE("GPL");  
  24.   
  25. /* 
  26.     @如何编写代码查看自己的进程到底有哪些虚拟区? 
  27.      
  28.  
  29. */  
  30.   
  31. static void mtest_dump_vma_list(void)  
  32. {  
  33.     struct mm_struct *mm = current->mm;  
  34.     struct vm_area_struct *vma;  
  35.     printk("The current process is %s/n",current->comm);  
  36.     printk("mtest_dump_vma_list/n");  
  37.     down_read(&mm->mmap_sem);  
  38.     for (vma = mm->mmap;vma; vma = vma->vm_next) {  
  39.         printk("VMA 0x%lx-0x%lx ",  
  40.        vma->vm_start, vma->vm_end);  
  41.         if (vma->vm_flags & VM_WRITE)  
  42.             printk("WRITE ");  
  43.         if (vma->vm_flags & VM_READ)  
  44.             printk("READ ");  
  45.         if (vma->vm_flags & VM_EXEC)  
  46.             printk("EXEC ");  
  47.         printk("/n");  
  48.     }  
  49.     up_read(&mm->mmap_sem);  
  50. }  
  51.   
  52.   
  53. /* 
  54.     @如果知道某个虚地址,比如,0x8049000,  
  55.     又如何找到这个地址所在VMA是哪个? 
  56.  
  57.  
  58. */  
  59.   
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值