全書內容的粗略概括,對後續章節的內容在總體上有大致了解。
程式的翻譯過程及編譯系統
預處理階段
預處理器(cpp)
根據命令修改原始程式,得到以
.i 作為副檔名的另乙個程式。
編譯階段
編譯器(ccl)
將文字檔案
***.i
翻譯成文字檔案
***.s
,其中包含乙個組合語言程式。
彙編階段
彙編器(as)
將***.s
檔案翻譯成機器語言指令,將指令打包成
可重定位目標程式
格式,並儲存在二進位制檔案
***.o
中。鏈結階段
鏈結器(ld)
將程式中呼叫的庫函式的目標檔案合併到
***.o
檔案,得到
可執行目標檔案
***。
執行階段
可執行檔案被載入到記憶體中,由系統執行。
系統的硬體組成
匯流排貫穿於系統的一組電子管道,負責攜帶資訊位元組在各部件間傳遞。
i/o裝置
系統與外界的聯絡通道,每個裝置通過乙個控制器或介面卡與i/o匯流排連線。
主存一組動態隨機訪問儲存器(dram)晶元組成的臨時儲存裝置,用於存放程式執行時的程式及其處理的資料。
處理器執行儲存在主存中指令的引擎,包含程式計數器(pc)、暫存器檔案、算術邏輯單元(alu)。
快取記憶體
暫時儲存區域,存放處理器近期可能需要的資訊。用於解決處理器與主存之間讀取資料的速度和儲存容量的差距。
儲存器層次結構
在該結構中,從上至下,裝置訪問速度越來越慢,容量越來越大,每位元組造價越來便宜。暫存器檔案在層次結構中位於最頂部,記為l0。
主要思想:一層上的儲存器作為低一層儲存器的快取記憶體。
作業系統管理
程序作業系統對乙個正在執行的程式的一種抽象。
上下文:程序執行所需的所有狀態資訊。
上下文切換:作業系統儲存當前程序的上下文、恢復新程序的上下文,將控制權從當前程序傳遞到新程序。
執行緒組成程序的執行單元,執行在程序的上下文中,共享同樣的**和資料。
虛擬儲存器
將所有儲存器看成乙個一致的儲存器,抽象為一整個虛擬位址空間。
計算機系統的抽象
檔案:對i/o裝置的抽象。
虛擬儲存器:對程式儲存器的抽象《主存+i/o裝置》
程序:對正在執行的程式的抽象《處理器+主存+i/o裝置》
虛擬機器:對整個計算機的抽象《作業系統+處理器+主存+i/o裝置》
CSSAPP稀里糊塗的讀書筆記(五)優化程式效能
本章主要 如何使用幾種不同型別的程式優化技術,使程式執行的更快。編寫高效程式需要做到以下幾點 第一,我們必須選擇一組適當的演算法和資料結構。第二,我們必須編寫出編譯器能夠有效優化以轉換成高效可執行 的源 第三,針對處理運算量特別大的計算,將乙個任務分成多個部分,這些部分可以在多核和多處理器的某種組合...
CSSAPP稀里糊塗的讀書筆記(十)系統級I O
本章介紹unix i o 和標準i o的一般概念,具體的細節什麼的還是看書比較好。乙個linux 檔案就是乙個 m 個位元組的序列,所有的i o裝置都被模型化為檔案,而所有的輸入和輸出都被當作對響應檔案的讀和寫來執行。這種將裝置優雅地對映為檔案地方式,允許linux核心引出乙個簡單 低階地應用介面,...
閱讀任務 閱讀筆記 4
功能驅動的設計 1 構造總體模型 2 構造功能列表 3 制定開發計畫 4 功能設計階段 5 實現具體功能 軟體測試按目的分類 1 功能測試 2 非功能測試 軟體測試的各種方法 1 單元測試和 覆蓋率測試 2 構建驗證測試 3 驗收測試 4 探索式的測試 5 回歸測試 6 場景 整合 系統測試 7 夥...