linux内核—逻辑地址/线性地址/物理地址 转换

这篇博客介绍了Linux内核中逻辑地址、线性地址和物理地址的概念及其关系。线性地址通过三级页表转换为物理地址,而在Linux中,由于段地址为0,逻辑地址等同于线性地址。文章还探讨了不同进程中相同线性地址存储数据不同的原因,关键在于每个进程有自己的页目录,导致页表基地址不同。最后,讨论了缺页异常的情况,当页表项中的Present标志为0时,会引发异常。
摘要由CSDN通过智能技术生成

概念

1.逻辑地址

包含在机器语言指令中用来指定一个操作数或一条指令的地址。每个逻辑地址都由一个段和偏移量组成,偏移量指明了从段开始的地方到实际地址之间的距离

2.线性地址

即虚拟地址,是一个32位无符号整数,用来表示4G的地址

3.物理地址

实际内存芯片上的地址

在linux中,由于所有的段都是从0x00000000开始,所以逻辑地址和线性地址是相同的,也就是在linux中忽略逻辑地址这个概念即可

线性地址转换物理地址

linux使用三级页表转换,与二级页表转换原理相似,以下按二级页表说明
32位线性地址分为三个部分,Directory(目录)/ Table(页表)/ Offset(偏移),如下
在这里插入图片描述
每个进程都有一个分配给它的页目录,当前活动进程的页目录的物理地址存放在控制寄存器CR3中,线性地址内的Directory字段决定页目录中的目录项,而目录项指向适当的页表,table字段又决定了具体的页表中的表项,而表项中含有页所在页框的物理地址,offset字段据定页框内的相对位置。

不同进程中相同的线性地址内存储的数据为啥不同

举例,定义一个变量,然后fork一个子进程,此时,父子进程中可以打印出来这个变量的线性地址是相

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值