Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1347650
  • 博文数量: 277
  • 博客积分: 2551
  • 博客等级: 少校
  • 技术积分: 3918
  • 用 户 组: 普通用户
  • 注册时间: 2011-02-21 22:46
文章分类

全部博文(277)

文章存档

2017年(3)

2016年(9)

2015年(65)

2014年(27)

2013年(85)

2012年(61)

2011年(27)

分类: LINUX

2014-10-09 23:21:02

      linux 32 bit 的操作系统进程的地址空间是3+1模式,3G是用户地址空间,1G是内核地址空间。
内核的虚拟地址空间又分为直接映射区、动态内存映射区、永久内存区、固定内存映射区。
其中直接映射区是指16~896M的那一段,动态内存映射区也就是高端内存区。
1G的内核虚拟地址空间,好像是说linux内核地址空间只能最大访问1G的物理内存,但是高端内存区可以映射的物理内存可以是所有的物理内存。
      linux中的mmap的方式,实际上它的地址空间是需要占用虚拟地址空间的
      linux所有的物理内存都是通过系统的页表来管理的,在系统初始化的时候,就已经建立了页表
      linux 64bit的操作系统用户进程的地址空间和内核地址空间都是128T
      linux在进行用户态和内核态切换时,将进程的pgd放入CR3寄存器

过去看linux内核中有关内存子系统时,总感觉有些枯燥,不是那种看得见和摸得着的东西
但现在发现可以通过proc文件系统可以来体会内存子系统中的一些概念
proc文件系统的/proc/sys/vm下一些变量可以对应到linux内存子系统中的概念
(1)dirty_ratio、dirty_background_ratio、dirty_writeback_centisecs、dirty_expire_centisecs
   当文件系统中缓存的脏页数据量达到dirty_background_ratio时,就会触发pdflush内核线程来刷新数据到外存,这个值默认是10%
   此时这个刷新到外存并不会阻塞应用进程的写IO,一旦这个数量到达了ditry_ratio,这个刷新的过程就会阻塞应用进程的IO,这个值默认是40%,小于该值,则相应的刷新调用会立刻返回,不会阻塞。
   直到脏页低于dirty_ratio。
   dirty_writeback_centisecs和dirty_expire_centisecs控制的是这个pdflush的工作频率
   后者表示定时器的超时时间,这个主要是内核用来显式地刷新脏了很久的页的超时时间
   前者就是在超时之后,再过dirty_writeback_centisecs执行相关的刷新
(2)dirty_caches、lowmem_reserve_ratio
   由于文件系统总是将一些页、inode信息、dentry缓存起来
   dirty_caches是控制缓存清理的级别,哪些保留,哪些清理
   lowmem_reserve_ration主要控制的是预留多少的空闲内存
(3)overcommit_memory
   这个主要控制内存的申请




阅读(828) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~