1.1.2 計算機結構
計算機的核心是CPU,CPU結構主要有兩種:哈佛結構、馮·諾依曼體系結構。現代計算機絕大多數基于馮·諾依曼體系結構。
1.馮·諾依曼體系結構
馮·諾依曼體系結構也被稱為普林斯頓結構,是一種將程序指令存儲器和數據存儲器合并在一起的存儲器結構。程序指令存儲地址和數據存儲地址指向同一個存儲器的不同物理位置,因此程序指令和數據的寬度相同。如Intel公司的8086中央處理器的程序指令和數據都是16位寬。
馮·諾依曼體系結構主要包括以下幾部分。
(1)包含算術邏輯部件(ALU)和處理器寄存器的運算器單元,用來完成各種算術和邏輯運算。
(2)包含指令寄存器和程序計數器(PC)的控制器單元,通常用來控制在不同條件下程序的分支和跳轉,在現代計算機里,控制器單元和運算器單元共同組成了CPU。
(3)內存單元,用于存儲數據和指令。
(4)各種輸入設備和輸出設備。
現代計算機也都是基于這個體系結構來設計開發的,馮·諾依曼體系結構模型如圖1-5所示。

圖1-5 馮·諾依曼體系結構模型
計算機程序最主要的思想就是存儲程序并順序執行,對其有以下規定。
(1)把需要的程序和數據送至計算機中。
(2)必須具有長期記憶程序、數據、中間結果和最終運算結果的能力。
(3)能夠完成各種算術、邏輯運算和數據傳送等數據加工處理的能力。
(4)能夠根據需要控制程序走向,并能根據指令控制機器的各部件使其協調操作。
(5)能夠按照要求將處理結果輸出給用戶。
其實所有的計算機程序,其功能都可以抽象為從輸入設備讀取輸入信息,通過運算器和控制器來執行存儲在存儲器里的程序,最終把結果輸出到輸出設備中。而無論是高級語言還是低級語言的程序,也都是基于這樣一個抽象體系結構來進行運作的。
2.哈佛結構
馮·諾依曼體系結構和哈佛結構是有區別的。在馮·諾依曼體系結構中,程序指令存儲器和數據存儲器都可以放到內存中,被統一編碼,而在哈佛結構中它們被分開編碼。
哪些處理器是哈佛結構?哪些處理器是馮·諾依曼體系結構?
MCU(單片機)絕大多數采用哈佛結構,例如廣泛使用的51單片機、典型的STM32單片機(核心是ARM Cortex-M系列的)。
PC和服務器芯片(如Intel AMD),ARM Cortex-A系列嵌入式芯片(如三星Exynos 4412,華為的麒麟970等手機芯片)采用馮·諾依曼體系結構。因為這些系統都需要大量內存,且其為DRAM(動態隨機存儲器),所以它們更適合使用馮·諾依曼體系結構。
實際上,現代的CPU準確地說叫作SoC(單片系統),絕大多數不是純粹的哈佛結構或馮·諾依曼體系結構,而是混合結構。
例如基于Exynos 4412的開發板上配備了1GB的DDR SDRAM(雙倍數據速率同步動態隨機存儲器)和8GB的eMMC(閃存)。正常工作時所有的程序和數據都從eMMC加載到DDR SDRAM中,也就是說不管是程序還是數據都存儲在eMMC中,運行在DDR SDRAM中,再通過高速緩存寄存器將它們送給CPU加工處理。這就是典型的馮·諾依曼體系結構。但是,Exynos 4412內部仍然有一定容量的64KB IROM和64KB IRAM,這些IROM和IRAM用于引導和啟動SoC,上電后芯片首先會執行內部IROM中固化的程序,此時Exynos 4412就好像一個MCU(微控制器),這又是典型的哈佛結構。因此,Exynos 4412就是混合式結構設計。