程序的运行过程:从代码到机器运行
Posted Love and Share
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了程序的运行过程:从代码到机器运行相关的知识,希望对你有一定的参考价值。
1)你知道程序是如何运行的吗?
1.1)Unix是怎么来的?
-
Ken Thompson 的妻子回娘家一个月,他在贝尔实验室无聊,就搞出了UNICS操作系统(unix的前身)。
-
当时可没有c语言,大佬是用B语言和汇编语言写出来的。
1.2)那UNIX是怎么来的呢?
-
牛人的朋友也是牛人,Thompson的朋友Dennis Ritchie也加入他的操作系统创造之旅,撸出了C语言。并且用C语言写了UNIX。同时也写出了影响深远的第一版“Hello World”。
#include "stdio.h"
int main(int argc, char const *argv[])
printf("Hello World!\\n");
return 0;
1.3)计算机硬件能直接运行这个C程序吗?
-
不能,需要翻译官C语言编译器,把这段代码编译成具体硬件平台的二进制代码(机器码)。再由具体操作系统建立进程,把这个二进制文件装进其进程的内存空间中,才能运行。
1.4)程序编译过程是怎样的?
-
使用命令:gcc HelloWorld.c -o HelloWorld 或者 gcc ./HelloWorld.c -o ./HelloWorld ,就可以编译这段代码。
1.5)GCC是什么玩意?
-
一个指挥官,他会去调用预处理程序、编译程序、汇编程序、链接程序来完成具体工作。
1.6)GCC工作的整个过程是怎样的?
-
gcc HelloWorld.c -E -o HelloWorld.i 预处理:加入头文件,替换宏。
-
gcc HelloWorld.c -S -c -o HelloWorld.s 编译:包含预处理,将 C 程序转换成汇编程序。
-
gcc HelloWorld.c -c -o HelloWorld.o 汇编:包含预处理和编译,将汇编程序转换成可链接的二进制程序。
-
gcc HelloWorld.c -o HelloWorld 链接:包含以上所有操作,将可链接的二进制程序和其它别的库链接在一起,形成可执行的程序文件。
2)程序是怎样装载执行的?
-
首先图灵老前辈提出了图灵机。
2.1)图灵机长什么样呢?
-
一条无限长的纸带,上面有无数个小格子,小格子中写有相关的信息。纸带上有一个读头,根据纸带小格子里的信息做相关的操作并能来回移动。
2.2)1+1=2在图灵机上是怎样运算的?
-
读头读到“+”之后,就依次移动读头两次并读取格子中的数据,最后读头计算把结果写入第二个数据的下一个格子里
3)图灵机是理想,不可能实现,那最终是谁让梦想成真呢?
-
冯诺依曼
3.1)冯诺依曼的思想是什么?
-
计算机用二进制数制系统和储存程序,并按照程序顺序执行。
3.2)根据冯诺依曼体系结构构成的计算机,必须具有哪些功能?
-
程序和数据要能装进计算机中。
-
记性要好,要能记住数据,中间结果,计算结果。
-
能够做运算还有简单的数据加工
-
控制程序的运行,并且我下达什么命令它能听的懂,并且叫其它部件干活。
-
按照要求将处理的数据结果显示给用户。
3.3)为了完成上述的功能,计算机必须具备哪些基本组成部件?
-
装数据和程序的输入设备;(键盘)
-
记住程序和数据的存储器;(磁盘)
-
完成数据加工处理的运算器;(CPU)
-
控制程序执行的控制器;(CPU)
-
显示处理结果的输出设备。(屏幕)
4)有了冯诺依曼的理论,我们怎么改造图灵机让它变得合理?
-
把图灵机的几个部件换成电子设备
5)怎样将 HelloWorld 程序装入原型计算机?
地址 代码数据 汇编代码 注释
以上是关于程序的运行过程:从代码到机器运行的主要内容,如果未能解决你的问题,请参考以下文章