【笔记】深入理解Linux内核--内存寻址(一)

《深入理解Linux内核》中关于内存管理一共有三章,这是其中的一章,还有第八章,讨论内核怎样给自己分配主存,以及第九章,考虑怎样给进程分配线性地址。

  1. 内存地址 -- (P40)

以下三种地址是相对与8086处理器来说的。

    • 逻辑地址(logical address)

包含在机器语言指令中用来指定一个操作数或一条指令的地址。比如下面反汇编代码中最左边的地址即逻辑地址。

技术分享
 1   40052d:    55                       push   %rbp
 2   40052e:    48 89 e5                 mov    %rsp,%rbp
 3   400531:    48 83 ec 10              sub    $0x10,%rsp
 4   400535:    89 7d fc                 mov    %edi,-0x4(%rbp)
 5   400538:    48 89 75 f0              mov    %rsi,-0x10(%rbp)
 6   40053c:    bf d4 05 40 00           mov    $0x4005d4,%edi
 7   400541:    e8 ca fe ff ff           callq  400410 <puts@plt>
 8   400546:    b8 00 00 00 00           mov    $0x0,%eax
 9   40054b:    c9                       leaveq 
10   40054c:    c3                       retq   
11   40054d:    0f 1f 00                 nopl   (%rax)
disassemble hello.c

8086处理器采用分段结构,每一个逻辑地址都由一个段(segment)和偏移量(offset)组成;即 逻辑地址=段地址+偏移量。

    • 线性地址
    • 物理地址
  1. 硬件中的分段 -- (P41)
    • 段选择符&段寄存器
    • 段描述符
    • 快速访问段描述符
    • 分段单元
  2. Linux中的分段 -- (P46)
    • Linux GDT
    • Linux LDT
  3. 硬件中的分页 -- (P50)
    • 常规分页
    • 扩展分页
    • 硬件保护方案
    • 常规分页举例
    • 物理地址扩展(PAE)分页机制
    • 64位系统中的分页
    • 硬件高速缓存
    • 转换后援缓冲器(TLB)
  4. Linux中的分页 -- (P62)
    • 线性地址字段
    • 页表处理
    • 物理内存布局
    • 进程页表内核页表
    • 固定映射的线性地址
    • 处理高速缓存&TLB

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。