zoukankan      html  css  js  c++  java
  • Linux0.11内核几种地址(逻辑地址、线性地址、物理地址)的含义

    1. 程序(进程)的虚拟地址和逻辑地址

    虚拟地址(virtual address)指程序产生的有段选择符和段内偏移两部分组成的地址。一个程序的虚拟地址空间有GDT映射的全地址空间和LDT映射的局部地址空间组成。

    逻辑地址(logical address)指程序产生的段内偏移地址。应用程序只与逻辑地址打交道,分段分页对应用程序来说是透明的。也就是说C语言中的&,汇编语言中的符号地址,C中嵌入式汇编的”m”对应的都是逻辑地址。

    1. CPU的线性地址

    线性地址(linear address)是逻辑地址到物理地址变换的中间层,是处理器可寻址空间的地址。程序代码产生的逻辑地址加上段基地址就产生了线性地址。

    1. 实际物理内存地址

    物理地址(physical address)是CPU外部地址总线上的寻址信号,是地址变换的最终结果,一个物理地址始终对应实际内存中的一个存储单元。对80386保护模式来说,如果开启分页机制,线性地址经过页变换产生物理地址。如果没有开启分页机制,线性地址直接对应物理地址。页目录表项、页表项对应都是物理地址。

    Linux 0.11的内核数据段,内核代码段基地址都是0,所以对内核来说,逻辑地址就是线性地址。又因为1个页目录表和4个页表完全映射16M物理内存,所以线性地址也就是物理地址。故对linux0.11内核来说,逻辑地址,线性地址,物理地址重合。

    ========================================================

    线性地址:是CPU所能寻址的空间或者范围。
    物理地址:是机器中实际的内存地址。换言之,是机器中的内存容量范围。
    逻辑地址:是对程序而言的。一般以Seg:Offset来表示。
    因此,若要确实比较三者的话,应有以下关系:线性地址大于等于物理地址(PS:但二者的地址空间是一样的),而逻辑地址大于线性地址。逻辑地址通过段表变换成线性地址,此时如果并未开启分页机制的情况下,逻辑地址直接转换成CPU所能寻址的空间。若已开启则通过页表完成线性地址到物理地址的变换。
    因此,三者最准确的关系是:逻辑地址通过线性地址完成物理地址的映射,线性地址在三者之中完全是充当"桥"的作用。

  • 相关阅读:
    C语言 sprintf 函数 C语言零基础入门教程
    C语言 printf 函数 C语言零基础入门教程
    C语言 文件读写 fgets 函数 C语言零基础入门教程
    C语言 文件读写 fputs 函数 C语言零基础入门教程
    C语言 fprintf 函数 C语言零基础入门教程
    C语言 文件读写 fgetc 函数 C语言零基础入门教程
    C语言 文件读写 fputc 函数 C语言零基础入门教程
    C语言 strlen 函数 C语言零基础入门教程
    Brad Abrams关于Naming Conventions的演讲中涉及到的生词集解
    适配器模式
  • 原文地址:https://www.cnblogs.com/hehehaha/p/6332877.html
Copyright © 2011-2022 走看看