C 是过程吗;沙盒“;用硬件?
进程是否可以访问所有RAM,或者CPU是否为进程指定了内核决定的特定部分,并且进程(在用户空间中运行)不能更改?换句话说,一个进程是由硬件进行沙盒处理的,还是它可以做任何事情,但由操作系统进行监控 编辑 评论中告诉我这太宽泛了,所以让我们假设x86/x64。我还要补充一点,在阅读我理解为进程可以访问所有RAM的内容时,出现了一个问题——这似乎与我读到的关于OSs安全性的内容相冲突。如果将MS-DOS视为“操作系统”,那么进程可以做任何事情(并且不受监控)。即使Windows95也没有真正的内存保护,一个有缺陷的进程可能会在错误的内存上涂鸦,从而导致机器崩溃 如果只计算特权分离的现代操作系统(Unix/Linux、Windows NT和派生操作系统),那么进程就是沙盒 顺便说一句,除了“如果你试图做某事,就会出现故障”之外,没有任何系统可以进行任何形式的监控。内核设置边界,如果用户空间进程试图超出边界,则会出错 如果你想象内核会观察一个非特权进程做什么,并相应地进行调整,那么不,这不是发生的事情C 是过程吗;沙盒“;用硬件?,c,assembly,operating-system,kernel,cpu,C,Assembly,Operating System,Kernel,Cpu,进程是否可以访问所有RAM,或者CPU是否为进程指定了内核决定的特定部分,并且进程(在用户空间中运行)不能更改?换句话说,一个进程是由硬件进行沙盒处理的,还是它可以做任何事情,但由操作系统进行监控 编辑 评论中告诉我这太宽泛了,所以让我们假设x86/x64。我还要补充一点,在阅读我理解为进程可以访问所有RAM的内容时,出现了一个问题——这似乎与我读到的关于OSs安全性的内容相冲突。如果将MS-DOS视为“操作系统”,那么进程可以做任何事情(并且不受监控)。即使Windows95也没有真正的内存保
看
- :通常通过为每个进程提供自己的虚拟地址空间()来实现。这是硬件支持的:代码使用的每个地址都由快速转换缓存()转换为物理地址,该缓存缓存操作系统设置的转换表(也称为页表) 进程不能直接修改自己的页表:它必须要求内核将更多的物理内存映射到它的地址空间(例如,作为malloc()的一部分)。因此,内核有机会在执行请求之前验证请求是否正常 此外,进程可以要求内核将数据复制到文件(或其他东西)或从文件(或其他东西)复制到其内存空间。(写入/读取系统调用)
- :正常进程在用户模式下运行,这是硬件提供的一种模式,在这种模式下,特权指令将捕获到内核
是。但我不明白为什么你强调操作系统而不是CPU。直到答案中的水平线之后,你才提到硬件。我错过了什么吗?@ispiro:所有沙箱机制都是硬件支持的。当我说“内核设置边界”时,它是通过编程硬件来实现的,例如设置页面表。计算机所做的一切都是CPU指令(不包括直接写入内存的设备的DMA)。硬件只是从内存中读取指令并根据手册中的说明执行。“内核执行X”只是描述过程的一种高级方式。e、 g.有关x86手册和指南的链接,请参阅。谢谢。因此,进程受到CPU+MMU允许其访问的内容的限制。我只是不能把我的脑袋绕到调用CPU所做的“内核”上来,因为使用直接执行——当一个进程正在执行代码时(直到下一个中断)——它只是进程和CPU。内核不存在(除非进程是在用户模式而不是内核模式下运行的。但这并不意味着内核模式代码此时有任何功能。它处于休眠状态。)总之,我不会再占用你的时间了。我的问题的答案现在似乎很清楚了。再次感谢。嗯。。。MS-DOS确实代表“Microsoft磁盘操作系统”@ispiro:没错,内核目前没有运行任何指令,但它设置的硬件支持沙盒的限制仍然存在(包括存储在内存中的所有内容,如进程的页表)。这就是我想说的,你应该怎么想。CPU只是一个遵循规则的状态机,即使在运行来自非特权进程的指令时,该状态的一部分仍处于内核控制之下。