深入理解计算机系统(1.2)---hello world的程序是如何运行的

发布时间:2013-09-20 18:04:00作者:左潇龙阅读(1867 )评论(3)

               在写本章的内容之前,LZ先做个小广告。其实也不算是什么广告,就是LZ为了和各位猿友交流方便,另外也确实有个别猿友留言或者在博客里发短消息给LZ要联系方式。因此LZ斗胆建立了一个有关《深入理解计算机系统》这本书的交流群,当然了,如果有哪位猿友有其它方面的问题,也可以在群里提出,如果LZ有能力帮忙的话会尽量帮助各位,倘若LZ能力不足,或许也会有其它猿友可以解答。

               群号在文章里就不贴了,有兴趣的猿友可以看右侧公告栏,欢迎各位大神、大牛、小牛、菜鸟踊跃加入。

     

    hello world的执行

     

               我们以linux系统为例,当我们执行一个简单的打印字符串的C程序时,我们需要在命令行输入./hello以及回车去执行该程序。在整个执行过程中,计算机主要做了三件事,或者说经历了三个阶段来完成程序的运行。

     

    一、linux的外壳扫描用户输入的字符

     

               当我们在键盘输入./hello时,linux的外壳程序(也就是命令行)会扫描我们输入的字符,将这些字符一一读入到寄存器当中,然后再一一放入主存。换句话说,./hello这几个字符是经过了CPU中的寄存器从而到达了主存。下面LZ将这一过程的图示画出来。

     

    二、加载hello文件的代码以及数据到主存

     

                这一过程的触发是在我们按下回车的那一刻,此时系统会将存储在磁盘上的hello文件加载到主存,而此过程会利用一种叫做存储器存取的技术,使得数据不通过寄存器直接到达主存。下图是这一过程的图示。

     

     

    三、根据主存中代码的指令执行程序

     

                在代码以及程序所需要的数据加载到主存后,CPU就开始从main函数的起始位置,依次执行代码中的指令。由于我们的代码只是简单的输出“hello world”这样的字符串,因此系统只是将这个字符串依次加载到寄存器,然后传输到显示器终端显示。这个过程如下图。

     

    本章小结

     

              本章只是简单的介绍了一下hello程序的执行过程,我们可以简单的这么理解,hello程序的执行,其实就是将数据和代码加载到主存,并由CPU从主存获取指令从而执行的过程。


    版权声明:本文版权归作者(左潇龙)所有,欢迎转载。但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

    5
    精彩
    0
    感动
    1
    搞笑
    0
    开心
    0
    愤怒
    0
    无聊
    1
    灌水
    0
    惊讶
#1楼     时间:2013-09-20 18:09:00      来源:zkqian
你可以畫畫操作系統怎樣處理的這部分,a.out是怎樣加載的?之後是怎樣運行的?運行的時候又會發聲什麼?
#2楼     时间:2013-09-20 18:20:00      来源:左潇龙
@ zkqian
施主所说的,以贫僧的理解,就是二三阶段的具体实现细节了,这个在后面会逐渐浮现出来的,前面几章都是概述部分。施主可以跟着贫僧一起去逐渐了解这个过程,或者如果施主已经了然于胸的话,也不妨分享出来,让贫僧也借鉴一二。
#3楼     时间:2017-03-21 08:56:00      来源:岁月漫步
神一样的文章
发表评论

站内搜索

最新评论