【深入理解计算机系统·笔记】hello程序的执行流程

上一篇笔记:【深入理解计算机系统·笔记】GCC编译过程理解

上一篇笔记按照GCC编译的流程示范了hello.c的编译过程,本篇笔记旨在帮助理解hello.c程序运行的过程。

在linux系统中执行hello程序需要在shell终端输入以下命令:

linux> ./hello

hello,world

linux>

shell是一个命令行解释器,当我们在shell终端输入命令后,shell 会根据第一个单词来判断输入是否为shell内置命令,如果不是shell则会将它假设为一个可执行文件的名字,根据名字加载并运行这个文件。

在这个简单的执行过程,我们需要用到以下硬件资源:

可见的硬件:

  1. 键盘:输入./hello时使用键盘输入字符
  2. 鼠标:使用鼠标定位或选择
  3. 显示器:将输入的字符及执行结果呈现到眼前
  4. 主机:幕后核心工作者

不可见的硬件(包含在主机中):

  1. CPU:解释或执行指令的引擎
  2. 控制器:控制流程和时序
  3. 总线:分为数据总线、控制总线、地址总线
  4. 内存:程序运行时临时存储器
  5. 磁盘:数据和程序长期存储器
  6. 寄存器:临时数据临时存储

 

hello程序执行的整个过程很短,但实际做了很多动作,每个动作中又都是利用以上硬件设备来完成的,那么它又是如何调配利用以上硬件资源的呢?

初始时,当我们在键盘输入字符串“./hello”后,shell程序将字符逐一读入寄存器,再把它存放到内存中,用户输入完成按下回车键后,shell将执行一系列的指令来加载可执行的hello文件,将hello目标文件从磁盘读入内存,当hello中的代码和数据都被加载到内存后,处理器开始执行hello程序的main函数程序中的机器语言指令,这些指令会将“hello,world\n”字符串中的字节流从内存复制到寄存器,然后再从寄存器复制到显示设备,最终显示到屏幕上。流程图如下:

 

那么问题又来了,shell是如何调配这些硬件的呢?shell又是如何在执行自己的指令时切换到执行hello程序的指令呢?这就涉及到计算机中几个关键性的概念:操作系统、进程、线程、并发等核心概念,这些概念都需要深入理解,下一篇笔记再进行详细记录。

发布了12 篇原创文章 · 获赞 26 · 访问量 3462

猜你喜欢

转载自blog.csdn.net/baidu_23747517/article/details/103111437