• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            XY

            沒有任何借口
            posts - 9, comments - 31, trackbacks - 0, articles - 0
              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

                                                                                                   程序是如何運行的

            作為一個程序員,已不知編了多少行代碼。但若問我程序是如何在計算機中運行的,我怕只有張口結舌。書中第一章就給了我們相關的答案。

            首先,看如下最簡單的C語言Helloword的代碼

            1#include <stdio.h>
            2
            3int main()
            4{
            5   printf("hello, world\n");
            6}
            上面的代碼我們保存在helloworld.c文件中。其本質實際上是由0、1的比特(位)序列構成的。8位為一個字節。每個字節對應某個文本字符。不少系統用ASCII來表示文本字符。實際是由一個唯一的同字節大小的整數值來表示每個字符。下面給出helloworld.c的ASCII表示。
            #      i         n        c       l       u       d      e     <sp>   <     s     t        d        i       o      .
            35   105    110    99    108  117  100   101   32     60  115  116   100   105  111  46
            h       >      \n       \n      i        n      t     <sp>   m      a      i       n       (       )      \n     {
            104  62     10     10     105  110  116   32    109    97   105  110   40    41   10   123
            \n     <sp> <sp> <sp> <sp>   p      r      i       n        t       f      (       "      h       e       l
            10    32     32     32     32    112  114  105  110    116  102  40    34   104   101   108
            l       o       ,        <sp>  w      o      r       l      d        \       n       "       )       ;       \n      }
            108 111    44     32     119  111  114  108  100    92    110  34    41   59      10     125
            以此類推,在計算機系統中,任何介質中的數據都是比特序列。把他們區分成不同的數據對象,是通過數據對象的上下文來確定的。

            程序編譯
            程序的編譯過程如下圖所示,分為預處理、編譯、匯編、鏈接等幾個階段。

            預處理:預處理相當于根據預處理命令組裝成新的C程序,不過常以i為擴展名。
            編譯:    將得到的i文件翻譯成匯編代碼。s文件。
            匯編:    將匯編文件翻譯成機器指令,并打包成可重定位目標程序的O文件。該文件是二進制文件,字節編碼是機器指令。
            鏈接:    將引用的其他O文件并入到我們程序所在的o文件中,處理得到最終的可執行文件。

            硬件組成:
            從下圖中看出一個典型的系統由總線、Cpu、I/O設備、主存等構成。

            CPU: Central Processing Unit,  ALU: Arithmetic/Logic Unit,  PC: Program counter,  USB: Universal Serial Bus.

            程序執行
            我們已經討論了可執行文件產生的過程。接下來討論哈可執行文件執行的過程。從上面途中的彩色線條可以清晰的看到這個過程,我們簡單的把它分為6步。
            1.shell程序執行指令,等待用戶輸入,這里我們輸入“hello”。
            2.shell程序將字符逐一讀到寄存器中
            3.再從寄存器取出放到主存中
            4.當我們敲入回車時,shell程序得知輸入結束,將hello目標文件的代碼和數據拷貝到主存,從而加載hello文件數據包括最終被輸出的字符串“hello,world\n”.利用了DMA訪問技術,數據可不經CPU直接到主存
            5.執行主程序中的機器語言指令,將“hello,world\n”串的字節從主存拷貝到寄存器堆。
            6.從寄存器中把文件拷貝到顯示設備。

            Feedback

            # re: 深入理解計算機系統1_程序是如何運行的  回復  更多評論   

            2008-07-05 17:53 by passerby
            頂。
            是本好書,只是現在還沒時間去看。

            # re: 深入理解計算機系統1_程序是如何運行的  回復  更多評論   

            2008-07-05 23:33 by 訪客
            你這個基本上就是摘抄的

            前3章看著比較吃不消

            特別是第三章 y86架構的研究與實現

            剩下的直到unix io 網絡編程 多線程之前 是本書的精華部分 值得通讀

            # re: 深入理解計算機系統1_程序是如何運行的  回復  更多評論   

            2008-07-05 23:51 by 路緣
            @訪客
            第一章內容很少,也沒有其他自己的體會。就把自己認為主要的東西羅列一下。
            第二章信息表示和處理,以及第三章C的匯編表示,就肯定會用自己的理解來描述。因為我在閱讀時,確實很多地方都是反復閱讀,才明白了其中的道理。
            后面我還會繼續相關的隨筆,會加入自己是如何從不明白到明白這個過程的描述。

            其次感覺這本書習題也編得很好,看書看不明白,把題做了過后,感覺就明白了。

            可能我以后若是歸納總結書上的內容,注明讀書筆記可能會好些。因為就算是寫理解,也是來源書上的觀點。

            # re: 深入理解計算機系統1_程序是如何運行的  回復  更多評論   

            2008-07-06 11:19 by ZelluX
            @訪客
            y86是第四章
            這本書是我們專業課的教材,上一年,除了第九章都講了,收獲很大

            # re: 深入理解計算機系統1_程序是如何運行的  回復  更多評論   

            2008-07-08 22:48 by 劉遠清
            這本書確實很牛逼!那天看了你的文章就去網上找了電子書來看,剛看完了一章,講的夠清楚,值得一看!

            # re: 深入理解計算機系統1_程序是如何運行的  回復  更多評論   

            2008-07-10 23:17 by 夢在天涯
            看了你的第一張就知道是好書了,謝謝,以前沒有看過啊,要是有的化,給大家個地址,大家保證更高興啊!

            # re: 深入理解計算機系統1_程序是如何運行的  回復  更多評論   

            2008-07-10 23:23 by 夢在天涯
            能不能說下,書的全名,說是chinapub的連接!謝謝先!

            # re: 深入理解計算機系統1_程序是如何運行的  回復  更多評論   

            2008-07-11 12:55 by 路緣
            @夢在天涯
            我還以為大家都知道這本書呢。全名就是我寫的啊,
            英文名是《Computer Systems A Programmer’s Perspective》
            不過電子版我只有英文版的。這本書覺得值得買本紙版的來珍藏。
            本來說共享個電子版的鏈接,但老是出問題上傳不上去。很好找的。
            http://www.programsalon.com/ 像這個網站上就有。

            # re: 深入理解計算機系統1_程序是如何運行的  回復  更多評論   

            2008-07-14 12:19 by larryliuqing
            網上有啊!上次我看了這篇文章才到網上下的!

            # re: 深入理解計算機系統1_程序是如何運行的  回復  更多評論   

            2009-02-26 09:32 by 戈多
            樓主有沒有這本書的家庭作業答案啊,我小菜一個,很多題目做的是似是而非。

            # re: 深入理解計算機系統1_程序是如何運行的  回復  更多評論   

            2009-10-06 01:33 by dads
            一般不看這樣的書,細細松松的,還是把大學里的那些書看好吧,
            比如數字電路,計算機原理,編譯原理
            這些充分理解了再來看這篇文章,那簡直是高屋建瓴;

            # re: 深入理解計算機系統1_程序是如何運行的  回復  更多評論   

            2011-09-14 09:24 by 圖—圖—
            抄襲
            久久精品青青草原伊人| 久久无码人妻精品一区二区三区| 久久久久综合国产欧美一区二区| 亚洲国产成人久久精品影视| 久久久久久久亚洲精品| 久久九九兔免费精品6| 少妇人妻88久久中文字幕| 久久99精品久久久久久动态图| 俺来也俺去啦久久综合网| 久久精品成人免费观看97| 色欲综合久久躁天天躁蜜桃| 日本久久久精品中文字幕| 久久久久亚洲av综合波多野结衣| 国产精品毛片久久久久久久| 亚洲欧美成人久久综合中文网| 国内精品久久久久影院一蜜桃| 久久精品国产一区二区 | 国产一区二区三区久久精品| 久久国产精品免费一区| 久久久国产乱子伦精品作者| 久久久久亚洲精品中文字幕 | 久久国产香蕉视频| 久久久久99精品成人片欧美| 久久久黄片| 99久久99这里只有免费的精品| 久久精品国产亚洲av瑜伽| 久久99免费视频| 久久99亚洲网美利坚合众国| 久久久久久久97| 久久亚洲sm情趣捆绑调教| 久久性精品| 亚洲午夜久久久| 久久久久久无码国产精品中文字幕 | 国产成人精品综合久久久久 | 麻豆一区二区99久久久久| 九九精品久久久久久噜噜| 久久久久99精品成人片| 久久久久国色AV免费观看| 国产激情久久久久影院老熟女免费 | 伊人久久大香线焦综合四虎 | 亚洲欧美日韩精品久久亚洲区|