我想知道在基于Linux的操作系统中执行程序(Say a C code image)时究竟发生了什么事件序列。
我事先知道的事情:
a)程序的可执行映像的存储器映射使用结构mm_struct。这个结构包含指向程序各个部分的vm_area_structs,比如代码,bss,数据等。我不知道这个内存映射是什么时候制作的?当程序由操作系统“运行”时,是否会生成?如果没有,那么究竟何时?
b)http://www.tldp.org/LDP/tlk/mm/memory.html提到因为只有图像的最开始被物理地拉入内存,它才会很快访问尚未存在于物理内存中的虚拟内存区域。现在据我所知,处理器只使用主内存中的页面;并且这些页面可能包含数据或代码。由于程序被执行执行,因此在某个物理页面中,此时的第一个代码指令也必须在内存中。此外,对应于此过程的页表必须存在于主存储器中。什么时候创建这个页面表,何时第一个代码指令页面加载到主内存中?