計算機系統都有類似的硬件和系統軟件組件組成的,他們共同工做來運行應用程序.做爲一名程序猿但願深刻了解這些組件是如何工做的以及這些組件是如何影響程序的正確性和性能的,以此提升自身技能.徹底的理解了這本書內容,那麼咱們會步上‘大牛’的道路.這是這本書說的,認真學習作筆記,但願本身也能成爲大牛.linux
#include <stdio.h>
int main ()
{
printf("hello,world\n");
return 0;
}
複製代碼
這個程序的執行的生命週期: 源文件(源程序) -> 編輯器 -> 保存文本文件緩存
hello程序的生命週期是從一個高級C語言程序開始的,由於這種形式可以被人讀懂.然而,爲了在系統上運行hello.c程序,每一個C語句都必須被其餘程序轉化爲一系列的低級機器語言指令.而後這些指令按照一種稱爲可執行目標程序的格式打好包,並以二進制磁盤文件形式存放起來.目標程序也稱爲可執行目標文件.安全
在unix系統中,從源文件到目標文件過程是由編譯器驅動程序完成的:bash
linux > gcc -o hello hello.c
複製代碼
編譯系統的構成: 預處理器、編譯器、彙編器和連接器網絡
源程序:是一個由0和1組成的位(又稱爲比特)序列,8個位被組成一組,稱位字節.每一個字節表示程序中的某些文本字符(大部分的現代計算機系統都使用ASCII標準來表示文本字符) 併發
* 優化程序性能
* 理解連接時出現錯誤
* 避免安全漏洞
複製代碼
代碼執行到顯示過程編輯器
目標文件代碼和數據被加載到主存,處理器執行機器語言指令,將對應的字符串的字節從主存複製到寄存器文件,再從寄存器文件複製到顯示設備,最後顯示再屏幕上.性能
咱們知道這個hello.c程序的機器指令最初是存放再磁盤上,當程序加載時,他們被複制到主存;當處理器運行程序時,指令又從主存複製帶處理器.類似地,數據串"hello,world\n" 開始時再磁盤上,而後被複制到主存,最後從主存上覆制到顯示設備.從這個角度來看,這些複製就是開銷,減慢了程序「真正」的工做.所以,系統設計者的一個主要目標就是使這些複製操做盡量快地完成.學習
根據機械原理,較大的存儲設備要比較小的存儲設備運行得慢,而快速設備的造價遠高於同類的低俗設備. 優化
定義: 處理器與主存之間讀取速度差別.系統設計者採用了更小更快的存儲設備,稱爲高速緩存存儲器(cache memory,簡稱爲cache或高速緩存)
不只能夠運用高速緩存提升性能,同時也能夠利用存儲器層次結構的理解來提升程序性能
虛擬內容是對主存和磁盤I/O設備的抽象表示,進程則是對處理器、主存和I/O設備的抽象表示.
併發:指一個同時具備多個活動的系統; 並行:用來使一個系統運行更快
網絡提供了計算機系統之間通訊的手段.從特殊系統的角度來看,網絡就是一種I/O設備.