线性逻辑是什么意思,线性逻辑思维是什么意思

首页 > 经验 > 作者:YD1662024-01-01 23:17:10

在阅读操作系统相关书籍内存管理部分的时候,经常会看到这三个名词:逻辑地址、线性地址、物理地址,一般人都会有疑问,都是内存地址,搞出这么多名堂来,到底有什么区别,什么时候该用哪个?本文尝试解释这三个概念及不同点。

先说一下前提,本文以intel的x86体系结构,以linux操作系统的实现为例,来说明这三个地址的概念和区别 。

逻辑地址:是从intel提供的机制上来定义的,按照intel的实现,现在x86体系的CPU都工作在保护模式下,保护模式下对内存使用分段管理机制,使用分段机制来寻址。按照定义,逻辑地址=段描述符:段内偏移,这就是逻辑地址的含义。

线性地址:又称虚拟地址,从逻辑地址的段描述符查表得出段的起始地址,再加上段内的偏移地址,就得到了线性地址。

物理地址:从线性地址查页表,得到实际寻址物理内存硬件的地址。

总结一下三个地址的关系,从总体上来说是这样的:

逻辑地址 --> 线性地址 --> 物理地址,中间牵扯到的两个转换部件是由物理硬件实现的,分别是分段单元和分页单元。

上两张图看得更清楚一些:

线性逻辑是什么意思,线性逻辑思维是什么意思(1)

线性逻辑是什么意思,线性逻辑思维是什么意思(2)

上面这个内存管理和地址映射的机制是intel的设想,使用分段机制隔离不同进程的代码段和数据段,再使用分页机制实现进程地址到物理内存的映射。

但是,linux并没有严格按照intel的设想这样使用,linux为了通用性在x86体系下,给所有的进程使用一样的段,所有的linux进程都使用相同的代码段和数据段,偏移范围都相同,根据上面的算法,线性地址等于逻辑地址的段起始地址 段内偏移,同样的段,同样的偏移范围,相当于所有的进程都使用相同的线性空间。

这段话的意思相当于是说linux把intel的分段机制给糊弄过去了,在linux的实现下,逻辑地址的段描述符中描述的起始地址是0,偏移范围是整个地址空间,所以线性地址就等于逻辑地址的偏移地址,所有的进程都一样。

线性地址到物理机制的映射,linux正常使用intel提供的分页机制来实现,系统在初始化时,将所有的物理地址按照固定大小,常见的是4KB为一个页,组织成一个物理页链表,表示系统中可用的内存资源。在进程要使用内存的时候,由内核将某一块线性地址映射到具体的某一页物理内存,将映射关系写在页表中,在实际访问时由分页单元进行转换。

栏目热文

文档排行

本站推荐

Copyright © 2018 - 2021 www.yd166.com., All Rights Reserved.