Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/assembly/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 是过程吗;沙盒“;用硬件?_C_Assembly_Operating System_Kernel_Cpu - Fatal编程技术网

C 是过程吗;沙盒“;用硬件?

C 是过程吗;沙盒“;用硬件?,c,assembly,operating-system,kernel,cpu,C,Assembly,Operating System,Kernel,Cpu,进程是否可以访问所有RAM,或者CPU是否为进程指定了内核决定的特定部分,并且进程(在用户空间中运行)不能更改?换句话说,一个进程是由硬件进行沙盒处理的,还是它可以做任何事情,但由操作系统进行监控 编辑 评论中告诉我这太宽泛了,所以让我们假设x86/x64。我还要补充一点,在阅读我理解为进程可以访问所有RAM的内容时,出现了一个问题——这似乎与我读到的关于OSs安全性的内容相冲突。如果将MS-DOS视为“操作系统”,那么进程可以做任何事情(并且不受监控)。即使Windows95也没有真正的内存保

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

编辑

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

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

如果只计算特权分离的现代操作系统(Unix/Linux、Windows NT和派生操作系统),那么进程就是沙盒

顺便说一句,除了“如果你试图做某事,就会出现故障”之外,没有任何系统可以进行任何形式的监控。内核设置边界,如果用户空间进程试图超出边界,则会出错

如果你想象内核会观察一个非特权进程做什么,并相应地进行调整,那么不,这不是发生的事情


  • :通常通过为每个进程提供自己的虚拟地址空间()来实现。这是硬件支持的:代码使用的每个地址都由快速转换缓存()转换为物理地址,该缓存缓存操作系统设置的转换表(也称为页表)

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

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

  • :正常进程在用户模式下运行,这是硬件提供的一种模式,在这种模式下,特权指令将捕获到内核


这取决于o/s(以及运行o/s的h/w),但现代操作系统限制了进程的功能,进程无法访问所有内存,因为o/s限制了允许使用的内容,部分原因是虚拟内存管理。但这确实假设您正在使用一个具有内存管理等功能的系统。如果您在嵌入式系统中使用8位微处理器,任何进程都有可能访问任何内存。但这仍然取决于h/w和o/s。在能够运行现代操作系统的现代硬件中,有硬件支持设置进程沙箱的边界。主要是以虚拟内存的形式,在非特权模式下运行用户空间进程(特权指令被困在内核中)。@PeterCordes谢谢。(顺便说一句,我更新了这个问题。)我知道你对这个问题(标题中)的回答基本上是
。但我不明白为什么你强调操作系统而不是CPU。直到答案中的水平线之后,你才提到硬件。我错过了什么吗?@ispiro:所有沙箱机制都是硬件支持的。当我说“内核设置边界”时,它是通过编程硬件来实现的,例如设置页面表。计算机所做的一切都是CPU指令(不包括直接写入内存的设备的DMA)。硬件只是从内存中读取指令并根据手册中的说明执行。“内核执行X”只是描述过程的一种高级方式。e、 g.有关x86手册和指南的链接,请参阅。谢谢。因此,进程受到CPU+MMU允许其访问的内容的限制。我只是不能把我的脑袋绕到调用CPU所做的“内核”上来,因为使用直接执行——当一个进程正在执行代码时(直到下一个中断)——它只是进程和CPU。内核不存在(除非进程是在用户模式而不是内核模式下运行的。但这并不意味着内核模式代码此时有任何功能。它处于休眠状态。)总之,我不会再占用你的时间了。我的问题的答案现在似乎很清楚了。再次感谢。嗯。。。MS-DOS确实代表“Microsoft磁盘操作系统”@ispiro:没错,内核目前没有运行任何指令,但它设置的硬件支持沙盒的限制仍然存在(包括存储在内存中的所有内容,如进程的页表)。这就是我想说的,你应该怎么想。CPU只是一个遵循规则的状态机,即使在运行来自非特权进程的指令时,该状态的一部分仍处于内核控制之下。