Memory management 在分配的区域之外访问内存的进程

Memory management 在分配的区域之外访问内存的进程,memory-management,operating-system,processor,Memory Management,Operating System,Processor,假设一个进程被分配了一个特定的虚拟内存区域。 如果进程访问此分配区域之外的内存区域,处理器将如何反应 处理器是否终止进程?还是说这是一个错误 提前感谢。进程实际上没有分配特定的虚拟内存区域。它们是分配给它们可以使用虚拟内存访问的物理帧。进程可以虚拟访问所有可用的虚拟内存 当编译高级语言时,它被放在可执行文件中。这个可执行文件是一种文件格式,它指定了一些内容,其中包括程序正在使用的虚拟内存。当操作系统启动该可执行文件时,它会将某些物理页面分配给新创建的进程。这些页面包含实际代码。操作系统需要设置页

假设一个进程被分配了一个特定的虚拟内存区域。 如果进程访问此分配区域之外的内存区域,处理器将如何反应

处理器是否终止进程?还是说这是一个错误


提前感谢。

进程实际上没有分配特定的虚拟内存区域。它们是分配给它们可以使用虚拟内存访问的物理帧。进程可以虚拟访问所有可用的虚拟内存

当编译高级语言时,它被放在可执行文件中。这个可执行文件是一种文件格式,它指定了一些内容,其中包括程序正在使用的虚拟内存。当操作系统启动该可执行文件时,它会将某些物理页面分配给新创建的进程。这些页面包含实际代码。操作系统需要设置页表,以便将进程使用的虚拟地址转换到内存中的正确位置(正确的物理地址)

当一个进程试图在不应该跳转到的虚拟地址的任何地方跳转时,可能会发生几种情况。这是未定义的行为

如osdev.org()所述:

当进程试图访问未映射到任何物理内存的虚拟内存区域时,当尝试在只读页上写入时,当使用保留位访问PTE或PDE时,或者当权限不足时,会导致页面错误异常

CPU在触发页面错误异常之前在堆栈上推送错误代码。异常处理程序必须分析错误代码,以确定如何处理异常。仅使用异常代码的底部3位,保留位3-31

这实际上取决于你所使用的语言和几个因素。例如,在汇编中,如果您尝试在RAM中跳转到随机虚拟地址。有几种情况可能发生

  • 如果跳转到分配的页面,那么该页面可能包含任何内容。它也可以包含零。如果它包含零,则进程将继续执行指令,直到到达RAM中不存在的页面并触发页面错误。或者,它也可以在RAM中的其他地方执行jmp,并最终触发页面错误

  • 如果跳转到当前位未设置的页面(未分配页面),CPU将立即触发页面错误。由于页面未被分配,因此不会神奇地被分配。操作系统需要采取行动。如果该页面应该被进程访问,那么它可能被交换到硬盘,操作系统需要将其交换回RAM中。如果它不应该被访问(就像在本例中),操作系统需要终止进程(它确实如此)。通过查看进程的内存映射,操作系统知道进程不应该访问某个页面。它不应该只是盲目地将一个页面分配给一个无处跳转的进程。如果进程在执行过程中需要更多内存,它可以使用系统调用请求操作系统

  • 如果跳转到一个虚拟地址,该地址一旦被MMU使用页表转换,就会以内核模式代码(管理器代码)的形式降落在RAM中,CPU将触发管理器的页错误并显示错误代码(1 0 1)

  • 操作系统使用两级权限(0和3)。因此,所有用户模式进程都以权限3运行。除了页面表的设置方式外,没有任何东西可以阻止一个用户进程访问另一个进程的内存和代码。页面表格通常没有完全填满。如果你跳转到一个随机的虚拟地址,任何事情都可能发生。虚拟地址可以转换为任何内容