Linux内存管理学习笔记 转
https://yq.aliyun.com/articles/11192?spm=0.0.0.0.hq1MsD
随着要维护的服务器增多,遇到的各种稀奇古怪的问题也会增多,要想彻底解决这些“小”问题往往需要更深的Linux方面的知识。越专业、分工越细的工程师,在这方面的要求也就越高。这次,对MySQL Swap的问题的探索过程,就一不小心掉进了Linux Memory Managemant(Linux MM)的研究中去了,爬了很久才出来,这里做一个系列笔记。
笔记中很多内容都是参考《Understanding the Linux Kernel, 3rd Edition》、Linux Source Code等地方,自己再做了一些总结,觉得有意义的总结这里记录一下,供参考。
Linux MM是一个比较猥琐的体系,虽然理论不太多,但是细节非常多。要从底层物理内存管理到上层虚拟内存管理整个关节打通,一方面需要较多底层架构知识、还需要很深的Linux知识。既然是学习笔记,先说一下我的学习资料:
1. Linux Memory Management David A Rusling 这本书很老了,当时的Kernel还是2.0.33版本的;这本书的优点在于抽象得很到位,把Linux_MM的基本模块、思想都通俗易懂的介绍了一遍。这也是kernel-docs.txt中推荐的读物之一;
2. 《Understanding the Linux Kernel, 3rd Edition》中的第二、八、十七章 这是基于2.6内核,非常有参考价值,介绍得非常细致,可以结合内核的源代码一起来看。
3. Linux Source Code 只看了几个自己关心的函数,没那么难:)
我不是计算机科班出身,体系结构的基础比较差,所以刚开始入门的时间相对较长,前后大概历时一个月,实际伏案时间约50小时,而这也只是一个开始
上面是一幅简图,后面会分别介绍,Kernel如何使用内存、Kernel如何管理分配内存、用户空间的内存管理。对于其中的一些细节则会单独介绍,例如大页内存,内存回收算等等。
开机的第一个过程是BIOS自检,BIOS使用0x00000000到0x10000(1MB)内存,这1MB内存包括了自检程序、自检结果、还留一部分给显示设备使用;自检完成后,开始载入Linux内核,Linux从1MB开始使用物理内存,一般5MB就足够了,在内核的符号信息中可以看到,Linux内核从_text开始,_edata处结束
ffffffff80100000 A _text
ffffffff80310399 A _etext
ffffffff80456aa8 A _edata
简图:
这里不涉及x86架构下的分页、分段细节,后面会单独介绍之。
这一篇很简单,是一个开始:)
【update 2011-03-29】
在64位系统中,Linux(2.6.18)从2MB开始使用物理内存。(32位系统,仍然是从1MB开始)
CONFIG_PHYSICAL_START=0x200000
//This gives the physical address where the kernel is loaded.
最新文章
- php 远程图片本地化
- Android开发之Toast
- 【转】Java代码规范
- centos7安装数据库
- 130 个你需要了解的 vim 命令
- 在Spring中使用脚本
- SQL触发器、事务
- 如何将jsp中<;input>;设为只读
- Twitter:蓄水池储水量问题
- HTTP 协议实现
- oracle-使用数据泵对不同用户和不同表空间的数据迁移
- Varnish 实战项目
- jar包后台启动--nohup篇
- SpringBoot(二)_项目属性配置
- sqlplus编译失效对象
- Hadoop记录-HDFS balancer配置
- [No000018E]Vim快速跳转任意行、任意列以及高亮显示当前行、当前列方法-Vim使用技巧(3)
- 如何在unity中使用龙骨动画
- Alpha冲刺第9天
- RV LayoutManager 流式布局 MD
热门文章
- 链表回文串判断&;&;链式A+B
- 【转】What&#39;s the difference between simulation and emulation
- Maven 包命令
- 【转】从零开始编写自己的C#框架(7)——需求分析
- Jquery 等待ajax返回数据loading控件ShowLoading组件
- 40 个顶级 jQuery 图片、内容滑块和幻灯片(转)
- 第三百三十天 how can I 坚持
- 第二百三十五天 how can I 坚持
- C++11多元组类别
- Qt Creator无法用“UTF-8”编码解码