进程处于 blocked/suspended 状态时是否保留在主内存中?

Is a process kept in main memory while it is in the blocked/suspended state?

当进程 P1 处于阻塞或挂起状态时,内存管理系统会将其从主内存中换出,为活动进程腾出空间吗?

如果确定进程返回,程序的过程调用堆栈、程序计数器内容 (PC) 和程序状态字内容 (PSW) 存储在哪里? OS 是将其全部保存在辅助内存中还是 P1 的 suspended/blocked 进程的 部分 保存在主内存中?

So I'm guessing when a process is swapped out of memory and put in a suspended state, all of its resident pages are moved out. When the process is resumed, all of the pages that were previously in main memory are returned to main memory

根据页面而不是进程来思考。

如果系统处于内存压力下,即使是一个活动进程也可能有许多页面被逐出物理内存并进入交换空间。

所以,可以肯定的是,挂起的进程可能实际上已经完全换出了它的所有页面。

但不可能仅仅因为进程唤醒就将所有页面换入。这样做会浪费 CPU、I/O 和内存。相反,页面将根据需要返回(一般情况——一些寻呼机可能会试探性地返回页面集)。


如果进程处于活动状态,则不会被换出,因此最低调用堆栈的动态状态(所有寄存器噪声、堆栈上的红色区域等...)不起作用当交换发生时。

即对于要换出的进程,线程需要在某些事情上被阻塞,通常是对内核的调用或对阻塞的系统库的调用。寄存器将失效,等等...因此,需要换出的执行状态非常简单,因为调用 return 状态将保留在线程状态本身中(因为线程被阻塞)。

事实上,PC 和 PSW 之类的东西更多地被保留为上下文切换子系统的一部分,而不是分页。 IE。在一个典型的系统上,您可能会在 CPU 的 N 个物理核心上同时拥有数百甚至数千个线程 运行。体系结构的并发支持是您将找到如何维护该状态的地方。