嵌入式Linux-内存管理基础
来源:互联网 发布:ubuntu vi命令 编辑:程序博客网 时间:2024/05/26 07:29
嵌入式Linux-内存管理基础
一,内存管理简介
内存管理(Memory Manager)是时Linux内核中的一个非常重要的模块,学习Linux内核必须要了解内存。
下面是一张内存管理的经典模型图,它详细的介绍了内存管理的2个主要职能:
1.地址映射
2.内存分配
二,地址类型
1.物理地址
出现在CPU地址总线上的寻址物理内存的地址信号,是地址变换的最终结果。
2.逻辑地址
代码经过编译后,在汇编代码中出现的汇编地址。
3.虚拟地址
32bit Linux下有4G的虚拟地址空间,在Linux程序中使用的都是虚拟地址。
虚拟地址空间图:
4.线性地址
线性地址 = 虚拟地址
注意:因为Linux中所有段的基地址都为0, 在Linux中线性地址与逻辑地址相同。
因此在Linux中:逻辑地址 = 线性地址 = 虚拟地址。
三,地址转换
在Linux地址转换的基本模式是:
逻辑地址 -> 段式管理单元转换 -> 线性地址(虚拟地址) -> 页式管理单元转换 -> 物理地址
可以看出转换的结果是将:逻辑地址转换为物理地址。
这个转化模式中我们已经了解了3个地址类型,下面介绍两种管理单元。
1.段式管理单元
段式管理单元是x86中的一个典型实现,是为了兼容8086那些CPU的设计,沿用到至今,这里只是介绍一些基本内容,如果你想更进一步的了解,我建议你去学习学习王爽老师<汇编语言>,非常好的一部书,通俗易懂。
因为8086是16Bit,而现在的CPU大多是32Bit,所以段式管理也要分16/32Bit来介绍了。
对于16Bit的CPU:逻辑地址 = 段地址 * 16 + 偏移地址
对于32Bit的CPU:现在的x86 CPU有两个模式,实模式和保护模式。
实模式:就是一个虚拟的8086,所以它的分段机制与16Bit的相同,它的段地址 = 段寄存器 * 16
保护模式:我们在x86的CPU是运行OS时,多数情况下是运行在保护模式下的。它的分段机制就有很大的不同了,它的段寄存器里存储的是段选择符,用该选择符作为内存地址,该内存地址对应的就是32Bit的段地址。
如图:
2.分页管理单元
页:线性地址被分为固定长度的组,称为页,4KB或者8KB,一般都是4KB。
物理页(页框,页帧):实际的物理内存页,4KB。
如图:分页管理单元将线性地址映射到物理地址
下面是一个2级(页目录,页表)分页管理单元的地址转换模型图:
分页管理有下面一些特征:
1.页目录地址放在CPU的cr3寄存器中。
2.每一个进程,都有其独立的虚拟地址空间,运行一个进程,首先需要将它的页目录地址放到cr3寄存器中,将其他进程的cr3寄存器的值保存下来。
3.每一个32位的线性地址被划分为三个部分:
页目录索引:[31, 22]Directory,10位
页表:[21, 12]Table,10位
偏移: [11, 0]Offset,12位
这是具体的转换步骤:
1,装入进程页目录地址,操作系统在调度进程时,把这个地址装入CR3。
2.根据线性地址前十位,在页目录中,找到对应的索引项,页目录中的项是一个页表的基地址。
3.根据线性地址的中间十位,在页表中找到页的起始地址。
4.将页的起始地址与线性地址的最后12位偏移相加,得到物理地址。
四,总结
本次介绍内存管理相关的内容,这些基础知识对于学习内核来说非常重要,希望能帮助大家。
思维导图:
资料链接:链接:http://pan.baidu.com/s/1geAoCfh 密码:yx04
- 嵌入式Linux-内存管理基础
- 嵌入式linux内存管理
- 嵌入式Linux-Linux内存管理
- Linux嵌入式 -- 内核 - 内存管理
- 嵌入式Linux-进程管理基础
- Linux内存管理基础
- linux 内存管理基础
- 嵌入式Linux--内存管理单元MMU
- 嵌入式系统内存管理
- 嵌入式系统内存管理
- 嵌入式系统内存管理
- 嵌入式内存管理
- 嵌入式linux学习笔记 – 内存管理单元mmu
- Linux嵌入式系统的内存管理方法详细介绍
- 嵌入式 linux 第四课 内存管理单元MMU
- 嵌入式Linux内存管理的一些知识点总结
- linux 内存管理之基础篇
- 深入浅出Linux内核内存管理基础
- leetcode--100. Same Tree
- 1039. 到底买不买(20)
- POJ1267 Cash machine 多重背包
- codevs4373&洛谷1866 滑动窗口
- 实现shell四则运算
- 嵌入式Linux-内存管理基础
- NYOJ77 - 开灯问题
- android面试笔试题详解
- 1021. Deepest Root (25)
- Qt for Windows:Qt 5.8.0 MinGW 静态编译版本(包含OpenSSL)
- SPOJ - PUTNIK(想法+dp,好题)
- NYOJ100 - 1的个数
- 三星事件调查结果新鲜奉上 全球多家媒体共同出席发布会
- 斐波那契数列 Java实现