介绍
上一篇a.out(hello,world程序)执行之后发生了什么?这次通过系统硬件和操作做粗略的描述,这样对我们也是有一些帮助的。
如果中间若有误,请不吝赐教。
从键盘上读取a.out命令
当我们打开我们的终端的时候,shell程序会执行它的指令,等待我们的输入。
当我们在键盘上输入"a.out",敲回车时,shell就知道我们结束了命令的输入。然后shell的指令就会逐一读取目标文件a.out的代码和数据到寄存器,再把代码和数据拷贝到主存储器。


科普普及:
1、主存用来存放指令和指令处理的数据。
2、处理器(CPU的简称)是解释(或执行)存储在主存中指令的引擎。在任何一个时间点上,CPU中的PC(程序计数器)都指向主存中的某条机器语言指令。
3、有一种DMA(直接存储器存取)技术,数据可以不通过处理器而直接从磁盘到达主存储器。
从存储器写输出串到显示器
1、 一旦a.out目标文件中的代码和数据被加载到了主存储器,CPU就开始执行main.c程序的主程序中机器语言指令。
2、 这些指令将"hello,world\n"串中的字节从主存储器中拷贝到寄存器文件。
3、 再从寄存器中文件拷贝到显示设备,最终显示在屏幕上。
流程图:

总结
从两个角度分析上面的问题:
机器指令:最初是在磁盘上——》(程序加载时)拷贝到主存——》(处理器运行指令时)从主存拷贝到处理器。
数据串:最初是在磁盘上——》拷贝到主存——》显示设备。
参考文献:
《深入理解计算机系统》
推荐

喜欢编程
分类:
C Language
标签:
C Language
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架