1. 程式人生 > >一幅圖理解計算機系統硬體組成

一幅圖理解計算機系統硬體組成

一、前言

    試想一下,我們編輯好HelloWord程式,如果是C/C++語言編寫,一般是一個.c或者.cpp的檔案,這是一個文字檔案,你一般會把它放在你的硬盤裡面,難道不是嗎?比如桌面、D、E盤下,那當我們打算執行HelloWord的時候計算機就需要載入這個檔案,然後經過一系列的流程來執行我們所寫的程式碼,今天要解釋的就是這一系列的流程。

 

二、計算機系統硬體組成

上面這張圖是Inter Pentium系列產品的模型,主要包括匯流排、I/O裝置、主存、處理器這四個部分,下面詳細解釋著四個部分:

1、I/O裝置

    首先介紹I/O裝置,這也是我們經常操作的計算機硬體,上圖標出了滑鼠、鍵盤、顯示器和硬碟這四個I/O裝置,每個I/O裝置都通過一個控制器或介面卡

與I/O匯流排相連。

控制器和介面卡的相同與不同:相同是指他們都是用來I/O裝置與計算機其他硬體(匯流排)進行資料資訊傳遞用的,不同在於控制器是一個晶片組,內置於I/O裝置或主機板,而介面卡是一塊插在主機板上的卡,如顯示卡。

2、匯流排

    貫穿整個計算機硬體系統的一組電子管道,攜帶位資訊或位元組資訊在計算機各個部件之間傳遞,但是匯流排一次能攜帶的位數或位元組數是固定的,這稱為匯流排寬度如32為Windows系統匯流排寬度是4個位元組,即32位資訊。

3、主存

    也就是我們所指的執行記憶體,注意與硬碟不同,一般是指記憶體條,它主要用來儲存程式和程式處理的資料

,以什麼樣的形式儲存呢?這個後面會講,現在一定要記住主存邏輯上是一個位元組陣列,什麼是位元組陣列,首先它是一個數組,這個陣列以位元組為單位進行計算,如我們一般在C語言中定義的整數陣列

    int arr[10];

這表示一個含有10個整數的陣列,每個整數有4個位元組,對應來說,主存(記憶體)就是一個形如下面的陣列

 

    RAM_type RAM[N];

其中RAM_type是一個位元組型別的資料型別,與char類似,在記憶體中佔一個位元組,RAM[N]表示主存陣列,N為陣列長度,即表示主存能包含多少個位元組,那到底N為多少呢?它與匯流排寬度有關如果按照上面說的匯流排寬度是32位,那麼N = 4GB(2的32次方),也就是說主存陣列的索引值從0到4GB-1,這就是指的主存的地址,

怎麼理解呢?要解釋這個問題需要理解兩個點:

(1)什麼是機器指令?我們寫的一行C語言程式碼與機器指令的關係?主存怎麼儲存機器指令?

    機器指令肯定是機器能執行的一條命令,如讀取記憶體中一個變數的值等;

    一行C語言程式碼可能對應一條機器指令也可能是多條;

    一般來說,組成程式的每條機器指令都由不同數量的位元組構成,那剛好主車就是一個位元組陣列,一條機器指令可能存在主存中的一個位元組中或者多個位元組中。

(2)怎麼理解匯流排寬度與主存陣列長度相等?

    要解釋這個問題,需要說明一個在處理器中的核心儲存裝置,即程式計數器(PC),在任何時刻PC都指向記憶體中的一條指令,即可以理解為PC就是一個指向一條機器語言指令的指標,指標的值就是這條指令在主存中的地址(索引值),最重要的一點就是PC的容量是一個字(4個位元組),所以

PC = 匯流排寬度 = 主存(陣列)長度

    現在再來理解匯流排寬度與主存陣列長度相等,最重要的是你要理解記憶體定址的意思,PC和匯流排寬度都是32位,則可以把匯流排理解為32根地址線,那32根地址線最多能定址的範圍是多少呢?那就是4GB啊,難道不是嗎?如果是2根地址線,能定址的範圍是0(二進位制00)~4(二進位制11),所以主存陣列長度就是 與匯流排寬度相等。

    另外,這也說明了Windows 32位系統最多能識別4GB的記憶體,就算你安裝8GB的記憶體條,它也只能用4GB

4、處理器

    處理器即計算機中央處理單元(CPU),它主要用來解釋(或執行)儲存在主存中指令的引擎,上面也說明了處理器的核心是一個字長的儲存裝置,即PC(程式計數器),但同時處理器還包括暫存器檔案(一組長度為字長的暫存器)、算術邏輯單元ALU(主要計算新的資料和地址值),CPU在指令要求下一般會執行以下這些命令:

    (1)載入:從主存到暫存器,把一個位元組或者一個字從主存複製到暫存器檔案,以覆蓋暫存器原來的內容;

    (2)儲存:從暫存器到主存;

    (3)操作:先暫存器到算術邏輯單元ALU進行計算,然後結果再從ALU到暫存器;

    (4)跳轉:主存到PC,用於更新PC的值。

 

三、後記

    這些理解首先來自於《深入理解計算機系統》,其次是網上的一些部落格,再加上自己的一些理解,整理出來,作為共享,希望大家批評指正。確實,作為一個想寫程式碼的程式設計師,由於前期知識擴充套件不夠,知識面不廣,在大致閱讀了《深入理解計算機系統》這本書之後,發現計算機系統的確實蠻有意思的,而且和程式的編寫與執行有千絲萬縷的聯絡,其實這也是廢話,哈哈,程式本來是由計算機來執行的嘛,當然有聯絡了,後面還會繼續深入,堅持總結、更新博文。