【问题标题】:Are processes "sandboxed" by hardware?进程是否被硬件“沙盒化”?
【发布时间】:2017-01-26 10:07:53
【问题描述】:

一个进程可以访问所有的 RAM 还是 CPU 给进程一个由内核决定的特定部分,并且进程(在用户空间中运行)不能改变?换句话说 - 是一个被硬件沙箱化的进程,还是它可以做任何事情,但被操作系统监控?

编辑

我在 cmets 中被告知这太宽泛了,所以让我们假设 x86/x64。我还要补充一点,在阅读我理解的进程可以访问所有 RAM 的内容时出现了这个问题——这似乎与我读到的关于操作系统安全性的内容相冲突。

【问题讨论】:

  • 这取决于操作系统(以及操作系统运行的硬件),但现代操作系统限制了进程可以执行的操作,并且进程无法访问所有内存,因为o/s 限制了允许使用的内容,部分原因是虚拟内存管理。但这确实假设您正在使用具有内存管理等功能的系统。如果您在嵌入式系统中使用 8 位微控制器,那么任何进程都可以访问任何内存的机会。但这仍然取决于 h/w 和 o/s。
  • 在能够运行现代操作系统的现代硬件中,存在设置进程沙箱边界的硬件支持。主要以虚拟内存的形式,并在非特权模式下运行用户空间进程(特权指令陷入内核)。
  • @PeterCordes 谢谢。 (顺便说一句,我更新了问题。)

标签: c assembly operating-system kernel cpu


【解决方案1】:

如果您将 MS-DOS 视为“操作系统”,那么进程可以做任何事情(并且不受监控)。即使是 Windows95 也没有真正的内存保护,一个有问题的进程可能会因为乱涂错误的内存而导致机器崩溃。

如果您只计算具有特权分离的现代操作系统(Unix/Linux、Windows NT 和衍生产品),那么进程是沙盒化的。

AFAIK,除了“如果您尝试做某事时出现故障”之外,没有真正的系统可以进行任何形式的监控。内核设置了边界,如果用户空间进程试图越界,就会出错。

如果您想象内核可能会查看非特权进程所做的事情并相应地进行调整,那么不,这不会发生。


  • https://en.wikipedia.org/wiki/Memory_protection:通常通过给每个进程自己的虚拟地址空间(virtual memory)来实现。这是硬件支持的:您的代码使用的每个地址都由快速转换缓存 (TLB) 转换为物理地址,该缓存缓存操作系统设置的转换表(也称为页表)。

    进程不能直接修改自己的页表:它必须要求内核将更多的物理内存映射到它的地址空间(例如,作为 malloc() 的一部分)。所以内核有机会在之前验证请求是否正常。

    此外,进程可以要求内核将数据从文件(或其他东西)复制到/从文件(或其他东西)到其内存空间。 (写/读系统调用)。

  • https://en.wikipedia.org/wiki/User_space:普通进程运行在用户模式下,这是硬件提供的一种模式,特权指令将捕获到内核。

【讨论】:

  • 我知道你对这个问题的回答(在标题中)基本上是yes。但我对你为什么强调操作系统而不是 CPU 感到困惑。直到答案中的水平线之后,您甚至都不会提及硬件。我错过了什么吗?
  • @ispiro:所有沙盒机制都是硬件支持的。当我说“内核设置边界”时,它通过对硬件进行编程来做到这一点,例如设置页表。计算机所做的一切都是 CPU 指令(嗯,不包括设备直接写入内存的 DMA)。硬件只是从内存中读取指令并执行它们,根据手册所说的应该发生的事情。 “内核执行 X”只是描述进程的高级方式。例如有关 x86 手册和指南的链接,请参阅 the x86 tag wiki
  • 谢谢。因此,该进程受限于 CPU+MMU 允许它访问的内容。由于使用直接执行——当一个进程正在执行代码时(直到下一个中​​断)——它只是进程和 CPU,我只是不能把我的头脑称为 CPU 的“内核”。内核不存在(除非进程在用户模式而不是内核模式下运行。但这并不意味着内核模式代码在那一刻有任何权力。它处于休眠状态。)无论如何,我不会多花点时间。我的问题的答案现在似乎很清楚了。再次感谢。
  • 嗯...MS-DOS 确实代表“Microsoft 磁盘操作系统
  • @ispiro:是的,内核目前没有运行任何指令,但它设置的硬件支持沙箱的限制仍然存在(包括它存储在内存中的所有内容,就像进程的页表一样)。这就是我想说的,你应该怎么想。 CPU 只是一个遵循规则的状态机,即使在运行来自非特权进程的指令时,该状态的一部分仍处于内核控制之下。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-02-09
  • 1970-01-01
  • 2020-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多