linux内核内存映射实验报告,Linux内核学习笔记 -21 动手实践linux内存映射基础 - 下(用户测试进程,及测试进程的演示)...

下面为用户程序代码,一个是读程序,一个是写程序 。

读程序中,将展示进程在用户态直接读取到我们在内核态写入内存的数据。而在写程序中,我们将展示进程在用户态直接向内核申请的内存区写入数据。

下面是读程序代码,读程序中,首先要做的是打开设备文件,open()

紧接着调用mmap系统调用,这是用户态的mmap函数,它第一个参数是映射区的地址,第二位是映射区的长度(LEN),接下啦是port的一个标志位,表示期望的内存保护标志,PROT_READ表示页内容可以被读取;紧接着是flags标志位(MAP_PRIVATE | MAP_LOCKED),它可以是多个标志位的组合,用来指定映射对象的类型,MAP_PRIVATE表示建立的是一个写入时拷贝的私有映射区,MAP_LOCKED表示的是锁定映射区的页面,从而防止页表被交换出内存。

fd就是刚刚打开的文件描述符

最后一位offset位表示被映射的对象从哪里开始,表示从该文件中的哪一个文件偏移量开始。这里我们从0开始

这里的循环loop++,我们可以看到,我们读取了映射区中2页的数据,并将它打印了出来

最后是一个死循环让进程执行完先暂时不要退出

ab980a58d3171ce69e752737959c3e10.png

接着看写入程序

写入程序中,我们可以看到与读取程序类似的代码。

区别仅在于写程序中,mmap标志位是MAP_SHARED,而都程序中用的是MAP_PRIVATE

MAP_SHARED就表示该映射区可以和其它所有映射这个对象的进程共享空间,因为我们要写入,如果我们还用的是私有的映射区,我们写入的数据将只能被写入的进程看到,其它映射该内存区的进

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值