計算機(jī)系統(tǒng)漫游
信息就是位+上下文
程序被其他程序翻譯成不同的格式
預(yù)處理器、編譯器、匯編器、鏈接器一起構(gòu)成了編譯系統(tǒng)。
- 預(yù)處理階段,預(yù)處理器cpp會修改原始的C程序,比如會把
#include <stdio.h>命令告訴預(yù)處理器讀取系統(tǒng)頭文件stdio.h的內(nèi)容,并插入程序文本中,得到了另一個c程序,通常以.i為擴(kuò)展名 - 編譯階段,編譯器ccl將.i文件翻譯成.s文件,包含一個匯編語言程序。
- 匯編階段,匯編器as會將.s翻譯成機(jī)器語言指令,把這些指令打包成一種叫做可重定位目標(biāo)程序的格式,并將結(jié)果保存在目標(biāo).o文件中。.o文件是一個二進(jìn)制文件。
- 鏈接階段,鏈接器ld負(fù)責(zé)將程序中調(diào)用標(biāo)準(zhǔn)庫的函數(shù)同函數(shù)所在的預(yù)編譯文件進(jìn)行鏈接,得到一個可執(zhí)行的目標(biāo)文件,此文件可以被加載到內(nèi)存中,由系統(tǒng)執(zhí)行。
了解編譯系統(tǒng)如何工作是大有益處的
處理器讀并解釋存儲在內(nèi)存中的指令
系統(tǒng)的硬件組成
- 總線,它攜帶信息字節(jié)并負(fù)責(zé)在各個部件間傳遞。
- I/O設(shè)備,每個I/O設(shè)備都通過一個控制器或適配器與I/O總線相連。控制器是I/O設(shè)備本身或系統(tǒng)的主板上的芯片組,適配器是一塊插在主板插槽上的卡。
- 主存,是臨時存儲設(shè)備。物理上來說,主存是一組動態(tài)隨機(jī)存取存儲器DRAM芯片組成的。從邏輯上說,存儲器是一個線性的字節(jié)數(shù)組,每個字節(jié)都有其唯一的地址,地址從零開始。
- 處理器,CPU,是解釋或執(zhí)行存儲在主存中指令的引擎,處理器核心是一個大小為一個字的存儲設(shè)備(寄存器),稱為程序計數(shù)器PC,任何時刻PC都指向主存中某條機(jī)器語言指令。
例子,CPU在指令的要求下可能會執(zhí)行這些操作:
- 加載:從主存復(fù)制一個字節(jié)或一個字到寄存器,以覆蓋寄存器原來的內(nèi)容。
- 存儲:從寄存器復(fù)制一個字節(jié)或一個字到主存的某個位置,以覆蓋原來的內(nèi)容。
- 操作:把兩個寄存器的內(nèi)容復(fù)制到ALU,ALU對這兩個字做算術(shù)運(yùn)算,并將結(jié)果放到一個寄存器中,以覆蓋該寄存器中原來的內(nèi)容。
- 跳轉(zhuǎn):從指令本身中抽取一個字,并將這個子復(fù)制到程序計數(shù)器PC中,以覆蓋PC中原來的值。
執(zhí)行hello程序
高速緩存至關(guān)重要
存儲設(shè)備形成層次結(jié)構(gòu)
進(jìn)程
進(jìn)程是操作系統(tǒng)對一個正在運(yùn)行的程序的一種抽象。
線程
虛擬內(nèi)存
- 程序代碼和數(shù)據(jù)
- 堆
- 共享庫
- 棧
- 內(nèi)核虛擬內(nèi)存
文件
文件就是字節(jié)序列。
系統(tǒng)之間利用網(wǎng)絡(luò)通信
重要主題
并發(fā)和并行
- 線程級并發(fā)
- 指令級并行
- 單指令、多數(shù)據(jù)并行