当计算机进程超出分配的内存 OS 时的术语

A term for when a computer process exceeds allocated memory by OS

当计算机进程使用过多内存并且 OS 必须终止它时,这个术语是什么?我在想 memory leak,但这意味着有未使用的内存被占用,事实并非如此。我也不会使用术语 stack overflow,因为可以在堆上分配内存。

"memory leak" 和 "stack overflow" 都没有,真的。内存泄漏是程序中的一个错误,可能 导致 运行 在长 运行 中耗尽内存。 "stack overflow" 是调用堆栈耗尽。

并非所有系统都会终止用尽所有内存的进程。通常是进程本身未能分配更多内存(在系统设置的约束范围内),导致出现 "out of memory" 错误(在 Unix 上的 C 中,malloc() returns a NULL 指针和 errno 变量设置为 ENOMEM)。当单个进程占用 all 内存时,这不一定会发生,但当许多其他进程使用大量内存时,任何进程都可能发生(使用草率的语言,可能有系统 -对每个用户施加限制等)

我可能会将在系统上占用大量内存的进程称为 "memory hog",但我从未见过描述 事件 的术语运行内存不足。 "Memory exhaustion" 也许,或者干脆 "causing an out of memory situation".

when a computer process uses too much memory, and the OS has to terminate it

你在这里描述的情况并没有发生。行为不同于 OS 到 OS,但 none 会按照您的描述发生。例如,在 Windows 上,内存分配可能会失败,但这并不意味着 OS 终止了进程。分配内存 returns 错误代码的调用和进程决定如何处理这种情况。 Linux 有这种疯狂的内存分配方案,在没有任何支持的情况下分配成功,然后对内存的实际引用可能会失败。在这种情况下 Linux 运行 oom-killer:

It is the job of the linux 'oom killer' to sacrifice one or more processes in order to free up memory for the system when all else fails.

请注意,oom-killer 是由 badness() 函数选择的进程,不一定是实际接触没有支持的页面的进程(即不是请求内存的进程)。在 Linux 中,区分记忆是 'allocated' 和记忆是第一次 'referenced' 也很重要(即 PTE 恶作剧)。

所以,严格来说,你所描述的是不存在的。但是,进程 'running out of memory' 的通用名称是 out of memory,通常缩写为 OOM。在大多数现代系统中,OOM 条件表现为异常,并且是由进程主动引发的异常,而不是由 OS.

OS 当场杀死进程的一种情况是在保护页面 PTE 未命中期间发生 OOM(即 OS 无法提交虚拟页面)。由于 OS 没有实际分配保护页的空间,它没有实际为进程写入异常记录的空间,并且它不能引发异常(那将是堆栈溢出异常,因为我们正在谈论关于保护页)。 Th OS 别无选择,只能抹杀进程(技术上不是杀死,因为杀死是一种信号)。

OutOfMemory-Exceptions 是我最好的猜测