gpt4 book ai didi

linux - 进程和线程与虚拟内存有何关系

转载 作者:太空宇宙 更新时间:2023-11-04 04:42:19 26 4
gpt4 key购买 nike

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

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

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

Q3-线程怎么样?如果有多个线程(例如线程A和线程B),当线程A运行时,线程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 寄存器,在取消引用时会添加到每个地址。用户空间程序执行*(int*)4,但他没有获取RAM中第4个字节后面的值,特殊的CPU寄存器值在解引用时被添加到指针值中。该寄存器的值由系统配置,在不同的程序中可以不同。因此,您可以在两个程序中拥有完全相同的指针值,但它们都指向不同的位置。当然,这过于简单化了。

关于linux - 进程和线程与虚拟内存有何关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57814330/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com