系统执行hello程序时,发生了什么

hello 程序

#include <stdio.h>
int mian ()
{
	printf("hello world \n")
}

程序的生命周期

它被程序员创建,到系统上运行,输出简单的消息,然后终止。

信息就是位(标记)+上下文
1.源程序开始
程序员利用文本编辑器创建并保存的文本文件,文件名hello.c。源程序实际上是由值0和1组成位序列,8位一字节,每个字节表示文本中的一个字符(ASCII实际就是用唯一单字节大小的整数值来表示每个字符)
hello.c就是以字节序列的方式存储在文件中,每个字节都有一个整数值,这种字符构成的称为文本文件,其他文件都成为二进制文件。
系统中所有的信息都是由一串位表示的,区分数据对象的唯一方法就是我们读到这些数据时的上下文。不同上下文中,同样的字节序列可能表示一个整数、浮点数、字符串和机器指令。(数字的机器表示)

2.程序被翻译
开始是一个高级c语言程序(这种形式能被人读懂),然而为了在系统上运行,每条c语句必须转化成一系列低级机器语言指令。然后这些指令按照 ‘可执行目标程序(目标程序)’ 的格式打包好,以二进制磁盘文件存储起来。
源文件到目标文件的转化是由编译器完成的。这个过程可以分为四个阶段:(源程序)预处理(被修改的源程序(把头文件内容插入源程序))、编译器(汇编程序)、汇编器(可重定位目标文件(它的字节编码是机器语言指令))和链接器(把标准c库中的printf函数合并到hello中,得到目标文件,这个文件是可执行的)
3.程序被执行
我们将文件名输入称为外壳的应用程序中,系统运行该可执行文件,输出hello,world(外壳是一个命令行解释器,该命令行第一个单词不是一个内置命令,外壳就会假设是一个可执行文件,加载并运行它)
初始 时,外壳程序执行它的指令,等待我们输入一条指令,我们输入“./hello”后外壳程序将字符逐一读入寄存器,再把它放到存储器中
当我们敲下回车时,外壳程序就知道我们结束命令输入,然后外壳程序执行一系列指令来加载可执行hello文件,将hello从磁盘复制到主存(数据中包括最终输入的字符串“hello world \n”)
直接存储器存取(DMA),数据不经过处理器直接从磁盘到达主存
目标文件hello 被加载到主存,处理器就开始执行hello程序的main程序中的机器指令,这些指令将“hello world \n”字符串从主存复制到寄存器文件 ,再从寄存器文件复制到显示设备,最终显示在屏幕上。


猜你喜欢

转载自blog.csdn.net/weixin_42941557/article/details/86581660