IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

Linux一些页的东西

Alibaba DBA Team 2010-06-03 13:30:06 累计浏览 1,971 次
本机暂存
在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”。

同分类推荐文章

  1. Vibe新开源项目 - Vaala AI Gateway (2026-05-17 02:10:19)
  2. SmartPerfetto 架构文章 Q&A:8 个深度技术问答 (2026-04-10 11:00:00)
  3. 让 AI 把我的 PHP 博客重写成 Go (2026-03-27 18:33:54)

查看更多 后端 文章 →

建议继续学习

  1. Linux如何统计进程的CPU利用率 (累计阅读 16,219)
  2. 我的 RHCA 之路 (累计阅读 13,935)
  3. Linux内存点滴 用户进程内存空间 (累计阅读 13,075)
  4. 给程序员新手的一些建议 (累计阅读 13,033)
  5. Linux 性能监控、测试、优化工具 (累计阅读 12,958)
  6. 关于linux内存free的一些事情 (累计阅读 12,767)
  7. ps - 按进程消耗内存多少排序 (累计阅读 12,614)
  8. Google怎么用linux (累计阅读 12,484)
  9. find命令的一点注意事项 (累计阅读 11,787)
  10. Linux Used内存到底哪里去了? (累计阅读 11,759)