copy-on-write article on wikipedia表示写入时复制通常是通过对页面进行只读访问来实现的,因此在编写页面时,页面错误陷阱处理程序可以为其映射唯一的物理内存页面。所以我的问题是为什么用户级应用程序在发生此类页面错误时没有收到SIGSEGV信号?毕竟,wikipedia article on SIGSEGV表示SIGSEGV是在进行无效内存引用或分段错误时发送给进程的信号。因此,在这种情况下,这是写时复制的情况,为什么没有SIGSEGV被发送到进程。
答案 0 :(得分:3)
我知道这已经有一段时间了,但是我想扩展一下Alexey的答案。
写时复制(我假设你所说的是虚拟内存,而不是文件系统)通常是这样的:
每次发生分段错误时都会生成页面错误,但大多数页面错误都由内核处理,并且永远不会传递给导致它们成为段错误的进程。可能会在较低级别处理页面错误的原因有很多,包括:
kvm
这样的操作系统级虚拟化技术,其中写入内存映射设备在来宾操作系统内存中的位置实际上应该写入主机操作系统中的文件或显示器。答案 1 :(得分:1)
COW的主要思想是COW对用户进程完全透明,就好像它完全拥有内存而没有任何共享。