程序猿理论系列整理:程序的执行过程
程序的生成
源文件 | 预处理 | 编译 | 汇编 | 链接 |
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-》物理地址-》内存中的物理地址