Linux内核的寻址过程

Linux内核寻址的思想是内核怎样通过一个逻辑地址(虚拟地址)访问到对应的物理地址

第一阶段:逻辑地址转换为线性地址
首先熟悉几个重要概念
逻辑地址: 包含在机器语言指令中用来指定一个操作数或一条指令的地址。
逻辑地址的组成:共48位组成,1)高16位为段(段选择符),2)低32位为偏移量(指明了从段开始的地方到实际地址之间的距离)。

线性地址: 32位无符号整数,表示高达4G的地址。用十六进制表示。 范围:0x00000000-0xffffffff

物理地址:用于内存芯片级内存单元寻址。由32位或36位无符号整数表示。

内存控制单元(MMU):逻辑地址通过分段单元硬件电路转换为线性地址。线性地址通过分页单元硬件电路转换为物理地址.

硬件中的分段:
(1) 段选择符:16位:
bit 0~1 : RPL(请求特权级)
bit 2 : TI(表指示器) 0:GDT 1:LDT
bit 3~15 : 段描述符表的索引号
(2)段寄存器:
作用:为了快速方便地找到段描述符。
目的:存放段选择符(段描述符)。
种类:cs,ss,ds,es,fs,gs.
解释:cs:代码段寄存器。指向包含程序指令的段。
ss:栈段寄存器。指向包含当前程序栈的段。
ds:数据段寄存器。指向包含静态数据或全局数据。
其他3个段寄存器作一般用途,可以指向任意的数据段。
cs:0表示内核态,3表示用户态。
段描述符:
每个段有64bit的段描述符表示,前面32bit表示段的基地址base,后面的32bit表示段的大小和范围。
位置:在全局段描述符表中(GDT)或者局部段描述符表中(LDT)
GDT的大小和位置:放在gdtr控制寄存器中。

分段单元
逻辑地址转换为相应的线性地址的操作:
1:先检查段选择符的TI字段。(0:GDT;1:LDT),以决定段描述符保存在哪一个描述符表中。
如果TI为0,也就是在GDT中,分段单元从gdtr寄存器中得到GDT的线形地址。
如果TI为1,也就是在LDT中,分段单元从ldtr寄存器中得到LDT的线形地址。
2:从段选择符的索引号字段计算段描述符的地址,index字段的值*8,+gdtr/ldtr寄存器中的内容
3:2的结果(段描述符BASE字段的值)+逻辑地址的偏移量=线形地址。

注意:1、linux 中很少使用分段,它偏向是否分页
   2、主要的4个段分别为用户代码段、用户数据段、内核代码段、内核数据段
3、并且它们的Base值均为0,即所有到段的线性地址都从0开始
4、即Linux下逻辑地址的便宜量与对应的线性地址的值总是一致的
5、基于上面几点的原因,在linux中逻辑地址与线性地址的数值上总是相等的。

第二阶段线性地址转换为物理地址
页的概念:线性地址被分为固定长度为单位的组。
页框是一个存储区域,页是一个数据块。两者的长度一致(一个),每个页框包含一个页。4KB

线性地址的3个域:
1:Directory 最高10位
2:Table 中间10位
3:Offset 最低12位

两级页表 :
   两级表的第一级表称为页目录,存储在一个4K字节的页中,页目录表共有1K个表项,每个表项为4个字节,线性地址最高的10位(22-31)用来产生第一级表索引,由该索引得到的表项中的内容定位了二级表中的一个表的地址,即下级页表所在的内存块号。 第二级表称为页表,存储在一个4K字节页中,它包含了1K字节的表项,每个表项包含了一个页的物理地址。二级页表由线性地址的中间10位(12-21)位进行索引,定位页表表项,获得页的物理地址。页物理地址的高20位与线性地址的低12位形成最后的物理地址。

用户空间 :
  在Linux中,每个用户进程都可以访问4GB的线性虚拟内存空间。其中从0到3GB的虚存地址是用户空间,用户进程可以直接访问。
内核空间:
  从3GB到4GB的虚存地址为内核态空间,存放供内核访问的代码和数据,用户态进程不能访问。所有进程从3GB到4GB的虚拟空间都是一样的,linux以此方式让内核态进程共享代码段和数据段。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值