【问题标题】:Does the terms "user space" and "kernel space" refer to physical memory?术语“用户空间”和“内核空间”是否指物理内存?
【发布时间】:2017-11-16 20:15:54
【问题描述】:

当我们使用术语“用户空间”时,是指物理内存中包含用户进程的代码和数据的区域,还是指每个进程拥有的 3 GB 虚拟内存?

当我们使用术语“内核空间”时,我们是指物理内存中包含内核代码和数据的区域,还是指每个进程拥有的 1 GB 虚拟内存?

【问题讨论】:

标签: linux linux-kernel x86 operating-system


【解决方案1】:

术语“内核空间”和“用户空间”并不具体指虚拟内存或物理内存。从概念上讲,如果您说“内核空间”是指每个进程拥有的 1GB 虚拟内存,它仍然与指代驻留在物理内存中的内核代码和数据相同,因为 1GB 虚拟内存映射到保存内核的物理内存代码和数据。

我们使用术语“内核空间”和“用户空间”来指代谁有权访问内存的哪一部分。 “内核空间”是指只有内核可以访问的内存,而“用户空间”是指相应的用户进程和内核都可以访问的内存。

【讨论】:

    【解决方案2】:

    它根本不涉及地址空间。

    用户空间:处理器在非特权上下文中执行某些操作。

    内核空间:处理器在特权上下文中执行某些操作。

    在特权上下文中,一切都被允许,在非特权上下文中,某些处理器功能受到限制。这是在硬件中实现的,因此处理器必须支持至少两种 linux 模式。

    所以要从用户空间切换到内核空间,您需要切换上下文(通过系统调用)。

    您可以在内核空间内分配虚拟内存(vmalloc)以及物理内存(kmalloc),因此它与内存没有直接关系。

    在用户空间你只能分配虚拟内存(vmalloc = malloc)。

    【讨论】:

      【解决方案3】:

      “用户空间”和“内核空间”是指逻辑地址的范围。

      内核空间对于所有进程都是相同的,而用户空间对于每个进程是唯一的。但是,用户地址空间可以共享到物理内存的映射。

      理论上,两个进程可以拥有相同的用户空间,但实际上不会发生这种情况。

      【讨论】:

        【解决方案4】:

        流程概念而言:

        我们可以说一个进程可以在“内核空间”或“用户空间”中运行,而不是同时运行。通常一个进程在“用户空间”中运行。如果进程需要访问受保护的资源,它应该跳转到“内核空间”,因为只有内核才有权访问受保护的资源。为此,我们必须使用系统调用。

        地址空间而言:

        我们可以说(虚拟)内存可以在“内核(地址)空间”或“用户(地址)空间”中。在32bit普通linux系统中,用户地址空间范围为[0,0xbfffffff],内核地址空间为[0xc0000000, 0xffffffff]

        【讨论】:

          【解决方案5】:

          你是正确的部分。 系统内存分为这两种内存:

          用户空间是运行用户进程的系统内存的一部分。这与内核空间形成对比,内核空间是内核执行和提供服务的那部分内存。

          由专用RAM(随机存取存储器)VLSI(超大规模集成电路)半导体芯片组成的存储器的内容可以以极高的速度访问(即读取和写入),但只能暂时保留

          内核空间是构成计算机操作系统核心的内存。它实际上是一个控制所有其他进程的进程,并且它完全控制系统上发生的一切。这包括在用户空间内管理 HW(管理设备)和 SW(单个用户进程)的系统资源并防止它们相互干扰。这基本上是操作系统运行的地方。

          【讨论】:

          • 恕我直言,这个问题并没有真正回答 “术语“用户空间”和“内核空间”是指物理内存吗?”
          猜你喜欢
          • 2014-06-10
          • 1970-01-01
          • 2012-03-02
          • 2015-08-08
          • 2020-12-04
          • 2012-02-03
          • 2014-03-28
          • 2017-10-27
          • 2016-06-26
          相关资源
          最近更新 更多