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