程序猿理论系列整理:程序的执行过程

程序猿理论系列整理:程序的执行过程

程序的生成

源文件 预处理 编译 汇编 链接
hello.c hello.i hello.s hello.o hello.out

 

程序的存储

二进制的形式,存储在机械硬盘上,即一连串01010101,硬盘用凹凸的方式表示01,这样就通过物理的方式表示出程序。

原理看这里:程序猿理论系列整理:计算机基础硬件

程序的载入

运行命令 ./hello.out

操作系统(OS)初始化资源(堆、栈、全局变量等)

操作系统(OS)生成进程(管理单元)和主线程(运行单元)

找到程序的起始地址(入口)

调用程序的main函数并返回

表现为

程序从硬盘被CPU载入到内存,

操作控制器产生取指令操作,

程序计数器找到程序入口的指令A,

指令A被存储到指令寄存器中然后才能被执行,

指令A由操作码和地址码组成,指令编码器负责译码分析,然后把具体的操作发送给操作控制器,

操作控制器产生操作控制信号,完成执行指令。

即:取指令-》分析指令-》执行指令,这构成了CPU的一个基本周期。

取地址

CPU接触的地址都是虚拟逻辑地址,需要转换为物理地址,这就需要有个转换器:MMU(内存管理单元)。

当需要将虚拟地址转换为物理地址时,首先搜索TLB。如果找到匹配(TLB命中),则返回物理地址并继续存储器访问。然而,如果没有匹配(称为TLB未命中),则存储器管理单元或操作系统TLB未命中处理器通常会查找页表中的地址映射以查看是否存在映射(页面遍历)。过程如下图:

程序猿理论系列整理:程序的执行过程

程序猿理论系列整理:程序的执行过程

TLB是page table的缓存,加速查找的过程,TLB是在寄存器中,page table是在内存中。

常规的流程是:

虚拟地址-》内存中的page table-》物理地址-》内存中的物理地址,要访问内存2次。

加速的流程是:

虚拟地址-》TLB-》物理地址-》内存中的物理地址