【问题标题】:How does ARM Linux maintain segments?ARM Linux 如何维护分段?
【发布时间】:2015-10-13 05:16:36
【问题描述】:

Linux 通过 MMU 将平面虚拟地址转换为物理地址。在Linux的虚拟地址空间中,段的种类很多:

  • 内核空间
  • 用户堆栈
  • 内存映射区域
  • 用户堆
  • Bss 段
  • 数据段
  • 文本段

Linux 如何维护这些段(又名段)?这些段的基地址和大小存储在哪里?寄存器、GDT/LDT、mm_struct 或内核中的其他数据结构?

感谢任何帮助。

【问题讨论】:

  • 重要的是要避免将 x86 段与 ELF 段混淆,这是两个完全不同的概念

标签: linux linux-kernel


【解决方案1】:

GDT/LDT 是 x86 系列功能。内核空间通过页表的内核部分翻译,用户空间通过用户空间部分翻译。页表位于主存中,mm_struct 是 Linux 内核中用于描述内存布局的结构。它是每个进程的

User stack
User heap
Bss segment
Data segment
Text segment

这个布局在 mm_struct 中描述。 mm_struct 还包含 ->pgd 字段,它是一个根页表指针(在 ARM 上加载到 ttrb0/ttrb1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-20
    • 1970-01-01
    • 2020-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多