进程和线程如何与虚拟内存相关

How process and thread related to virtual memory

我是 Linux 和计算机体系结构的新手,只是一些关于进程和线程如何与虚拟内存和物理内存相关的问题 RAM.Below 是我的问题。

Q1-当有两个进程(进程A和进程B)运行ning并发时,如果进程A现在运行ning,进程B的状态如寄存器值,堆对象等必须被推送到磁盘(虚拟内存)上存储,当下一次上下文切换发生时,进程 B 将从磁盘 "recovery" 到 RAM,进程 A 的状态将被推送到磁盘,我的理解是否正确?

Q2- 如果我在 Q1 中的理解是正确的,为什么不将所有进程也保存在 RAM 上?通常我们有大 RAM,如 16gb、32gb 等,将每个进程的状态存储在 RAM 上如何,当进程太多并且 RAM 将 运行 耗尽时,更多进程的状态将存储到磁盘?

Q3-线程如何?如果有多个线程(例如线程A和线程B),当线程A 运行ning时,线程B的状态是否也会被推送到存储在磁盘上?

is my understanding correct?

不,这是错误的。等待或阻塞的进程不会交换到磁盘。他们在记忆中等待。虚拟内存不在磁盘上。

同样在有两个处理器的系统上,两个进程运行并发,所以进程A和B可以同时运行。

why not just save all processes on RAM too?

这正是发生的事情。所有进程内存都在 RAM 中等待,直到调度程序切换到该进程。

旁注:如果没有可用的 RAM 并且系统有可用的交换空间并且此进程在某个定义的时间内空闲,那么它可能会在磁盘上交换,即。进程内存可能会移动到光盘。但这不会立即发生,它会在很长一段时间后并且在某些情况下发生

will be pushed to stored on disk too?

没有

虚拟内存与内存的物理位置无关。反过来 - 虚拟内存是一种抽象,允许系统修改内存的物理(可能如果有的话)位置。我给出一个最简单的解释:有一个特殊的 cpu 寄存器在取消引用时添加到每个地址。用户 space 程序执行 *(int*)4 但他没有获得 RAM 中第 4 个字节后面的值,特殊的 cpu 寄存器值在取消引用时添加到指针值。寄存器值由系统配置,在不同的程序中可以不同。所以你可以在两个程序中拥有完全相同的指针值,但它们都指向不同的位置。当然,这是过于简单化了。