Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.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
Operating system 内存访问安全实现问题_Operating System_Arch - Fatal编程技术网

Operating system 内存访问安全实现问题

Operating system 内存访问安全实现问题,operating-system,arch,Operating System,Arch,我理解,如果程序需要访问某些受保护的指令,它需要使用系统调用接口。IO设备访问可能是一个例子。生成一个中断,将模式设置为内核模式等 我的问题是:如何阻止程序访问超出其进程边界的内存。例如,访问超出其长度的数组或只是任意访问随机内存地址 按照我的理解,只有操作系统才有能力检查程序是否正在访问其范围内的内存。为了能够启动操作系统,需要一个中断。那么这是否意味着数组/变量和内存分配必须是系统调用。我对此表示怀疑 另一个选项是内存控制器或处理器有能力确保程序不会访问超出其边界的内存 对此,如有任何澄清,

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

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

按照我的理解,只有操作系统才有能力检查程序是否正在访问其范围内的内存。为了能够启动操作系统,需要一个中断。那么这是否意味着数组/变量和内存分配必须是系统调用。我对此表示怀疑

另一个选项是内存控制器或处理器有能力确保程序不会访问超出其边界的内存

对此,如有任何澄清,将不胜感激

另一个选项是内存控制器或处理器有能力确保程序不会访问超出其边界的内存

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

当程序运行时,在每一条访问内存的指令上,CPU都会根据页表(或缓存在CPU中的一个称为TLB的特殊内存中的副本)检查地址。如果页表未显示允许的访问,CPU将不会执行该访问,而是会捕获操作系统,操作系统可以决定执行什么操作(例如,终止进程)

另一个选项是内存控制器或处理器有能力确保程序不会访问超出其边界的内存

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

当程序运行时,在每一条访问内存的指令上,CPU都会根据页表(或缓存在CPU中的一个称为TLB的特殊内存中的副本)检查地址。如果页表未显示允许的访问,CPU将不会执行该访问,而是会捕获操作系统,操作系统可以决定执行什么操作(例如,终止进程)