Linux的内存管理机制

简介:

内存管理的一些基本概念:

地址


1)逻辑地址:指由程序产生的与段相关的偏移地址部分。在C语言指针中,读取指针变量本身值(&操作),实际上这个值就是逻辑地址,它是相对于你当前进程数据段的地址。

2)线性地址:段中的偏移地址(逻辑地址),加上相应段的基地址就生成了一个线性地址。

3)物理地址:放在寻址总线上的地址。

4)虚拟地址:保护模式下段和段内偏移量组成的地址,而逻辑地址就是代码段内偏移量,或称进程的逻辑地址。



内存管理主要解决以下问题:


  1. 进程的地址空间隔离;

  2. 提高内存的使用效率;

  3. 程序运行时重定位问题;


现在的内存管理方法就是在程序和物理内存之间引入了虚拟内存这个概念。虚拟内存位于程序和物理内存之间,程序只能看到虚拟内存,再也不能直接访问物理内存。每个进程都有自己的进程地址空间,这样就做到了进程隔离。


既然有了虚拟内存,解决从虚拟地址映射到物理地址,主要使用分段和分页两种该技术。


  1. 分段(逻辑地址转化为线性地址):将程序所需要的内存地址空间大小的虚拟空间映射到物理地址空间,虚拟空间中的每个字节对应于实际空间中的每个字节。这个映射过程由软件来设置映射的机制,实际转换由硬件来完成。而分段机制解决了上述1和3的问题。

  2. 分页(将线性地址转换为物理地址):分页是把内存地址空间分为若干个很小的固定大小的页,每一页大小由内存决定,一般页大小为4KB。




分段和分页的区别:


  1. 页是信息的物理单位,分页是为了实现离散分配方式,以减少内存的外零头,提高内存利用率或者可以说分页仅仅是由系统管理的需要,而不是用户管理的需要。段是信息的逻辑单位,它含有一组其意义相对完整的信息。分段的目的是为了更好地满足用户的需要;

  2. 页的大小固定且由系统决定,把逻辑地址划分为页号和页内地址两部分,由硬件实现。段的长度不固定,且决定于用户所编写的程序,通常由编译系统在对源程序进行编译时根据信息的性质来划分。

  3. 页式系统地址空间时一维的,即单一的线性地址空间,程序员只需要利用一个标识符,即可表示一个地址。分段的作业地址空间是二维的,程序员在标示一个地址时,既需给出段名,又需要给出段内地址。


下面是一个进程调用内存的大致过程:


  1. 首先APP1通过fork,execute,nmap等函数创建进程;

  2. malloc或brk等函数在虚拟内存上动态分配一段空间为APP1使用;

  3. 划分虚拟内存之后,此时并没有分配实际的物理内存。(延迟分配)

  4. 当程序真正使用这块内存,才会产生请页机制发生请页请求;

  5. 物理内存会建立对应的页表;

wKiom1WdJN2zN-uQAAJuN8RA0u8371.jpg





参考资料:

Linux内存管理基本概念:

http://dongxicheng.org/os/linux-memory-management-basic/ 

linux内存管理:

http://www.cnblogs.com/autum/archive/2012/10/12/linuxmalloc.html

Linux中的内存管理:

http://blog.chinaunix.net/uid-26611383-id-3761754.html 










本文转自 安安安安森  51CTO博客,原文链接:http://blog.51cto.com/smallc/1672180,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
缓存 Linux 开发者
Linux内核中的并发控制机制
本文深入探讨了Linux操作系统中用于管理多线程和进程的并发控制的关键技术,包括原子操作、锁机制、自旋锁、互斥量以及信号量。通过详细分析这些技术的原理和应用,旨在为读者提供一个关于如何有效利用Linux内核提供的并发控制工具以优化系统性能和稳定性的综合视角。
|
1月前
|
监控 Linux
如何检查 Linux 内存使用量是否耗尽?这 5 个命令堪称绝了!
本文介绍了在Linux系统中检查内存使用情况的5个常用命令:`free`、`top`、`vmstat`、`pidstat` 和 `/proc/meminfo` 文件,帮助用户准确监控内存状态,确保系统稳定运行。
260 6
|
1月前
|
缓存 Java Linux
如何解决 Linux 系统中内存使用量耗尽的问题?
如何解决 Linux 系统中内存使用量耗尽的问题?
119 48
|
8天前
|
存储 编译器 Linux
动态链接的魔法:Linux下动态链接库机制探讨
本文将深入探讨Linux系统中的动态链接库机制,这其中包括但不限于全局符号介入、延迟绑定以及地址无关代码等内容。
|
15天前
|
算法 Linux
深入探索Linux内核的内存管理机制
本文旨在为读者提供对Linux操作系统内核中内存管理机制的深入理解。通过探讨Linux内核如何高效地分配、回收和优化内存资源,我们揭示了这一复杂系统背后的原理及其对系统性能的影响。不同于常规的摘要,本文将直接进入主题,不包含背景信息或研究目的等标准部分,而是专注于技术细节和实际操作。
|
16天前
|
监控 算法 Linux
Linux内核锁机制深度剖析与实践优化####
本文作为一篇技术性文章,深入探讨了Linux操作系统内核中锁机制的工作原理、类型及其在并发控制中的应用,旨在为开发者提供关于如何有效利用这些工具来提升系统性能和稳定性的见解。不同于常规摘要的概述性质,本文将直接通过具体案例分析,展示在不同场景下选择合适的锁策略对于解决竞争条件、死锁问题的重要性,以及如何根据实际需求调整锁的粒度以达到最佳效果,为读者呈现一份实用性强的实践指南。 ####
|
20天前
|
消息中间件 安全 Linux
深入探索Linux操作系统的内核机制
本文旨在为读者提供一个关于Linux操作系统内核机制的全面解析。通过探讨Linux内核的设计哲学、核心组件、以及其如何高效地管理硬件资源和系统操作,本文揭示了Linux之所以成为众多开发者和组织首选操作系统的原因。不同于常规摘要,此处我们不涉及具体代码或技术细节,而是从宏观的角度审视Linux内核的架构和功能,为对Linux感兴趣的读者提供一个高层次的理解框架。
|
27天前
|
算法 Linux 开发者
Linux内核中的锁机制:保障并发控制的艺术####
本文深入探讨了Linux操作系统内核中实现的多种锁机制,包括自旋锁、互斥锁、读写锁等,旨在揭示这些同步原语如何高效地解决资源竞争问题,保证系统的稳定性和性能。通过分析不同锁机制的工作原理及应用场景,本文为开发者提供了在高并发环境下进行有效并发控制的实用指南。 ####
|
27天前
|
缓存 Ubuntu Linux
Linux环境下测试服务器的DDR5内存性能
通过使用 `memtester`和 `sysbench`等工具,可以有效地测试Linux环境下服务器的DDR5内存性能。这些工具不仅可以评估内存的读写速度,还可以检测内存中的潜在问题,帮助确保系统的稳定性和性能。通过合理配置和使用这些工具,系统管理员可以深入了解服务器内存的性能状况,为系统优化提供数据支持。
34 4
|
1月前
|
Linux
如何在 Linux 系统中查看进程占用的内存?
如何在 Linux 系统中查看进程占用的内存?
下一篇
DataWorks