深入理解Linux内核-内存寻址

本文详细探讨了Linux内核的内存寻址,涵盖了硬件中的分段和分页机制。从逻辑地址、线性地址到物理地址的转换,通过段选择符、段寄存器、段描述符和分段单元的介绍,揭示了段机制的工作原理。同时,文章还讲解了Linux如何利用GDT和LDT管理分段,以及硬件层面的分页细节,包括常规分页、扩展分页、硬件高速缓存和转换后援缓冲器TLB。最后,讨论了Linux内核如何在实际操作中运用这些概念进行内存管理。
摘要由CSDN通过智能技术生成

如今的微处理器包括的硬件线路使内存管理即高效又健壮,所以编程错误就不会对该程序之外的内存产生非法访问。

内存地址

内存地址分三类:

  1. 逻辑地址:我们程序员在程序里面使用到的地址就是逻辑地址。
  2. 线性地址:也称作虚拟地址,是逻辑地址通过分段单元后得到的地址。
  3. 物理地址:由线性地址通过分页单元后得到的地址,真正的物理地址了。

硬件中的分段

段选择符和段寄存器

一个逻辑地址由两部分组成:段标识符+段内偏移量。段标识符是一个16位长的字段,称为段选择符。段内偏移量是一个32位的字段。

为了快速方便的找到段选择符,处理器提供段寄存器:cs、ss、ds、es、fs和gs,其中前三个有专门的用途:

  1. cs:代码段寄存器
  2. ss:栈段寄存器
  3. ds:数据段寄存器

其中cs寄存器还有一个特殊用途:它包含了一个两位的字段,用来指出当前cpu的特权级,0为内核态,3为用户态。

段描述符

每一个段描述符有一个8字节的段描述符表示,他描述了段的特征。段描述符放在全局描述符表GDT或局部描述符表LDT中。

通常只定义一个GDT,每个进程除了存放在GDT中的段之外如果还需要定义段就存放在自己的LDT中。GDT的地址和大小存放在gdtr寄存器中,当前正在被使用的LDT存放在ldtr寄存器中。

快速访问段描述符

这里使用了一种附加的非编程的寄存器,当作快表使用&#x

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值