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 |