内存访问安全实现题

Memory access security implementation question

我了解如果程序需要访问某些受保护的指令,则需要使用系统调用接口。 IO 设备访问就是一个例子。生成一个中断,将模式设置为内核模式等。

我的问题如下:如何阻止程序访问超出其进程边界的内存。例如访问超出其长度的访问数组或只是任意访问随机内存地址。

据我了解,只有操作系统才有能力检查程序是否在其范围内访问内存。并且为了能够使用操作系统,需要中断。这是否意味着 array/and 变量内存分配必须是系统调用。我怀疑。

另一种选择是内存控制器或处理器有能力确保程序不会越界访问内存。

如能对此作出任何澄清,我们将不胜感激。

The other option is that memory controller or the processor has capability to make sure a program doesn’t access a memory beyond its bounds.

这就是它的工作原理。 CPU 上的现代操作系统 运行 具有内存保护功能。您可以在任何 arch/OS 书中找到详细信息,但最基本的想法是 OS 设置 页表 告诉 CPU 什么程序可能访问的虚拟内存中的地址,以及它们如何映射到物理内存。然后它只需确保只有正确分配给进程的内存才包含在该映射中。

作为程序 运行s,在访问内存的每条指令上,CPU 将根据页表检查地址(或缓存在 CPU 中的副本内存称为 TLB)。如果页表没有显示允许的访问,CPU 将不会执行它,而是会陷入操作系统,操作系统可以决定要做什么(例如终止进程)。