![进程是否会停留在内存中直至完成?](https://linux22.com/image/1597083/%E8%BF%9B%E7%A8%8B%E6%98%AF%E5%90%A6%E4%BC%9A%E5%81%9C%E7%95%99%E5%9C%A8%E5%86%85%E5%AD%98%E4%B8%AD%E7%9B%B4%E8%87%B3%E5%AE%8C%E6%88%90%EF%BC%9F.png)
我正在解决一个问题,其中我得到了几个进程,每个进程都有自己完成所需的 CPU 时间、内存需求和进入就绪队列的时间。调度程序用于分配它们的算法是最短剩余时间 (SRT)。系统的内存量有限,其中一部分被操作系统占用。
我的问题是,如果某个进程(P1)需要 8 个时间单位才能完成,并且已经在内存中,而另一个进程(P2)需要 3 个时间单位才能完成,但大部分内存都被 P1 占用,那么 P1 会被踢出内存吗?还是会一直留在 CPU 上直到完成?
答案1
大多数现代操作系统(例如 Linux、Windows 等)实现的进程都保留在内存中,直到退出或被操作系统本身终止。
进程通常在完成时退出,但有些进程可能被设计为永不退出,除非操作系统发送信号;守护进程和服务属于此类。
如果操作系统没有足够的内存来加载进程,则行为取决于操作系统。操作系统可以报告由于内存不足而无法启动进程,或者操作系统可以采用其他设计 - 也许它会强制终止运行时间最长的进程。或者操作系统/调度程序可能会崩溃或重新启动。
等到有足够的内存来实际加载进程是一个有趣的策略,但这通常是不可行的,因为大多数进程在启动后不会消耗固定数量的内存 - 它们通常会根据配置或尝试执行的操作向操作系统请求更多内存用于动态变量/结构,而这并不容易预测。