普通文件
将可执行文件加载到内存中,进行的映射是普通文件的映射。比如.data段、.text段等。在cpu第一次访问相关页面的时候,发生缺页中断,才真正将磁盘中的页面缓存到物理内存中。
匿名文件
堆、栈、.bss都是匿名文件映射。虚拟页面并不和磁盘中的文件发生映射。CPU第一次引用一个区域内的匿名页面时,发生缺页中断,从物理内存中找一个空闲页面(也可能要找牺牲页,写回),用二进制零来覆盖页面,将这个虚拟页面标记为驻留在内存中。
这就是所谓的匿名文件是由内核创建的,包含的全是二进制零
对于.bss段,不占据实际的磁盘空间,只在段表中记录大小,在符号表中记录符号。当文件加载运行时,才分配空间以及初始化。这就是csapp中提到的如果区域比文件区大,就用零来填充这个区域的余下部分。