您的位置:首页 > 运维架构 > Linux

深入理解Linux内核个人小结2---内存寻址

2012-08-31 11:31 666 查看
一. 内存地址---80X86微处理器中使用的三种不同的地址:

物理地址:用于内存芯片级内存单元寻址。它们与从微处理器的地址引脚发送到内存总线上的电信号相对应。

线性地址:也称虚拟地址,充当物理地址与逻辑地址的转换中介

逻辑地址: 由段和偏移量构成。包含在机器指令中用来指定一个操作数或者一条指令的地址

逻辑地址------(分段单元)---->线性地址--------(分页单元)------->物理地址

二. 硬件分段

实模式: 启动开始阶段处于实模式,其无分段机制(主要是为了与早期处理器模型相兼容)

保护模式: 有分段机制 。 可通过CR0寄存器中的PE标志位进行观察。

段标示符(即段选择符)、段描述符(8字节)、附加的非编程的寄存器(6个,用于快速访问段描述符),GDT/LDT,段的访问流程

其中GDT是每个CPU一个副本(副本中除各自的TSS不一致外,其它内容完全一样),而LDT:用户态下很少使用。

三. Linux中的分段

分段可以为一个进程配备不同的线性地址,而分页可以把同一线性地址映射到不同的物理地址。与分段相比Linux更倾向于使用分页机制因为

<1>. 当所有进程共享相同寄存器值时(也就是它们共享同样一组线性地址时),内存管理比较简单

<2>. 因某些体系结构对分段机制支持有限,Linux为了拥有更好的移植性故而很少用分段机制。

Linux有四个段: 用户代码段、用户数据段、内核代码段、内核数据段。且所有的段都是从0X00000000开始的,即在Linux下逻辑地址与线性地址是一致的。

四. 硬件中的分页

目录,页表,偏移量 每个活动的进程都有其各自的页目录。具体分页过程不再详述。。

硬件保护方案:与段相关的权限有3种(读,写,执行),而与页/页表相关的特权级只有两个。

扩展分页机制:允许页框大小为4M而非4K。扩展分页用于将打断连续的线性地址转换成相应的物理地址,在此情况下内核可以不用中间页表进行地址转换,从而提升转换的效率。

物理地址扩展分页机制(PAE):因特尔通过把处理器管脚从32位扩展到36位,以提高处理器的寻址能力使其能够寻址64GB的空间,为此需要引入一种新的分页机制(PAE)。

缓存器

硬件高速缓存器:利用局部性原理减少处理器向主存中读取数据的时间,每个处理器都有一个单独的硬件高速缓存。

后援缓存器(TLB):用于加快线性地址与物理地址间的转换,每个处理器都有自己的TLB,当CPU的CR3寄存器被修改时本地的TLB会全部失效(因为CR3中含有页表目录基址,其改变会装入新的一组页表,而TLB指向的时旧数据)。

五. Linux中的分页

每个进程都拥有自己的页全局目录和自己的页表集。

六. 物理内存布局 (待解决。。。。。。。。。。。。。。。。。此部分没看懂)

七. 扩展知识 : 常用的寄存器与 调试寄存器

<1>常用的寄存器(X86)

32位通用寄存器(8):EAX、EBX、,ECX、EDX、EBP、ESP、ESI、EDI

16位段寄存器(6):CS、DS、ES、FS、GS、SS

32位调试寄存器(8): CR0--CR8

32位标志寄存器(1):FLAGS

32位程序计数器(1):EIP

48位的全局段描述符寄存器(1):GDTR

48位的中断描述符寄存器(1):IDTR

任务状态段寄存器(1):TR--->指向当前的任务状态段(TSS,每个CPU都拥有自己的任务状态段)

<2>. 8个32位调试寄存器(主要在于前4个)

CR0: 处理器工作方式的控制位PE(保护允许位)、是否允许分页的控制位PG(页允许标志位),还有其它的如浮点运算控制标志位等

CR1: 保留

CR2: 保存引起缺页异常的线性地址

CR3: 其高20位用来保存页目录表基址(每个进程都有自己的全局页目录和页表集),因而也成PDBR

CR4: 扩展页标志位(PSE),PAE扩展标志位(PAE)

CR5: 保留

CR6: 断点寄存器

CR7:控制标志寄存器
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: