【问题标题】:Segments in RAM memory [closed]RAM内存中的段[关闭]
【发布时间】:2013-11-21 13:09:37
【问题描述】:

我对RAM内存中的段感到困惑,请澄清以下疑问

  1. RAM 已被划分为用户空间和内核空间;这种内存划分是由 O/S 完成还是由 H/W(CPU) 完成。

  2. 内核空间的内容是什么;据我了解,只有内核映像,如果我错了,请纠正我。

  3. 这段代码、数据、栈和堆段在哪里?

    a) 用户和内核空间是否有单独的代码、数据、堆栈和堆段?

    b) 这个段是由 H/W 还是 (O/S) 创建的。

  4. 我能找到内核空间和用户空间占用的内存量吗?

    a) 是否有任何 Linux 命令(或)系统调用可以找到它?

  5. 为什么RAM被划分为用户空间和内核空间?

    a) 我认为这样做是为了保护内核免受应用程序的影响,是这样吗?这是唯一的原因。

我是初学者,所以请向我推荐一些好书、链接以及处理这些概念的方法。

【问题讨论】:

  • 您的大多数问题都过于宽泛,需要复杂冗长的答案。我怀疑你会被关闭。做更多的阅读/谷歌搜索。
  • 尝试一次问一个问题。我无法选择我应该在这里回答哪个问题。

标签: c linux linux-kernel x86


【解决方案1】:

我接受了挑战并尝试了相当简短的答案:

  1. 执行发生在用户和内核空间。 BIOS 和 CPU 支持操作系统检测和分离资源/地址范围,例如主内存和设备 (-> related question) 以建立保护模式。在保护模式下,内存通过虚拟地址空间进行分隔,虚拟地址空间通过MMU (Memory Management Unit)逐页映射(通常为 4096 字节的块)到物理内存的真实地址。

    从用户空间,不能直接访问内存(在实模式下),必须通过 MMU 访问它,它就像一个具有访问保护的透明代理。访问错误称为 segmentation fault, access violation, segmentation violation (SIGSEGV),在 Java 等高级编程语言中使用 NullPointerException (NPE) 进行抽象。

    阅读有关 protected modereal mode'rings' 的信息。

    注意: 嵌入式系统等特殊 CPU 不一定具有 MMU,因此可能会受到限制到µClinuxFreeRTOS 等特殊操作系统。

  2. 内核也会分配缓冲区,驱动程序也是如此(例如磁盘、网络接口和 GPU 的 IO 缓冲区)。

  3. 通常,每个空间和进程/线程都存在资源
    a)内核将自己的受保护堆栈放在用户空间堆栈(每个线程)的顶部,并且还具有单独的代码(还有“文本”)、数据和堆段。此外,每个进程都有自己的资源。
    b) CPU 架构有一定的要求(取决于它们提供的支持程度),但归根结底是软件(内核和用户)用于接口的空间库),它们创建了这些结构。

  4. 每一个合理的操作系统都至少提供一种方法来做到这一点。
    a)试试sudo cat /proc/slabinfo或干脆sudo slabtop

  5. 阅读 1。
    a) 基本上,是的,就像用户空间进程彼此隔离一样,除了用于在较新内核中快速直接访问的特殊技术,例如 CMA (Cross Memory Attach)

【讨论】:

  • 嗨,山姆,感谢您花时间回答我的问题,这真的很有帮助。会在做更多的自学后回来。
  • @artless 噪音:感谢您的评论。我真的应该提到 MMU,所以我更新了答案。
猜你喜欢
  • 2015-04-01
  • 1970-01-01
  • 2018-04-08
  • 2013-03-25
  • 1970-01-01
  • 1970-01-01
  • 2021-06-16
  • 2020-10-05
  • 1970-01-01
相关资源
最近更新 更多