Memory 当计算机进程超过操作系统分配的内存时的术语

Memory 当计算机进程超过操作系统分配的内存时的术语,memory,terminology,Memory,Terminology,当一个计算机进程使用了太多内存,操作系统不得不终止它时,这个术语是什么?我在想内存泄漏,但这意味着内存没有被占用,事实并非如此。我也不会使用堆栈溢出这一术语,因为可以在堆上分配内存。无论是“内存泄漏”还是“堆栈溢出”都不能真正消除它。内存泄漏是程序中的一个缺陷,从长远来看可能会导致内存耗尽。“堆栈溢出”是调用堆栈的耗尽 并非所有系统都会终止耗尽所有内存的进程。通常是进程本身无法分配更多内存(在系统设置的约束范围内),导致出现“内存不足”错误(在Unix上的C中,malloc()返回NULL指针,

当一个计算机进程使用了太多内存,操作系统不得不终止它时,这个术语是什么?我在想
内存泄漏
,但这意味着内存没有被占用,事实并非如此。我也不会使用堆栈溢出这一术语,因为可以在堆上分配内存。

无论是“内存泄漏”还是“堆栈溢出”都不能真正消除它。内存泄漏是程序中的一个缺陷,从长远来看可能会导致内存耗尽。“堆栈溢出”是调用堆栈的耗尽

并非所有系统都会终止耗尽所有内存的进程。通常是进程本身无法分配更多内存(在系统设置的约束范围内),导致出现“内存不足”错误(在Unix上的C中,
malloc()
返回
NULL
指针,
errno
变量设置为
ENOMEM
)。当单个进程占用所有内存时,不一定会发生这种情况,但当许多其他进程使用大量内存时,任何进程都可能发生这种情况(使用草率的语言,可能会对每个用户设置系统限制等)

我可能会把在系统上占用大量内存的过程称为“内存猪”,但我从未见过描述内存耗尽事件的术语。可能是“内存耗尽”,或者仅仅是“造成内存不足的情况”。

无论是“内存泄漏”还是“堆栈溢出”都不能真正解决这个问题。内存泄漏是程序中的一个缺陷,从长远来看可能会导致内存耗尽。“堆栈溢出”是调用堆栈的耗尽

并非所有系统都会终止耗尽所有内存的进程。通常是进程本身无法分配更多内存(在系统设置的约束范围内),导致出现“内存不足”错误(在Unix上的C中,
malloc()
返回
NULL
指针,
errno
变量设置为
ENOMEM
)。当单个进程占用所有内存时,不一定会发生这种情况,但当许多其他进程使用大量内存时,任何进程都可能发生这种情况(使用草率的语言,可能会对每个用户设置系统限制等)

我可能会把在系统上占用大量内存的过程称为“内存猪”,但我从未见过描述内存耗尽事件的术语。可能是“内存耗尽”,或者只是“导致内存不足”

当计算机进程使用太多内存时,操作系统必须终止它

你在这里描述的事情没有发生。不同操作系统的行为有所不同,但没有一种行为会像您描述的那样发生。例如,在Windows上,内存分配可能会失败,但这并不意味着操作系统将终止该进程。分配内存的调用返回一个错误代码,进程决定如何处理这种情况。Linux有一种疯狂的内存分配方案,在这种方案上,分配成功而无需任何支持,然后对内存的实际引用可能会失败。在本例中,Linux运行以下命令:

linux“oom杀手”的任务是牺牲一个或多个进程,以便在所有其他进程都失败时为系统释放内存

请注意,该进程是由
badness()
函数选择的进程,不一定是实际接触到没有支持的页面的进程(即,不是请求内存的进程)。在Linux中,区分第一次被“分配”的内存和第一次被“引用”的内存也很重要(例如,诡计)

所以,严格地说,你所描述的并不存在。但是,进程“内存不足”的通用名称是
内存不足
,通常缩写为OOM。在大多数现代系统中,OOM条件表现为异常,并且是由进程而不是操作系统主动引发的异常

操作系统当场终止进程的一种情况是在保护页PTE未命中期间发生OOM(即操作系统无法提交虚拟页)。由于操作系统没有空间实际分配保护页,因此它没有空间实际写入进程的异常记录,并且无法引发异常(这将是堆栈溢出异常,因为我们讨论的是保护页)。操作系统别无选择,只能删除进程(从技术上讲,这不是一个终止,因为终止是一种信号)

当计算机进程使用太多内存时,操作系统必须终止它

你在这里描述的事情没有发生。不同操作系统的行为有所不同,但没有一种行为会像您描述的那样发生。例如,在Windows上,内存分配可能会失败,但这并不意味着操作系统将终止该进程。分配内存的调用返回一个错误代码,进程决定如何处理这种情况。Linux有一种疯狂的内存分配方案,在这种方案上,分配成功而无需任何支持,然后对内存的实际引用可能会失败。在本例中,Linux运行以下命令:

linux“oom杀手”的任务是牺牲一个或多个进程,以便在所有其他进程都失败时为系统释放内存

请注意,该进程是由
badness()
函数选择的进程,不一定是实际接触到没有支持的页面的进程(即,不是请求内存的进程)。在Linux中,区分第一次被“分配”的内存和第一次被“引用”的内存也很重要(例如,诡计)

所以,严格地说,你所描述的并不存在。但是,进程“内存不足”的通用名称是
内存不足
,通常缩写为OOM。在大多数现代系统中,OOM条件表现为异常,并且是由进程而不是操作系统主动引发的异常

一四