MST

星途 面试题库

面试题:C++中逻辑地址如何转换为线性地址

在C++编程环境下,简单阐述逻辑地址转换为线性地址的过程,以及涉及到的主要机制。
40.4万 热度难度
编程语言C++

知识考点

AI 面试

面试题答案

一键面试

逻辑地址转换为线性地址的过程及主要机制

  1. 过程

    • 在C++编程环境处于x86架构下(常见情况),逻辑地址由段选择子和偏移量组成。
    • 首先,根据段选择子从段描述符表(GDT或LDT)中找到对应的段描述符。段描述符包含了段的基地址、界限、访问权限等信息。
    • 然后,将段描述符中的基地址与逻辑地址中的偏移量相加,就得到了线性地址。
  2. 主要机制

    • 段机制
      • 段描述符表:全局描述符表(GDT)存储系统中所有段的描述符,一个系统只有一个GDT。局部描述符表(LDT)每个进程可以有自己的LDT,用于存放进程私有的段描述符。通过段选择子在这些表中索引到对应的段描述符。
      • 段描述符:描述段的各种属性,如段基地址确定段在内存中的起始位置,段界限规定段的长度等。
    • 特权级检查:在进行地址转换时,会检查当前代码的特权级(CPL,Current Privilege Level)与段描述符中的特权级(DPL,Descriptor Privilege Level)。例如,从低特权级到高特权级的访问需要满足一定条件,如通过门描述符等机制,这保证了系统的安全性和稳定性。