可执行文件为什么又叫映像文件image?——程序员的自我修养——链接、装载与库》笔记

“可执行文件在装载时实际上是被映射的虚拟空间” —— 《程序员的自我修养——链接、装载与库》

“可执行文件”与“执行该可执行文件进程的虚拟空间”存在着一种映射关系,这种映射关系只是保存在OS内部的一个数据结构。

举例子:身份证就是一种映射关系,我的身份证是“鹅城”给我发的,我并不需要真的在“鹅城”,但通过这个身份证的映射又真的能找到我。

直到启动运行,可执行文件中的指令、数据都没有被装入内存中。OS仅通过可执行文件头部的信息建立起“可执行文件”和进程虚存之间的映射关系。

  1. 假设开始运行了,CPU开始执行程序的入口地址了,然后发现入口地址这里的页面是个空页,于是“页错误”。
  2. 页错误——cpu把控制权给OS,此时“可执行文件”与“执行该可执行文件进程的虚拟空间”间建立的数据结构开始起作用,找到VMA,计算出在可执行文件中的偏移
  3. (MMU)然后在物理内存上分配一个物理页面。将进程中该虚拟页与物理页建立映射关系。
  4. 控制权返回给进程,进程从刚才页错误位置重新开始执行。
  5. 页错误不断产生,不断修复,程序也就运行起来了。

你可能感兴趣的:(计算机体系知识,c++,c语言)