第一章 計算機系統漫遊程序員
1.1信息就是位+上下文數組
只由ASCII字符構成的文件稱爲文本文件,除此以外的文件被稱爲二進制文件。緩存
一樣的字節序列所處上下文不一樣,所表明的意思也不一樣,好比在整數 浮點數 計算機指令,一樣的一個字節序列(11111111)意義顯然是不一樣的。安全
由此,咱們可知信息=位(或者字節序列)+上下文。網絡
1.2程序被其餘程序翻譯成不一樣的格式架構
上圖描述了程序員所編寫的C源碼是如何經過一系列程序的運做變爲計算機可識別的二進制可執行程序。併發
1.3瞭解編譯系統如何工做是大有益處的性能
益處:優化
優化程序性能。編譯器將源碼轉化成機器碼,一樣的邏輯不一樣條件下生成的機器碼不一樣,從而其性能也會存在差別。操作系統
理解連接時出現的錯誤。
避免安全漏洞。
1.4 處理器讀並解釋存儲在內存中的指令
1.4.1系統的硬件組成
總線:一組鏈接各個部件並傳輸信息的電子管道,單次傳遞信息的信息大小成爲字(word)。字的大小爲多少字節,每一個系統都不一樣。
I/O設備:輸入輸出設備,是系統與外界的鏈接通道,即與外界交換信息的場所。I/O設備經過適配器或控制器與IO總線相連,從而接入系統。
適配器是主板上芯片組。控制器是一塊插在主板插槽上的卡。
主存:即內存。存儲程序運行時所需的數據以及指令。從物理上講,內存是指一組動態隨機存取存儲芯片(DRAM),從邏輯上將是一條線性的字節數組。
CPU:是解釋執行存儲在內存中的指令的引擎。CPU核心是一個存儲一個字大小的存儲器,稱爲程序計數器,老是指向內存中的一條指令。處理器處理程序計數器所指向的指令。處理器指令集描述的是每條機器碼指令的效果,處理器微架構描述的是處理器其實是如何實現的。
1.4.2 運行hello程序
略。
1.5高速緩存相當重要
因爲信息在各個部件中消耗大量時間,採用高速讀寫的存儲器來緩存信息,以下降讀取信息的時間消耗,但因爲高速緩存成本太高,固將高速緩存用在最須要下降時間消耗的CPU和主存之間的讀取上。多級緩存更好的權衡了成本與性能。利用高速緩存來提升程序的性能。
1.6存儲設備造成的層級結構
1.7 操做系統管理硬件
操做系統經過進程/虛擬內存/文件三個抽象概念 對硬件進行管理,優勢:一是防止失控的應用程序對硬件濫用,二是嚮應用程序提供簡單一致的機制來控制複雜而一般大不相同的低級硬件
1.7.1 進程
操做系統對應用程序的抽象就是進程,讓每一個程序看起來都是獨佔硬件,實際上每一個進程的指令是交錯運行的,也就是並行。這種交錯運行的機制叫上下文切換。操做系統保持跟蹤進程運行所需的全部狀態信息,這種狀態被稱爲上下文。一個處理器同一時間只能處理一個進程,當執行另外進程時會保存當前進程的上下文,而後切換的另外一進程的上下文,傳遞控制權過去。另外一進程從上次中止的地方開始執行。進程轉換是經過操做系統內核管理的。
1.7.2 線程
一個進程可由多個線程的執行單元組成,每一個線程運行在進程的上下文中,並共享一樣的代碼和全局數據。
1.7.3 虛擬內存
虛擬內存是一個抽象的概念,爲每一個進程模擬了完整的內存空間,每一個進程看到的內存都是一致的,這稱爲虛擬地址空間。
1.7.4 文件
實際上就是字節序列。
1.8系統之間利用網絡通信
1.9重要主題
1.9.1 Amdahl定律
a爲系統某部分用時佔系統總用時的比,k爲該部分提高性能的比例,S爲整個系統提高的性能比
1.9.2 併發和並行
線程級併發:進程中採用多個線程進行併發處理,多核操做系統用超線程技術讓cpu在線程等待時去執行另外的線程。
指令級並行:處理器同時執行多條指令。處理器一個時鐘週期執行超過一條指令,就成爲超標量處理器。
單指令多數據並行:一條指令能夠產生多個能夠並行的操做
1.9.3 計算機系統中抽象的重要性
抽象讓咱們忽略具體解決方案,關注執行結果,下降對事物理解的複雜性。