我被告知,同一个进程中的线程共享相同的物理内存空间和相同的虚拟内存地址,每个线程都有自己的功能堆栈。
也就是说,我有两个线程,t1和t2。如果我是对的,t1堆栈的虚拟内存地址可能是从0x0000到0x0011,而t2堆栈的虚拟内存地址可能是从0x0100到0x0111。总之,它们的虚拟内存地址不重叠。
所以我有一个问题:他们如何共享相同的物理记忆?t1和t2可能位于物理内存的同一部分吗?如果这是可能的话,这是否意味着当内容切换到t1时,操作系统必须存储t2的堆栈?
发布于 2019-11-29 11:45:35
the same process share the same physical memory space and the same virtual memory addresses时,它实际上意味着同一个进程共享相同的物理内存空间和相同的虚拟内存地址,不同的进程有不同的物理内存空间,即进程A除了共享内存之外不能修改/访问进程B的物理内存空间。对于每个进程,这个受保护的独立内存段由内存管理单元(MMU).threads share the same physical memory时。这意味着所有线程都有相同的地址空间,这意味着它们也共享相同的全局变量。每个线程都可以访问进程地址空间中的每个内存地址,线程A可以读取、写入甚至完全删除线程B的堆栈。How do threads share the same physical memory? For LinuxThreads,它使用(CLONE_VM \x CLONE_FS \ CLONE_FILES /CLONE_FILES)参数调用LinuxThreads ()来创建“线程”,这意味着共享内存、共享文件系统访问计数、共享文件描述符表和共享信号处理。http://man7.org/linux/man-pages/man2/clone.2.html线程之间的区别是程序计数器(跟踪要执行下一步的指令)、寄存器(保存其当前工作变量)、线程堆栈(包含执行历史)。https://stackoverflow.com/questions/59080778
复制相似问题