linux - 在 Unix/Linux 中运行两个进程

标签 linux unix

当内核创建两个代码段相同的进程时,内核是否真的将代码复制到两个进程的虚拟地址空间?换句话说,如果我创建同一个程序的两个进程,在内存中,我们有该程序的两个副本还是只有一个副本?

显然,这可能取决于实现,但我在传统的 Unix 操作系统中询问。

最佳答案

Does the kernel actually copy the code to the virtual address space of both processes?

文本段将被映射(而不是复制)到每个进程的虚拟地址空间,但将引用相同的物理空间(因此内核在内存中只有一份文本副本)。

data 和 bss 段也将被映射到每个进程的虚拟地址空间,但这些将按进程创建。在进程启动时,来自可执行文件的 data 和 bss 段的数据将被映射/复制到进程的虚拟内存中;如果它不是从头开始复制的,那么一旦进程开始写入数据,该进程就会获得自己的私有(private)副本。

很明显,共享内存和 mmap 内存是在进程启动后处理的。共享内存总是在进程之间共享;这就是它存在的理由。 mmap 会发生什么取决于使用的标志,但它也经常被共享。

关于linux - 在 Unix/Linux 中运行两个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13533046/

相关文章:

php - 如何设置 PHP 以使用另一个邮件服务器?

c - 为什么 isnumber() 函数存在于某些 Unix 发行版中,而其他发行版中却没有?

Linux/Unix 手册页语法约定

linux - 如何在关闭 Ubuntu 时保持以太网卡处于开启状态?

c - C 中的语法错误

unix - 如何运行 tcsh shell 命令并有选择地忽略状态?

linux - 在 Linux 上连接和使用多个蓝牙加密狗?

c - 如何在 C 中从 stdin 进行非阻塞输入

将共享库编译成程序?

linux - 在 linux 中列出除少数文件之外的所有文件