【发布时间】:2020-03-23 15:12:56
【问题描述】:
有人告诉我,同一进程中的线程共享相同的物理内存空间和相同的虚拟内存地址,并且每个线程都有自己的函数堆栈。
所以说我有两个线程t1 和t2。如果我是对的,t1 堆栈的虚拟内存地址可能是从0x0000 到0x0011,而t2 堆栈的虚拟内存地址可能是从0x0100 到0x0111。总之,它们的虚拟内存地址不重叠。
所以我有一个问题:它们如何共享相同的物理内存? t1 和t2 是否可能位于同一块物理内存中?如果可能,是否意味着操作系统必须在内容切换到t2 时存储t1 的堆栈?
【问题讨论】:
-
这是通过分页机制完成的,分页机制通常是操作系统的一部分。当应用程序请求其虚拟范围中的地址时,物理内存中的虚拟内存页面(4096字节大小的块)不可用,触发页面交换,这意味着将页面从文件加载到可用的物理内存插槽中。如果在一段时间内不使用页面,则卸载页面与使用特殊文件的方式相同。
标签: multithreading memory memory-management