深入理解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:控制标志寄存器
物理地址:用于内存芯片级内存单元寻址。它们与从微处理器的地址引脚发送到内存总线上的电信号相对应。
线性地址:也称虚拟地址,充当物理地址与逻辑地址的转换中介
逻辑地址: 由段和偏移量构成。包含在机器指令中用来指定一个操作数或者一条指令的地址
逻辑地址------(分段单元)---->线性地址--------(分页单元)------->物理地址
二. 硬件分段
实模式: 启动开始阶段处于实模式,其无分段机制(主要是为了与早期处理器模型相兼容)
保护模式: 有分段机制 。 可通过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:控制标志寄存器
相关文章推荐
- 深入理解Linux内核个人小结8---内存区管理
- 深入理解Linux内核个人小结12---虚拟文件系统
- 深入理解Linux内核个人小结9---进程地址空间
- 深入理解Linux内核个人小结3--进程
- 深入理解Linux内核个人小结10---系统调用
- 深入理解linux内核之(一)内存寻址
- 深入理解Linux内核之内存寻址笔记-2
- 深入理解Linux内核个人小结4---中断和异常
- 深入理解Linux内核个人小结5---内核同步
- 深入理解linux内核之内存寻址
- 深入理解Linux 内核 chp 2 内存寻址
- 深入理解Linux内核个人小结1---绪论
- 深入理解linux内核--内存寻址
- 【读书笔记::深入理解linux内核】内存寻址
- 读深入理解Linux内核 (第二章 内存寻址)
- 深入理解Linux内存寻址的分段机制
- 深入理解Linux内核之内存管理
- 深入理解计算机系统-之-内存寻址(四)--linux中分段机制的实现方式
- 深入理解计算机系统-之-内存寻址(六)--linux中的分页机制
- 读深入理解Linux内核 (第9章 进程地址空间, 第二部分 ---- 内存区域)