1.1 信息=位+上下文
系統(tǒng)中的信息,都是由一串比特表示的。
區(qū)分不同數(shù)據(jù)對象的唯一方法是讀到這些數(shù)據(jù)的上下文。比如,一個(gè)同樣的字節(jié)序列可能表示的是一個(gè)整數(shù)、浮點(diǎn)數(shù)字符串或機(jī)器指令。
1.2 程序被其他程序翻譯成不同的格式
說的是一個(gè)編譯系統(tǒng)的構(gòu)成。
Hello.c -> 1. 預(yù)處理器 -> hello.i -> 2.編譯器 -> hello.s -> 3. 匯編器 -> hello.o -> 4. 鏈接器 -> hello
- 讀取系統(tǒng)頭文件的內(nèi)容,直接插入到程序文本中
- 將文本文件hello.i 翻譯成匯編語言程序的文件hello.s
- 將hello.s 翻譯成機(jī)器語言指令,將指令打包成可重定位目標(biāo)的格式,保存到hello.o中
- 鏈接器負(fù)責(zé)處理標(biāo)準(zhǔn)預(yù)編譯好的文件合并到hello.o中。(如在程序中調(diào)用C庫中的printf函數(shù))
1.3 了解編譯系統(tǒng)如何工作的益處
- 優(yōu)化程序性能
- 理解鏈接時(shí)出現(xiàn)的錯(cuò)誤
- 避免安全漏洞
1.4 處理器讀并解析內(nèi)存中的指令
一. 系統(tǒng)硬件組成
- 總線
- 貫穿整個(gè)系統(tǒng)的一組電子管道。
- 被設(shè)計(jì)成傳送定長的字節(jié)塊,字節(jié)塊=字。
- 字長通常是4個(gè)字節(jié)(32位),或者8個(gè)字節(jié)(64位)
- I/O設(shè)備
- 鍵盤、鼠標(biāo)、顯示器、磁盤驅(qū)動(dòng)等都是IO設(shè)備
- 每個(gè)IO設(shè)備通過一個(gè)控制器或適配器和IO總線相連??刂破魇荌O設(shè)備本身或系統(tǒng)的主印刷電路板(即主板)上的芯片組。適配器是一塊插在主板插槽上的卡。
- 主存
- 物理上,主存由一組動(dòng)態(tài)隨機(jī)存取存儲器(DRAM)芯片組成。邏輯上,是一個(gè)線性字節(jié)數(shù)組,每個(gè)字節(jié)都有唯一地址(數(shù)組索引),地址從0開始 。
- 每條機(jī)器指令由不同數(shù)量的字節(jié)組成,如Linux x86-64機(jī)器上,short類型 2字節(jié),int float 4字節(jié),long double 8字節(jié)
- 處理器
- 中央處理單元(CPU),解釋或執(zhí)行存儲在主存中指令的引擎。
- 程序計(jì)數(shù)器(PC),大小只有一個(gè)字,任何時(shí)刻都指向主存中的某條機(jī)器語言指令。(即含有該條指令的地址)
- 寄存器文件(Register file),一個(gè)小的存儲設(shè)備,由一些單個(gè)字長的寄存器組成。
- 算術(shù)/邏輯單元(ALU),計(jì)算新的數(shù)據(jù)和地址值。
- 指令集架構(gòu)描述的是每條機(jī)器代碼指令的效果,微體系架構(gòu)描述的是處理器實(shí)際上如何實(shí)現(xiàn)。
二. 存儲器層次結(jié)構(gòu)

上一層的存儲器作為第一層存儲器的高速緩存。
三、操作系統(tǒng)管理硬件
- 兩個(gè)基本功能:
- 防止硬件被失控的應(yīng)用程序?yàn)E用。
- 向應(yīng)用程序提供簡單一致的機(jī)制來控制復(fù)雜而又通常大不相同的低級硬件設(shè)備。
- 通過幾個(gè)抽象概念來實(shí)現(xiàn)上述兩個(gè)功能:
- 文件是對IO設(shè)備的抽象表示
- 虛擬內(nèi)存是對主存和磁盤IO設(shè)備的抽象表示
- 進(jìn)程是對處理器、主存和IO設(shè)備的抽象表示
1、進(jìn)程
- 進(jìn)程是操作系統(tǒng)對一個(gè)正在運(yùn)行的程序的一種抽象。
- 并發(fā)執(zhí)行,是指一個(gè)進(jìn)程的指令和另一個(gè)進(jìn)程的指令交錯(cuò)執(zhí)行。實(shí)現(xiàn)這種交錯(cuò)執(zhí)行的機(jī)制稱為上下文切換。
- 上下文是指操作系統(tǒng)保持跟蹤進(jìn)程運(yùn)行所需的所有狀態(tài)信息。
- 內(nèi)核管理著進(jìn)程之間的轉(zhuǎn)換,內(nèi)核是操作系統(tǒng)代碼常駐主存的部分,它不是一個(gè)獨(dú)立進(jìn)程,它是系統(tǒng)管理全部進(jìn)程所用代碼和數(shù)據(jù)結(jié)構(gòu)的集合。
2、線程
- 一個(gè)進(jìn)程實(shí)際上由多個(gè)線程組成
- 每個(gè)線程運(yùn)行在進(jìn)程的上下文中,共享同樣的代碼和全局?jǐn)?shù)據(jù)
3、虛擬內(nèi)存
為每個(gè)進(jìn)程提供了一個(gè)假象,每個(gè)進(jìn)程都在獨(dú)占地使用主存,每個(gè)進(jìn)程看到的內(nèi)存都是一致的,稱為虛擬地址空間。
進(jìn)程虛擬地址空間如圖:

- 地址空間最上面的區(qū)域是保留給操作系統(tǒng)中代碼和數(shù)據(jù)的
- 底部區(qū)域存放用戶進(jìn)程定義的代碼和數(shù)據(jù)
- 地址是從下往上增大的
從低的區(qū)開始:
-
程序代碼和數(shù)據(jù)
代碼和數(shù)據(jù)區(qū)直接按照可執(zhí)行目標(biāo)文件的內(nèi)容進(jìn)行初始化。在進(jìn)程一開始運(yùn)行時(shí)就被指定了大小。
-
堆
可以在運(yùn)行時(shí)動(dòng)態(tài)地?cái)U(kuò)展和收縮(malloc 和free)
-
共享庫
在地址空間中部存放C標(biāo)準(zhǔn)庫和數(shù)學(xué)庫這樣的代碼和數(shù)據(jù)區(qū)域
-
棧
位于虛擬空間頂部,在調(diào)用一個(gè)函數(shù)時(shí),棧會增長,從一個(gè)函數(shù)返回時(shí),棧會收縮
-
內(nèi)核虛擬內(nèi)存
位于地址空間頂部,不允許應(yīng)用程序讀寫這個(gè)區(qū)域的內(nèi)容或者直接調(diào)用內(nèi)核代碼定義的函數(shù),程序要調(diào)用內(nèi)核來執(zhí)行這些操作。
虛擬內(nèi)存的基本思想是把一個(gè)進(jìn)程虛擬內(nèi)存的內(nèi)容存儲在磁盤上,然后用主存作為磁盤的高速緩存。
4、文件
- 文件是字節(jié)序列,每個(gè)IO設(shè)備都可以看成是文件
- 所有輸入輸出都是通過使用一小組稱為Unix I/O的系統(tǒng)函數(shù)調(diào)用讀寫文件來實(shí)現(xiàn)的。
四、系統(tǒng)間的網(wǎng)絡(luò)通信
-
網(wǎng)絡(luò)可視為一個(gè)IO設(shè)備。一個(gè)網(wǎng)絡(luò)通信的例子如圖:
image
五、重要主題
1、Amdahl定律
-
主要思想:當(dāng)對系統(tǒng)的某個(gè)部分加速時(shí),對系統(tǒng)整體性能的影響取決于該部分的重要性和加速程度。
image -
當(dāng)k趨于無窮時(shí),可選取系統(tǒng)的某一部分將其加速到某個(gè)點(diǎn),在這個(gè)點(diǎn)上,該部分花費(fèi)的時(shí)間可忽略不計(jì)。則此時(shí)
S = 1/(1-alpha)Amdahl定律描述了改善任何過程的一般原則
2、并發(fā)和并行
并發(fā)指一個(gè)同時(shí)具有多個(gè)活動(dòng)的系統(tǒng),并行指用并發(fā)使一個(gè)系統(tǒng)運(yùn)行得更快
-
線程級并發(fā)
一個(gè)處理器在多任務(wù)間切換,這種配置稱為單處理器系統(tǒng)
-
由單操作系統(tǒng)內(nèi)核控制的多處理器組成的系統(tǒng),稱為多處理器系統(tǒng)。多核處理器將多個(gè)CPU(稱為核)集成到一個(gè)集成電路芯片
多核處理器的組織結(jié)構(gòu)
image 超線程,即 同時(shí)多線程,允許一個(gè)CPU執(zhí)行多個(gè)控制流,涉及CPU某些硬件有多個(gè)備份,如程序計(jì)數(shù)器和寄存器文件,而其他硬件部分只有一份。超線程處理器可以在一個(gè)時(shí)鐘周期的基礎(chǔ)上決定執(zhí)行哪個(gè)線程,使CPU能更好利用處理資源。
多核處理器從兩方面提高系統(tǒng)性能:減少了在執(zhí)行多個(gè)任務(wù)時(shí)模擬并發(fā)的需要。可使程序運(yùn)行得更快。
-
指令級并行
- 可同時(shí)執(zhí)行多條指令的屬性稱為指令級并行
- 處理器達(dá)到比一個(gè)周期一條指令更快的并行速率,稱為超標(biāo)量處理器。
-
單指令、多數(shù)據(jù)并行
- 允許一條指令產(chǎn)生多個(gè)可并行執(zhí)行的操作,稱為單指令、多數(shù)據(jù),即SIMD并行
- 提供SIMD指令多是為了提高處理影像、聲音和視頻數(shù)據(jù)應(yīng)用的執(zhí)行速度。
3、計(jì)算機(jī)中的抽象
各種抽象:
- 處理器中,指令集架構(gòu)提供了對實(shí)際處理器硬件的抽象。
- 文件是對IO設(shè)備的抽象
- 虛擬內(nèi)存是對程序存儲器的抽象
- 進(jìn)程是對一個(gè)正在運(yùn)行程序的抽象
- 虛擬機(jī)提供對整個(gè)計(jì)算機(jī)的抽象,包括操作系統(tǒng)、處理器和程序。


