“C語言” 讀書札記之[再續(xù)編譯執(zhí)行]
介紹
上一篇a.out(hello,world程序)執(zhí)行之后發(fā)生了什么?這次通過系統(tǒng)硬件和操作做粗略的描述,這樣對我們也是有一些幫助的。
如果中間若有誤,請不吝賜教。
從鍵盤上讀取a.out命令
當我們打開我們的終端的時候,shell程序會執(zhí)行它的指令,等待我們的輸入。
當我們在鍵盤上輸入"a.out",敲回車時,shell就知道我們結束了命令的輸入。然后shell的指令就會逐一讀取目標文件a.out的代碼和數(shù)據(jù)到寄存器,再把代碼和數(shù)據(jù)拷貝到主存儲器。
流程圖如下
那么在硬件中是如何奔跑的呢?
科普普及:
1、主存用來存放指令和指令處理的數(shù)據(jù)。
2、處理器(CPU的簡稱)是解釋(或執(zhí)行)存儲在主存中指令的引擎。在任何一個時間點上,CPU中的PC(程序計數(shù)器)都指向主存中的某條機器語言指令。
3、有一種DMA(直接存儲器存?。┘夹g,數(shù)據(jù)可以不通過處理器而直接從磁盤到達主存儲器。
從存儲器寫輸出串到顯示器
1、 一旦a.out目標文件中的代碼和數(shù)據(jù)被加載到了主存儲器,CPU就開始執(zhí)行main.c程序的主程序中機器語言指令。
2、 這些指令將"hello,world\n"串中的字節(jié)從主存儲器中拷貝到寄存器文件。
3、 再從寄存器中文件拷貝到顯示設備,最終顯示在屏幕上。
流程圖:
總結
從兩個角度分析上面的問題:
機器指令:最初是在磁盤上——》(程序加載時)拷貝到主存——》(處理器運行指令時)從主存拷貝到處理器。
數(shù)據(jù)串:最初是在磁盤上——》拷貝到主存——》顯示設備。
原文鏈接:http://www.cnblogs.com/baochuan/archive/2012/06/25/2559766.html