代码改变世界

kernel简介

2014-10-17 16:33  郭志通  阅读(585)  评论(0编辑  收藏  举报

内存管理

一般来看有三种类型的地址:物理地址线性地址逻辑地址,逻辑地址的精髓在于将地址分成两部分:段基地址+偏移,翻译的过程如下:

线性地址的精髓在于将所有的内存按照一定的大小分成了一页一页,对多有的程序和用户都一样,翻译的过程如下:

在程序访问时地址处理的过程为:逻辑地址->线性地址->物理地址,但是Kernel基本上把分段机制给绕开了,主要是使用分页机制,地址处理的流程由MMU内存管理单元)来做,我们建好对应的数据即可。

下面来看内存管理部分,这里只是画个大概(bootmem比较简单而且后期并不使用)就不画了,其他部分如下:

在这里有伙伴系统(分成不同大小关系)、SLUB(小内存)、VMALLOC(连续内存)和高端内存(内存比较大的时候直接映射不能完全处理),另外从上图的虚拟地址部分可以看出如何使每个进程有自己的虚拟地址空间,这里没有缺页异常(不知道该怎么画上去,而且感觉应该单独搞一篇来好好写)。

下面来看几种常见的查看内存状态的方法:

  1. free -s 5
  2. cat /proc/meminfo
  3. cat /proc/pid/maps:进程的虚拟地址的信息
  4. cat /proc/pid/statm:进程占用的内存
  5. top:通过f打开菜单选择更多内容
  6. ps
  7. sar -B\-r\-R

文件系统

 

 

 

 

 

参考及资料