Linux内存地址及内存管理

  • 内存地址
logical address
    地址的逻辑表示,为 段地址+段内偏移 的表达形式
linear address
    从0开始的连续地址空间。线性地址空间可划分成多个逻辑段。
physical address
    实际的物理内存地址。


  • 分段
    • Segment Descriptor
段地址是段描述符中的一项,完整的段描述符(Segment Descriptor)格式如下:

  • Segment Descriptor Table
segement descriptor保存在segment descriptor table中,linux中存在两种sdt:
GDT,通常全局仅有一个(每个cpu一个)。address/size存在gdtr中
LDT,每个进程可以有一个,address/size存在ldtr中
一个LDT在GDT中有一个对应的项(Local Descriptor Table Descriptor)

  • Segment Selector
段标识(segment selector)有16bit,如下:

处理器以下6个段寄存器保存segment selectors.
cs The code segment register, which points to a segment containing program
instructions
ss The stack segment register, which points to a segment containing the current
program stack
ds The data segment register, which points to a segment containing global and
static data
es  general purpose
fs  general purpose
gs  general purpose

  • 逻辑地址转化流程
取段寄存器之得到 segment selector,根据其中的ti,index从对应的descriptor table中,从gdtr/ldtr指向的table读取sement descriptor, 根据descriptor中的base获得段基准地址,加上段偏移获得线性地址。
为了加速地址转化,80X86处理器为每个段寄存器提供8字节的附加寄存器保存对应的segment descriptor。

  • linux segmentation
Linux并不使用segment进行地址分段,linux中segment的基地址都是0。
Linux不同进程就可以共享相同的user code segment, user data segment, kernel code segment, kernel data segment。其descriptor保存在GDT中。
GDT默认存在一个LDT Descriptor,此LDT是所有进程共享的。进程可以请求创建新的LDT。


  • 分页
    • page/page frame
为了有效的实现线性地址到物理地址的映射,linux使用page/page frame。page是一块连续的线性地址空间,page frame是同样大小的连续物理地址空间。
Linux为每个进程维护一个page到page frame的映射表page table。为了减小page table的大小,优化为二级结构 page directory--> page table。
每个进程需要有一个page directory, page table仅在实际需要时创建。

  • 线性地址到物理地址
cr3寄存器保存了进程Page Directory的物理地址。

  • 物理内存分部
linux kernel is loaded to 0x00100000,(second megabyte)

  • 进程页表
The linear address space of a process is divided into two parts(for 32bit processor)
• Linear addresses from 0x00000000 to 0xbfffffff can be addressed when the process runs in either User or Kernel Mode.
• Linear addresses from 0xc0000000 to 0xffffffff can be addressed only when the process runs in Kernel Mode.
每个进程的 0xc0000000以上页表内容相同


  • page frame及内存管理
 参见<understanding the linux kernel> - memory management


  • Linux页面回收与反向映射机制

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值