A few more comments: - AMAP_SHARED itself is a fine concept; it's used by shared memory.
sys/kern/sysv_shm.c: 452 error = uvm_map(&vm->vm_map, &attach_va, size, uobj, 0, 0, 453 UVM_MAPFLAG(prot, prot, UVM_INH_SHARE, UVM_ADV_RANDOM, flags)); (Note UVM_INH_SHARE == MAP_INHERIT_SHARE). I guess MAP_INHERIT_SHARE was added because adding it was easy after shared amap was implemented for shared memory? - For highly tuned, XIP'ed systems, programs should be designed to avoid .data, because they're COW'ed to page cache sooner or later.