第 1 章 計算機系統漫遊
這一章經過研究「hello,world」這個簡單程序的生命週期,介紹計算機系統的主要概念和主題算法
- 1.1 信息就是位+上下文
計算機系統中的一切數據都是由一串比特表示的,區分不一樣數據對象的惟一方法是咱們讀到這些數據對象時的上下文
C語言與Unix操做系統關係密切,是爲實踐目的設計的1.2 程序被其餘程序翻譯成不一樣的格式
如婁老師上課所講(以Linux中gcc爲例):
hello.c—>hello.i—>hello.s—>hello.o—>helloshellgcc -E hello.c -o hello.i /*預處理生成編譯文件*/ gcc -S hello.i -o hello.s /*編譯生成彙編語言程序*/ gcc -C hello.s -o hello.o /*彙編生成可重定位目標程序*/ gcc hello.o -o hello /*連接生成可執行目標文件*/1.3 瞭解編譯系統如何工做是大有益處的
優化程序性能
理解連接時出現的錯誤
避免安全漏洞緩存1.4 處理器讀並解釋存儲在存儲器中的指令安全
- 1.4.1 系統的硬件組成
典型的硬件組織:總線、I/O設備、主存、處理器- 1.4.2 運行hello程序
- 1.5 高速緩存相當重要
cache及調頁算法對程序性能有極大影響- 1.6 存儲設備造成層次結構
上一層的存儲器做爲低一層存儲器的高速緩存1.7 操做系統管理硬件
防止硬件被失控的應用程序濫用
嚮應用程序提供簡單一致的機制來控制複雜而又一般大不相同的低級硬件設備服務器
- 1.7.1 進程
進程是OS對正在運行的程序的抽象
上下文切換是保存當前進程的上下文,恢復新進程的上下文- 1.7.2 線程
進程能夠由多個線程組成,線程不獨自佔有資源,更易被共享- 1.7.3 虛擬內存
對每一個進程都虛擬所有的內存資源,經過調頁算法完成磁盤到主存的交換- 1.7.4 文件
文件就是字節序列1.8 系統之間利用網絡通訊
使用telnet服務器在遠程主機上運行hello程序網絡
用戶在鍵盤上輸入hello多線程
- 客戶端向telnet服務器發送字符串「hello」
- 服務器向shell發送字符串「hello」,shell運行hello程序並將輸出發送給telnet服務器
- telnet服務器向客戶端發送輸出的字符串「hello world\n」
客戶端在顯示器上打印字符串「hello world\n」併發
1.9 重要主題性能
- 1.9.1 Amdahl定律
加速比爲
\[ S = 1/((1-a)+a/k) \]- 1.9.2 併發和並行
併發指同一時刻:線程級併發指多處理器或超線程(同時多線程)
並行指同時間段:指令級並行指流水線或超標量處理器- 1.9.3 計算機系統中抽象的重要性 文件是對I/O設備的抽象 虛擬內存是對程序存儲器的抽象 進程是對一個正在運行的程序的抽象 虛擬機是對整個計算機系統的抽象- ...