摘要: 随着要维护的服务器增多,遇到的各种稀奇古怪的问题也会增多,要想彻底解决这些“小”问题往往需要更深的Linux方面的知识。越专业、分工越细的工程师,在这方面的要求也就越高。这次,对MySQL Swap的问题的探索过程,就一不小心掉进了Linux Memory Managemant(Linux MM)的研究中去了,爬了很久才出来,这里做一个系列笔记。
随着要维护的服务器增多,遇到的各种稀奇古怪的问题也会增多,要想彻底解决这些“小”问题往往需要更深的Linux方面的知识。越专业、分工越细的工程师,在这方面的要求也就越高。这次,对MySQL Swap的问题的探索过程,就一不小心掉进了Linux Memory Managemant(Linux MM)的研究中去了,爬了很久才出来,这里做一个系列笔记。
笔记中很多内容都是参考《Understanding the Linux Kernel, 3rd Edition》、Linux Source Code等地方,自己再做了一些总结,觉得有意义的总结这里记录一下,供参考。
1. 写在前面
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小时,而这也只是一个开始
2. 基本框架
上面是一幅简图,后面会分别介绍,Kernel如何使用内存、Kernel如何管理分配内存、用户空间的内存管理。对于其中的一些细节则会单独介绍,例如大页内存,内存回收算等等。
2. Linux启动与内存管理
开机的第一个过程是BIOS自检,BIOS使用0x00000000到0x10000(1MB)内存,这1MB内存包括了自检程序、自检结果、还留一部分给显示设备使用;自检完成后,开始载入Linux内核,Linux从1MB开始使用物理内存,一般5MB就足够了,在内核的符号信息中可以看到,Linux内核从_text开始,_edata处结束
$more /boot/System.map-2.6.9-55.ELsmp|grep "\ _text$\|_etext$\| _edata$\| _end$"
ffffffff80100000 A _text
ffffffff80310399 A _etext
ffffffff80456aa8 A _edata
简图:
这里不涉及x86架构下的分页、分段细节,后面会单独介绍之。
这一篇很简单,是一个开始:)
【update 2011-03-29】
在64位系统中,Linux(2.6.18)从2MB开始使用物理内存。(32位系统,仍然是从1MB开始)
file: ./arch/x86_64/defconfig
CONFIG_PHYSICAL_START=0x200000
//This gives the physical address where the kernel is loaded
分享到:
相关推荐
本篇“Linux学习笔记”详细介绍了Linux的基本目录结构及其各自的功能,这对于初学者理解Linux系统的核心概念非常重要。 #### 二、Linux目录结构解析 1. **/(根目录)** - 根目录是Linux文件系统的起点,所有的...
#### 一、嵌入式Linux设备驱动概述 嵌入式Linux设备驱动开发是嵌入式系统开发中的核心内容之一,尤其是在定制化的硬件平台上,设备驱动的编写尤为重要。设备驱动作为操作系统与硬件设备之间的桥梁,其主要作用是...
- **标题**:"Linux培训教程:从实践中学习Linux-学习笔记.pdf" 明确指出了这是一份针对Linux操作系统的培训资料,强调了通过实践来学习的重要性。 #### 描述解析 - **描述**:"Linux培训教程:从实践中学习Linux-...
### Python学习笔记知识点总结 #### 一、Python简介与特点 **Python**是一种新兴的、免费的、解释型的、可移植的、开放源代码的脚本编程语言。它不仅适用于快速开发简单脚本,也适合开发复杂的应用程序。Python...
### JAVA学习笔记知识点详解 #### 一、计算机概述 1. **计算机**:电子设备,用于处理信息。 2. **计算机硬件**: - **中央处理器(CPU)**:计算机的大脑,负责处理指令。 - **内存(RAM)**:临时存储数据,...
- 交换分区 (`swap`):当物理内存不足时,Linux会将部分不常使用的内存内容移动到此分区。 6. **网络配置**:可以通过DHCP自动获取IP地址,或者手动配置IPv4地址和子网掩码。 7. **时区设置**:文档中选择了“亚洲/...
根据提供的文件信息,我们可以推断出这是一份关于Linux编程学习笔记的PDF资料。下面将对这份资料可能涉及的关键知识点进行详细的阐述。 ### Linux编程基础知识 #### 1. Linux操作系统概述 - **定义与特点**:Linux...
4. **内存管理**:学习动态内存分配(malloc、calloc、realloc、free)以及如何避免内存泄漏。 5. **文件操作**:掌握文件的打开、读写和关闭,了解文件指针和缓冲区的概念。 6. **结构体和联合体**:学习如何定义...
### JAVA学习经典笔记知识点概述 #### 一、Java与C++的区别 1. **内存管理:** Java自动管理内存,通过垃圾回收机制自动清理不再使用的对象;而C++需要程序员手动管理内存,容易出现内存泄漏等问题。 2. **平台...
在Linux操作系统中,内存管理是其...以上是Linux内存管理的一些基础知识点,通过阅读《深入理解Linux内存管理》的学习笔记,可以进一步了解这些概念的详细工作原理和优化策略,提升对Linux内存管理的理解和实战能力。
### Linux知识学习笔记 #### 一、Linux操作系统概述 Linux是一种开源、免费的类Unix操作系统,自1991年由芬兰学生Linus Torvalds创建以来,迅速在全球范围内获得了广泛的关注和支持。它不仅具备强大的稳定性,还...
### Linux培训笔记精要 #### 一、Linux系统概述与基础命令 1. **BusyBox在小型系统中的应用**:BusyBox是一个集成了上百个最常用Linux命令和工具的软件,它体积小巧,功能强大,特别适合嵌入式设备或资源受限的...
【Linux学习笔记1】 Linux是一种开源的操作系统,它的设计哲学强调简洁和稳定性。本篇笔记将从概述、Linux的基本内容和vi/vim编辑器的快速入门三个方面展开。 1. **概述** - Linux基于Unix,被广泛应用在服务器、...
【Linux驱动开发学习笔记概述】 Linux驱动开发是操作系统与硬件之间的桥梁,允许操作系统与硬件设备进行通信,以实现对硬件的控制和数据传输。本文笔记主要针对Linux内核2.6.10及其后续版本,以Linux Device Driver...
### Linux驱动学习开发笔记 #### 一、引言与背景 在深入了解Linux设备驱动之前,有必要先了解一下背景信息。文章作者在过去的九个月里积累了丰富的ARM-Linux经验,包括完成毕业设计项目以及参与公司实习。这期间,...
### 推荐一本《Linux学习笔记》的知识点详解 #### 第一章 Linux简介及安装 **一、Linux介绍** - **Linux起源与定义**:Linux 是由芬兰大学生 Linus Torvalds 在 1991 年发起的一个开源项目。它是一种基于 Unix 的...
本学习笔记旨在为初学者提供一个全面了解和掌握嵌入式Linux的基础平台。 一、嵌入式系统概述 嵌入式系统是集成在硬件设备中,用于特定功能的计算机系统。它们通常比个人电脑更小、功耗更低,且针对性强。嵌入式...