2016-09-18 42 views
3

进程是否可以访问所有的RAM,或者CPU是否可以为进程提供内核决定的特定部分,并且进程(在用户空间中运行)不能更改?换句话说 - 是一个由硬件进行沙盒处理的进程,还是可以执行任何操作,但由操作系统监控?进程是否被硬件“沙箱化”?

编辑

有人告诉我的意见,这是太广,所以我们假设在x86/x64。我还会补充说,在阅读我所理解的内容时,问题就出现了,即进程可以访问所有内存 - 这似乎与我在操作系统中读到的有关安全性的内容相冲突。

+3

它取决于o/s(以及o/s运行的h/w),但现代操作系统限制了进程可以执行的操作,并且进程无法访问所有内存,因为o /它限制了它的使用范围,部分原因在于虚拟内存管理。但是,这确实假设你正在使用内存管理系统等。如果你在嵌入式系统中使用8位微控制器,任何进程都可以访问任何内存。但它仍然取决于h/w和o/s。 –

+1

在能够运行现代操作系统的现代硬件中,硬件支持设置进程沙箱的边界。主要以虚拟内存的形式,以非特权模式运行用户空间进程(特权指令陷入内核)。 –

+0

@PeterCordes谢谢。 (顺便说一下,我更新了这个问题。) – ispiro

回答

5

如果您将MS-DOS计为“操作系统”,则进程可以执行任何操作(并且不受监视)。即使Windows95也没有真正的内存保护,并且一个错误的进程可能会通过在错误的内存上涂写而导致机器崩溃。

如果您只将特权分离(Unix/Linux,Windows NT和派生)的现代操作系统计算在内,则会对进程进行沙盒处理。但是,除了“如果你试图做某件事情上的错误”之外,并没有真正的系统存在任何形式的监控。内核设置边界,如果用户空间进程试图超出它们,则会出现故障。

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


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

    进程无法直接修改自己的页表:它必须要求内核将更多物理内存映射到其地址空间(例如,作为malloc()的一部分)。所以内核有机会在之前验证请求是否正确。另外,进程可以要求内核将文件(或其他文件)中的数据复制到其内存空间中。 (写/读系统调用)。

  • https://en.wikipedia.org/wiki/User_space:正常进程在用户模式下运行,这是由硬件提供的模式,特权指令会陷入内核。

+0

我得到你对这个问题的回答(标题中)基本上是'是'。但是我很困惑,为什么你强调操作系统而不是CPU。在答案中的水平线之后,你甚至不会提到硬件。我错过了什么? – ispiro

+0

@ispiro:所有的沙盒机制都是硬件支持的。当我说“内核设定了界限”时,它通过编程硬件来实现,例如,设置页表。计算机所做的一切都是CPU指令(不包括直接写入存储器的设备的DMA计数)。硬件只是从内存读取指令并执行它们,根据手册说的应该发生。 “内核确实是X”只是描述过程的高级方式。例如有关x86手册和指南的链接,请参阅[x86标记wiki](http://stackoverflow.com/tags/x86/info)。 –

+0

谢谢。所以这个过程受到CPU + MMU允许访问的限制。自从使用直接执行 - 当一个进程正在执行代码(直到下一个中​​断)时,我就无法围绕CPU调用什么“内核” - 它只是进程和CPU。内核不存在(除非进程在用户模式下运行,而不是在内核模式下运行,但这并不意味着内核模式代码在那一刻有任何权限,它处于休眠状态)。无论如何,我不会再花一点时间。现在我的问题的答案似乎很清楚。再次感谢。 – ispiro