這一章沒有解決的問題 python
目錄與重點內容:shell
編譯系統數組
高速緩存器網絡
操做系統數據結構
計算機系統的抽象多線程
Amdahl加速比定律公式架構
併發與並行併發
位,字節,字符,文本,ASCII, 文本文件,二級制文件,機器指令,可執行目標程序,編譯器GCC(缺省),編譯系統,預處理器,編譯器,彙編器,連接,總線,I/O,主板,適配器,控制器,主存,DRAM,邏輯,處理器,程序計數器,寄存器,ALU,加載,存儲,操做,跳轉,指令集,高速緩存,操做系統,抽象,進程,多核,併發,上下文切換,內核,系統調用,控制權,線程,虛擬內存,虛擬地址空間,堆(缺省),共享庫(缺省),用戶棧(缺省),內核虛擬內存(缺省),加速比,Amdahl定律,並行,併發,線程級併發,多核,超線程,指令集併發,SIMD並行,虛擬機函數
#include <stdio.h> int main(){ printf("hello, world\n"); return 0; }
編譯hello程序的過程
(1) 預處理階段:插入頭文件(2) 編譯階段:編譯器翻譯,包含main函數定義的彙編語言程序
main: subq $8, %rsp #一條低級機器語言指令 movl $.LCO, %edi call puts movl $0, %eax addq $8, %rsp ret
(3) 彙編階段:彙編器翻譯成機器語言指令,打包成可重定位目標程序(relocatable object program), 保存爲二進制文件 (4) 連接階段:連接器合併調用的printf函數,獲得可執行目標文件
shell: 命令行解釋器;運行hello程序,\(> ./hello\)
系統硬件組成
總線:總線傳送定長的字節塊(字,word),字長是基本的系統參數:32位系統是4個字節,64位系統是8個字節
I/O設備:每一個I/O設備都經過一個控制器(設備/系統主板上的芯片組)/適配器(插在設備/系統主板插槽上的卡)與I/0總線相連
主存:由一組動態隨機存取存儲器(DRAM)芯片組成。邏輯上,是一個線性字節數組。
處理器 (CPU):
模型 - 指令集架構。
下一條指令不必定和內存中剛執行的指令相鄰。
4.1 核心 - 大小爲一個字的寄存器,成爲程序計數器(PC),PC指向主存中某條機器語言指令(的地址)。
4.2 寄存器文件(register file): 一個小的存儲設備,每一個寄存器單個字長
4.3 算數/邏輯單元 (ALU): 計算新的數據和地址值
4.4 CPU在PC中指令要求下執行的操做:
加載 - 主存 -> 寄存器;
存儲 - 寄存器到主存;
操做 - 兩個寄存器 -> ALU運算 -> 一個寄存器;
跳轉 - 指令複製到PC
加快從主存中複製到寄存器的速度。
多級高速緩存:L1, L2, (L3), ...
能夠利用高速緩存將程序的性能提升一個數量級
操做系統兩個基本功能:
(1)防止硬件被失控的應用程序濫用
(2)嚮應用程序提供簡單一致的機制來控制複雜的低級硬件設備
所以,操做系統有如下抽象:
線程
一個進程由多個線程執行單元組成。線程運行在進程的上下文中(?),共享代碼和全局數據。
虛擬內存
一個抽象概念。進程的虛擬地址空間以下(每一個進程看到的內存都是一致的):
地址由下往上增大。
簡而言之,網絡能夠視爲一個I/O設備。
實際加速比的計算:\(S = T_{old} / T_{new}, T_{new} = (1-\alpha)T_{old} + \alphaT_{old}/k\)
併發:通用概念,指同時具備多個活動的系統
並行:用併發使一個系統運行得更快
系統層次結構中由高到低的三個並行層次:
線程級(進程級?):多核處理器, 超線程/同時多線程
指令集並行:處理器同時執行多條指令 - 超標量(super-scalar)處理器
單指令、多數據(SIMD並行):可能是爲了提升處理影像、聲音和視頻數據應用的執行速度。;編譯器支持用特殊的向量數據類型來寫程序。
如,爲一組函數規定一個簡單的應用程序接口(API)
計算機系統提供的一些抽象(在上述介紹的基礎上增長"虛擬機"抽象):
8個位(比特) -> 1個字節 -> 程序中某個字符
ASCII標準:用惟一的單字節大小的整數值來表示每一個字符
文本文件:只由ASCII字符構成的文件。
二進制文件:不是文本文件的全部其餘文件
(略)