在《深刻理解計算機系統》中,第一章主要講的就是hello程序代碼如何在計算機中執行,確定離不開計算機的硬件支持,這裏寫下計算機系統中的硬件組成,主要就是下面四個大的方面。數組
一、總線
貫穿整個系統的是一組電子管道,稱做總線,它攜帶信息字節並負責在各個部件間傳遞。一般總線被設計成傳送定長的字節塊,也就是字(word)。字中的字節數(即字長)是一個基本的系統參數,各個系統都不盡相同。如今的大多數機器字長要麼是是4個字節(32位),要麼是8個字節(64位)。
二、I/O設備
I/O(輸入/輸出)設備是系統與外部世界的聯繫通道。咱們的示例系統中包括四個I/O設備:做爲用戶輸入的鍵盤和鼠標,做爲用戶輸出的顯示器,以及用於長期存儲數據和程序的磁盤驅動器(簡單來講就是磁盤)。最開始,可執行的程序hello就存放在磁盤上。
每一個I/O設備都經過一個控制器或適配器與I/O總線相連。控制器和適配器之間的區別主要在於它們的封裝方式。控制器是I/O設備自己或者系統的主印製電路板(一般稱做主板)上的芯片組。而適配器則是一塊插在主板插槽上的卡槽。不管如何,它們的功能都是在I/O總線和I/O設備之間傳遞信息。
三、主存
主存是一個臨時存儲設備,在處理器臨時執行程序時,用來存放程序和程序處理的數據。從物理來講,主存是由一組動態的隨機存取存儲器(DRAM)西片組成的。從邏輯上來講,存儲器是一個線性的字節數組,每一個字節都有其惟一的地址(數組索引),這些地址是從零開始的。通常來講,組成程序的每條機器指令都由不一樣數量的字節構成。
四、處理器
中央處理單元(CPU),簡稱處理器。是解釋(或執行)存儲在主存中的指令的引擎。處理器的核心是一個大小爲一個字的存儲設備(或寄存器),稱爲程序計數器(PC)。在任什麼時候刻,PC都是指向主存中的某條機器語言指令(即含有該條指令的地址)。
從系統通電開始,直到系統斷電,處理器一直在不斷地執行程序計數器指向的指令,再更新程序計數器,使其指向下一條指令。處理器看上去是按照一個很是簡單的指令執行模型來操做的,這個模型是由指令集架構決定的。在這個模型中,指令按照嚴格的順序執行,而執行一條指令包括執行一系列的步驟。處理器從程序計數器指向的內存處讀取指令,解釋指令中的位,執行該指令的簡單操做,而後更新PC,使其指向下一條指令,而這條指令並不必定是和內存中剛剛執行的指令相鄰。
這樣的簡單操做並很少,他們圍繞着主存、寄存器文件和算術/邏輯單元(ALU)進行。寄存器文件是一個小的存儲設備,由一些單個字節的寄存器組成,每一個寄存器都有惟一的名字。ALU計算新的數據和地址值。下面是一些簡單操做的例子。CPU在指令的要求下可能會執行這些操做。
(1)加載:從主存複製一個字節或者一個字到寄存器,以覆蓋寄存器原來的內容。
(2)存儲:從寄存器複製一個字節或者一個字到主存的某個位置,以覆蓋這個位置上原來的內容。
(3)操做:把兩個寄存器的內容複製到ALU,ALU對這兩個字作算術運算,並將結果存放到一個寄存器中,以覆蓋該寄存器中原來的內容。
(4)跳轉:從指令自己中抽取一個字,並將這個字複製到程序計數器(PC)中,以覆蓋PC中原來的值。架構