do_set_pmd

统计参数只会在这里设置:

add_mm_counter(vma->vm_mm, MM_FILEPAGES, HPAGE_PMD_NR);

但是这貌似都是处理大页的情况哪,小页呢?

alloc_set_pte中有函数:inc_mm_couter_fast(vma->vm_mm, mm_couter_file(page))

其中,mm_counter_file是在include 目录下设置的,注意一下,这个函数返回的是页的类型,有两种类型,一种是:

1446 static inline int mm_counter_file(struct page *page)
1447 {
1448 if (PageSwapBacked(page)) //如果这个页是被swap出去了,那么这个页就是MM_SHMEMPAGES,
1449 return MM_SHMEMPAGES;
1450 return MM_FILEPAGES;
1451 }
1452

SHMEMPAGES 感觉和ANON/FILE是两种不同的考察维度呀,也就是说匿名页和filebacked的页都是可以当做SHMEM来用的。好像不对啊,匿名页就是匿名页,如果是可以共享的,也就是说MAP_ANONYMOUS  和 MAP_SHARED 是可以同时设置的?【结论MAP_ANONYMOUS和MAP_SHARED是不可以同时设置的】,

PRIVATE 和 SHARED 都是对于文件来说的,是说多个

[什么叫做共享内存的页呀: 下面这个patch中加了这个统计项,patch大致思想是:目前共享内存的页,都和file-backed的文件一起去统计了(实际共享内存后面挂载的设备是/dev/zero,我们没办法看到共享内存的页了,所以这个patch就是解决的就是区分这两种页]

eca56ff906bdd0239485e8b47154a6e73dd9a2f3

那么下面一个问题还是没有解决,为什么mm_counter_file中统计出来的page只会去统计MM_SHMEM / MM_FILE

除了匿名页之外,有两种页:共享内存的页还有文件backed的页

MAP_ANONYMOUS 是不能单独出现的

SHMEMPAGES既可以当做

这一部分好好讲讲文件系统的mmap file-backed

[ 一个进程所有的页的类型包括:匿名页,文件backed的页,共享内存的页,swap出去的页.]

私有的文件映射如果改动的话会发生啥事情

《Linux环境编程》对该部分的解释有亮点,但是避重就轻,过多地去讲在MAP_SHARED的情况下,内存映射是如何完成的,比较难理解的是私有映射是如何完成的:

如果我设置了私有的映射,并且还具有写权限,这个时候如果发生了写,操作系统是如何实现的呢?这种情况也分明是存在的!

猜想:这个时候会发生写时写时复制机制,不会影响到文件的内容:【测试程序:

https://github.com/honpey/codebox/blob/master/mmap/mmap_file_private.c

设置了文件的MAP_PRIVATE 标志之后,我们发现,此时写入的任何东西都不会保存,所以我们就大胆猜想,初始化时,是做了一个映射,但是第一次访问之后,发生了缺页中断,而这个缺页中断的作用是从pagecache中copy一份数据到新的page中,即所谓的写时复制!这是file-backed mmap类型的写时复制。

这个

file mmap的更多相关文章

  1. linux删除文件后没有释放空间

    转载 http://blog.csdn.net/wyzxg/article/details/4971843 今天发现一台服务器的home空间满了,于是要清空无用的文件,当我删除文件后,发现可用空间没有 ...

  2. Linux删除文件后空间没有释放

    .COMMAND默认以9个字符长度显示的命令名称.可使用+c参数指定显示的宽度,若+c后跟的参数为零,则显示命令的全名.PID:进程的ID号.PPID父进程的IP号,默认不显示,当使用-R参数可打开. ...

  3. 实用lsof常用命令行

    1, 使用 lsof 命令行列出所有打开的文件 # lsof 这可是一个很长的列表,包括打开的文件和网络 上述屏幕截图中包含很多列,例如 PID.user.FD 和 TYPE 等等. FD - Fil ...

  4. xlrd doc

    The xlrd Module A Python module for extracting data from MS Excel ™ spreadsheet files. Version 0.7.3 ...

  5. 解决linux删除文件后空间没有释放问题

    linux删除文件后沒有释放空间 今天发现一台服务器的home空间满了,于是要清空没用的文件,当我删除文件后,发现可用空间沒有变化 os:centos4.7 现象: 发现当前磁盘空间使用情况: [ro ...

  6. lsof 命令用法详解

    lsof 命令用法详解 作用 用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP.UDP).找回/恢复删除的文件.是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所 ...

  7. 使用 ps、strace、lsof 进行 Linux 进程 trouble-shooting

      linux_observability_tools 介绍 在Linux 下进行进程的排错,有很多方法.比如,修改源代码,print出一些关键的信息,如果代码是Python 的话,可以使用trace ...

  8. Buildroot lmbench使用方法

    /********************************************************************** * Buildroot lmbench使用方法 * 说明 ...

  9. lsof根据端口返回进程号杀死进程的方法

    参考自:http://newmiracle.cn/?p=661 Linux shell根据端口返回进程号杀死进程的方法 kill -9 `lsof -t -i:8888` 这个就是杀死8888端口的进 ...

随机推荐

  1. ARC下需要注意的内存问题

    之前发了一篇关于图片加载优化的文章,还是引起很多人关注的,不过也有好多人反馈看不太懂,这次谈谈iOS中ARC的一些使用注意事项,相信做iOS开发的不会对ARC陌生啦.这里不是谈ARC的使用,只是介绍下 ...

  2. Maven - 依赖范围<scope></scope>

    6种:

  3. Centos 7 下安装mysql

    // 卸载原有maridb-lib库 [root@localhost ~]# rpm -qa | grep mariadb mariadb-libs-5.5.41-2.el7_0.x86_64 [ro ...

  4. Linux下常用压缩 解压命令与压缩比率对比

    常用的格式有:tar, tar.gz(tgz), tar.bz2, 不同方式,压缩和解压方式所耗CPU时间和压缩比率也差异也比较大. 1. tar只是打包动作,相当于归档处理,不做压缩:解压也一样,只 ...

  5. TCL之表达式

  6. PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现

    PHP 使用GD库合成带二维码和圆形头像的海报步骤以及源码实现 之前记录过一篇文章,不过那只是简单将二维码合成到海报中去,这次还要合成头像,而且是圆形.所需要素材就不一一列举,直接代码吧 1.先获取用 ...

  7. auto用法

    在C++11中,如果编译器在定义一个变量的时候可以推断出变量的类型,不用写变量的类型,你只需写auto即可. 第一种用法:自动推到内置类型 int x = 100; //C++ 11 auto x = ...

  8. [Noip2016]组合数(数论)

    题目描述 组合数表示的是从n个物品中选出m个物品的方案数.举个例子,从(1,2,3) 三个物品中选择两个物品可以有(1,2),(1,3),(2,3)这三种选择方法.根据组合数的定 义,我们可以给出计算 ...

  9. 第三章:Web表单

    感谢作者 –> 原文链接 本文翻译自 The Flask Mega-Tutorial Part III: Web Forms 这是Flask Mega-Tutorial系列的第三部分,我将告诉你 ...

  10. SpringMVC---springMVC配置文件(springweb.xml)简介

    再web.xml中设置HTTP请求的中央调度处理器DispatcherServlet时,会指定SpringMVC配置文件,这里取名springweb.xml是因设置DispatcherServlet时 ...