• 程序的运行过程:从代码到机器运行


    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 程序装入原型计算机?

     地址                  代码数据                                                     汇编代码           注释

     

  • 相关阅读:
    解密:腾讯如何打造一款实时对战手游
    哪是来的自尊心
    NODEJS 在Centos下面的自动启动
    nodejs的安装与配置
    基于Centos7+Nginx+Tomcat8的负载均衡服务器的搭建
    门店管理系统架构-(1)
    PHP 使用编码树,生成easyui中的tree样式
    Apache 打开网页的时候等待时间过长的解决方案
    Apache2.4开启GZIP功能
    Apache+Tomcat实现负载均衡
  • 原文地址:https://www.cnblogs.com/YXBLOGXYY/p/15966706.html
Copyright © 2020-2023  润新知