RAM内存中的段

时间:2013-11-09 15:08:40

标签: c linux linux-kernel x86

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

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

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

  3. 此代码,数据,堆栈和堆段在哪里?

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

    b)此段是由H / W还是(O / S)创建。

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

    a)是否有任何Linux命令(或)系统调用来查找它?

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

    a)我认为这样做是为了保证内核对应用程序不安全吗?这是唯一的原因。

  6. 我是初学者,所以请为我推荐一些好书,链接以及解决这些概念的方法。

1 个答案:

答案 0 :(得分:4)

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

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

    从用户空间,人们不能直接访问内存(在实模式下),必须通过MMU访问它,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)之类的特殊技术,以便在较新的内核中快速直接访问。