1. 程式人生 > 其它 >馮諾依曼模型

馮諾依曼模型

在 1945 年馮諾依曼和其他電腦科學家們提出了計算機具體實現的報告,其遵循了圖靈機的設計,而且還提出用電子元件構造計算機,並約定了用二進位制進行計算和儲存。

最重要的是定義計算機基本結構為 5 個部分,分別是運算器、控制器、儲存器、輸入裝置、輸出裝置,這 5 個部分也被稱為馮諾依曼模型

運算器、控制器是在中央處理器裡的,儲存器就我們常見的記憶體,輸入輸出裝置則是計算機外接的裝置,比如鍵盤就是輸入裝置,顯示器就是輸出裝置。

儲存單元和輸入輸出裝置要與中央處理器打交道的話,離不開匯流排。所以,它們之間的關係如下圖:

接下來,分別介紹記憶體、中央處理器、匯流排、輸入輸出裝置。

一、記憶體

我們的程式和資料都是儲存在記憶體,儲存的區域是線性的。

在計算機資料儲存中,儲存資料的基本單位是位元組(byte,1 位元組等於 8 位(8 bit)。每一個位元組都對應一個記憶體地址。

記憶體的地址是從 0 開始編號的,然後自增排列,最後一個地址為記憶體總位元組數 - 1,這種結構好似我們程式裡的陣列,所以記憶體的讀寫任何一個數據的速度都是一樣的。

二、中央處理器

中央處理器也就是我們常說的 CPU,32 位和 64 位 CPU 最主要區別在於一次能計算多少位元組資料:

  • 32 位 CPU 一次可以計算 4 個位元組;
  • 64 位 CPU 一次可以計算 8 個位元組;

這裡的 32 位和 64 位,通常稱為 CPU 的位寬。

之所以 CPU 要這樣設計,是為了能計算更大的數值,如果是 8 位的 CPU,那麼一次只能計算 1 個位元組 0~255

 範圍內的數值,這樣就無法一次完成計算 10000 * 500 ,於是為了能一次計算大數的運算,CPU 需要支援多個 byte 一起計算,所以 CPU 位寬越大,可以計算的數值就越大,比如說 32 位 CPU 能計算的最大整數是 4294967295

CPU 內部還有一些元件,常見的有暫存器、控制單元和邏輯運算單元等。其中,控制單元負責控制 CPU 工作,邏輯運算單元負責計算,而暫存器可以分為多種類,每種暫存器的功能又不盡相同。

CPU 中的暫存器主要作用是儲存計算時的資料,你可能好奇為什麼有了記憶體還需要暫存器?原因很簡單,因為記憶體離 CPU 太遠了,而暫存器就在 CPU 裡,還緊挨著控制單元和邏輯運算單元,自然計算時速度會很快。

常見的暫存器種類:

  • 通用暫存器,用來存放需要進行運算的資料,比如需要進行加和運算的兩個資料。
  • 程式計數器,用來儲存 CPU 要執行下一條指令「所在的記憶體地址」,注意不是儲存了下一條要執行的指令,此時指令還在記憶體中,程式計數器只是儲存了下一條指令「的地址」。
  • 指令暫存器,用來存放當前正在執行的指令,也就是指令本身,指令被執行完成之前,指令都儲存在這裡。

三、匯流排

匯流排是用於 CPU 和記憶體以及其他裝置之間的通訊,匯流排可分為 3 種:

  • 地址匯流排,用於指定 CPU 將要操作的記憶體地址;
  • 資料匯流排,用於讀寫記憶體的資料;
  • 控制匯流排,用於傳送和接收訊號,比如中斷、裝置復位等訊號,CPU 收到訊號後自然進行響應,這時也需要控制匯流排;

當 CPU 要讀寫記憶體資料的時候,一般需要通過下面這三個匯流排:

  • 首先要通過「地址匯流排」來指定記憶體的地址;
  • 然後通過「控制匯流排」控制是讀或寫命令;
  • 最後通過「資料匯流排」來傳輸資料;

四、輸入、輸出裝置

輸入裝置向計算機輸入資料,計算機經過計算後,把資料輸出給輸出裝置。期間,如果輸入裝置是鍵盤,按下按鍵時是需要和 CPU 進行互動的,這時就需要用到控制匯流排了。