本文研究的是一个经典的hello.c程序从产生到执行输出的过程。源代码是:
#include <stdio.h> int main() { printf("Hello, world.\n"); return 0; }
程序编译执行过程程序源代码经编译器编译链接后生成了操作系统可直接执行的可执行文件,该文件存储按照约定好的格式存储计算机可识别的低级机器指令,指示计算机如何运行。程序运行时,首先由程序加载器把程序从磁盘上加载到内存中,然后处理器从内存中获取要执行的指令,执行指令时,处理器将需要输出的信息从主存中经处理器显示到屏幕。
程序经程序加载器加载到内存过程中可能存在地址重定位,用以修正相对偏移地址,程序的内存结构图如下所示:
上述为本程序的进程的虚拟地址空间分布图,通用的进程虚拟地址空间分布如下所示:
程序执行的硬件环境一般是统一标准的,其计算机系统硬件结构图如下所示:
原文:http://blog.csdn.net/arbboter/article/details/43966411