程式抽象流程
在c語言中
1. c預處理器(cpp)擴充套件源**,插入所有用#include 命名指定的檔案,並擴充套件所有用#define 宣告指定的巨集。
2. 編譯器(ccl)產生兩個源**的彙編**,名字命名分別為p1.s
3. 彙編器(as)將彙編**轉化為二進位制目標**為p1.o(目標**是機器**的一種形式,包含所有指令的二進位制表示,但還沒有填入位址的全域性值)
4. 鏈結器(ld)將目標**檔案與實現庫函式(例如printf)的**合併,並產生最終的可執行**檔案p(可執行檔案是機器**的第二種形式,也就是處理器執行的**格式)
檔案:是對i/o的抽象
虛擬儲存器:是對程式儲存器的抽象
指令集結構:是對處理器的抽象
程序:是對乙個正在執行的程式的抽象
虛擬機器:是對整個計算機的抽象(作業系統、處理器、程式等)
虛擬機器程序
指令集結構
虛擬儲存器
檔案作業系統
處理器主存
i/o裝置
深入理解計算機系統 2
第一部分 程式結構和執行 我們對計算機系統的探索是從學習計算機本身開始的 它是由處理器和儲存器子系統組成 在核心部分 我們需要方法來表示基本資料型別 比如整數和實數運算的近似值 然後我們考慮機器級指令如何操作這樣的資料 以及編譯器如何將c程式翻譯成這樣的指令 接下來研究幾種實現處理器的方法 幫助我們...
深入理解計算機系統(2) 計算機系統漫遊
這一節的內容有些枯燥,很多內容都是文字描述。但是對於後續的學習是有幫助的,一些概念提前有個簡單的了解多少會有些幫助。這一節的學習內容都是一些概念和知識的簡要介紹,沒有過多地深入,旨在為後續學習做個鋪墊。上文最後部分提到,計算機內部執行程式時,用到了很多複製的操作,此處為鏈結。從程式設計師的角度來說,...
深入理解計算機系統
關鍵路徑是在迴圈的反覆執行中形成的資料相關鏈。迴圈展開是一種程式變換,通過增加每次迭代計算的元素的數量,減少迴圈的迭代次數。重新結合變換能夠減少計算中關鍵路徑上操作的數量,通過更好地利用功能單元的流水線能力得到更好的效能。浮點運算不保證是可結合的,通常迴圈展開和並行地累積在多個值中,是提高程式效能的...