计算机系统——hello,world的生命周期

1 //file: hello.c
2 
3 #include <stdio.h>
4 
5 int main() {
6     printf("hello,world!\n");
7     return 0;
8 }

从一个源程序开始:hello.c

  • 系统中所有信息都是由一串比特表示
  • 只由ASCII字符构成的文件称为文本文件,其他文件都称为二进制文件

源程序hello.c编译过程

编译系统

  • 编译过程分为4个阶段完成:预处理器、编译器、汇编器、连接器。

hello.c(源程序)

预处理:预处理器cpp修改源程序,将以字符#开头的代码#include<stdio.h>替换成系统头文件stdio的内容。

编译:编译器ccl 将hello.i 翻译成hello.s 汇编语言程序的文本文件。

  •  

汇编:汇编器as将hello.s 翻译成hello.o 机器语言指令(可重定位目标程序的格式)。

链接:hello程序调用了printf 函数,printf函数标准C库的一个函数,存在于printf.o的预编译好的目标文件中,连接器ld将其合并到hello.o程序中得到hello可执行文件。

 到此,编译系统的翻译过程大功告成。

执行hello可执行文件

运行hello程序的过程

加载

  • shell程序从键盘读取“./hello”命令后,将字符逐一读入寄存器,再把它存到内存中。

  • shell执行指令来加载hello可执行文件,将hello目标文件的代码和数据从磁盘复制到主存。(利用DMA直接存储器存取直接从磁盘到达主存)

运行:

  • hello代码和数据被加载到主存,处理器就开始执行hello程序的main中的机器指令。这些指令将“hello,world\n”字符串从主存复制到寄存器文件中,再从寄存器文件复制到显示设备,最终显示在屏幕上。

 

posted @ 2018-06-07 13:39  Ron_White  阅读(222)  评论(0编辑  收藏  举报