Linux一些页的东西

作者:vogts | 分类: 大话技术 | 标签: | 日期:2010-05-06

在Linux世界里,分为Page cache,Buffer cache两个层面。其中page cache包含了buffer cache,内存只和page cache交互。

标准的LINUX总 是假定处理器有三级页表,分别为页目录表(PGD),中间页目录表(PMD)和页表(PTE)。如果程序在进行物理地址转换的时候,中是通过页目录表来索 引中间页目录表,再通过中间页目录表来索引页表,从而查找到某页与内存BLOCK块的对应关系。我把书上的图,拍下来了,哈:

我们平时只说,page in,page out。file,page cahe,buffer cache,block的关系如下图:

我们主要讨论下 linux的页的生命:

在讨论page之前,必须要提及 LINUX的几个关键进程:  kscand, kswapd, kupdated, bdflush. 他们负责LINUX的内存管理。
一般内存的一页,生命周期如下图:
free –  在系统启动以后,初始化状态均为FREE。
active -- 当前被OS使用或者用户进程所使用的状态,均为active。
inactive dirty(脏数据) -- 当数据被修改过以后,kscand进程会周期性的对内存中的数据进行扫描。如果最近被访问过了,计数器就会加1,否则被减1。如果kscand发现计数器 是0的时候,就会把该页,放到非队列(inactive laundry)里去了。
inactive laundry(非活动队列) -- 当被放到inactive laundry里的时候,OS才真正的进行I/O操作,写入磁盘。
inactive clean -- 意味着数据已经被sync到了本地磁盘,该页也已经标示为free。
另:
如果想自己强行把脏数据,写到磁盘 上,就使用“sync”命令。
个人总结:
今天看了一个晚上这方面的书和文档,感觉LINUX的机制和ORACLE大同小异啊。其实这个世界什么东西,都大同小异啊,关键 是你要想明白,计算机世界永远离不开if,else,for;就如同汽车世界永远离不开发动机,地盘,等等。LINUX本身也有LRU,只是有的地方叫 “Buddy Allocator”。

8人发表了评论  ↓发表评论↓
  • 好。
    竟也是半夜活动型

    ahlongxp @ May 7, 2010 |

  • 学习了~

    男婚女嫁 @ May 7, 2010 |

  • 实际上,Linux里面有两部分来管理物理内存: buddy system 和 slab allocator。 后者建立在前者之上。前者可以管理2的幂次方的物理页面。

    至于管理进程地址空间的又是另外一回事情了。。

    dongliqian @ May 7, 2010 |

  • slab allocator是用来做内核内存管理的,思想类似于现在流行的Object Cache..主要存储inode 缓存以及directory 的缓存信息.

    jametong @ May 7, 2010 |

  • 实际上,我觉得这应该是一篇个人的学习文章,而作为Alibaba DBA Team的文章发似乎稍显单薄。

    Kamus @ May 8, 2010 |

  • (─.─||)
    本来想了解page cahe,buffer cache
    结果一看到页表就去翻虚拟内存的概念。
    却发现除了页表没看到相关概念。
    搜索一番才发现,原来是文件系统方面的知识
    (⊙ˍ⊙)

    晓梦 @ May 9, 2010 |

  • to kamus:
    我们对这个博客的定位,只是用于记录团队的点点滴滴,就像title上写的一样,不一定非得高精尖的文章才能发表,呵呵

    八神 @ May 16, 2010 |

  • 每次来看看,都会有收获

    问下楼主:

    今天看了一个晚上这方面的书和文档

    这里提到的书和文档是哪些,可否给个书名或链接
    谢谢!

    fuyou001 @ August 27, 2010 |

表情:<( ̄︶ ̄)> | (⊙ˍ⊙) | >﹏< | b( ̄▽ ̄)d | (─.─||) | (^_-)

[ Ctrl+Enter提交 ]

阿里巴巴DBA出品