APP下载

Linux 内存相关问题汇总(一)

消息来源:baojiabao.com 作者: 发布时间:2024-05-11

报价宝综合消息Linux 内存相关问题汇总(一)

linux 内存是后台开发人员,需要深入了解的计算机资源。合理的使用内存,有助于提升机器的效能和稳定性。本文主要介绍 linux 内存组织结构和页面布局,内存碎片产生原因和优化算法,linux 核心几种内存管理的方法,内存使用场景以及内存使用的那些坑。从内存的原理和结构,到内存的算法优化,再到使用场景,去探寻内存管理的机制和奥秘。

一、走进 linux 内存

1、内存是什么?

1)内存又称主存,是 CPU 能直接定址的储存空间,由半导体器件制成

2)内存的特点是存取速率快

2、内存的作用

1)暂时存放 cpu 的运算资料

2)硬盘等外部储存器交换的资料

3)保障 cpu 计算的稳定性和高效能

二、 linux 内存地址空间

1、linux 内存地址空间 Linux 内存管理全貌

2、内存地址——使用者态&核心态

使用者态:Ring3 运行于使用者态的程式码则要受到处理器的诸多核心态:Ring0 在处理器的储存保护中,核心态使用者态切换到核心态的 3 种方式:系统呼叫、异常、外设中断区别:每个程序都有完全属于自己的,独立的,不被干扰的内存空间;使用者态的程式就不能随意操作核心地址空间,具有一定的安全保护作用;核心态执行绪共享核心地址空间;

3、内存地址——MMU 地址转换

MMU 是一种硬件电路,它包含两个部件,一个是分段部件,一个是分页部件分段机制把一个逻辑地址转换为线性地址分页机制把一个线性地址转换为实体地址

4、内存地址——分段机制

1) 段选择符

为了方便快速检索段选择符,处理器提供了 6 个分段暂存器来快取段选择符,它们是: cs,ss,ds,es,fs 和 gs段的基地址(Base Address):线上性地址空间中段的起始地址段的界限(Limit):在虚拟地址空间中,段内可以使用的最大偏移量2) 分段实现

逻辑地址的段暂存器中的值提供段描述符,然后从段描述符中得到段基址和段界限,然后加上逻辑地址的偏移量,就得到了线性地址

5、内存地址——分页机制(32 位)

分页机制是在分段机制之后进行的,它进一步将线性地址转换为实体地址10 位页目录,10 位页表项, 12 位页偏移地址单页的大小为 4KB

6、使用者态地址空间

TEXT:程式码段可执行程式码、字串字面值、只读变数DATA:资料段,对映程式中已经初始化的全域性变数BSS 段:存放程式中未初始化的全域性变数HEAP:执行时的堆,在程式执行中使用 malloc 申请的内存区域MMAP:共享库及匿名档案的对映区域STACK:使用者程序栈7、核心态地址空间

直接对映区:线性空间中从 3G 开始最大 896M 的区间,为直接内存对映区动态内存对映区:该区域由核心函式 vmalloc 来分配永久内存对映区:该区域可访问高阶内存固定对映区:该区域和 4G 的顶端只有 4k 的隔离带,其每个地址项都服务于特定的用途,如: ACPI_BASE 等8、程序内存空间

使用者程序通常情况只能访问使用者空间的虚拟地址,不能访问核心空间虚拟地址核心空间是由核心负责对映,不会跟着程序变化;核心空间地址有自己对应的页表,使用者程序各自有不同额页表

2020-01-26 22:00:00

相关文章