現代的CPU基本上歸為馮諾伊曼結構(也成普林斯頓結構)和哈佛結構。
馮洛伊曼結構就是我們所說的X86架構,而哈佛結構就是ARM架構。一個廣泛用於桌面端(台式/筆記本/服務器/工作站等),一個雄踞移動領域,我們的手持設備(平板\手機用的大多就是他了)。
01、馮·諾依曼體系
馮·諾依曼體系結構圖如下
馮·諾依曼體系的特點:
A、數據與指令都存儲在同一存儲區中,取指令與取數據利用同一數據總線。
B、被早期大多數計算機所采用。
C、ARM7——馮諾依曼體系結構簡單,但速度較慢。取指不能同時取數據
馮·諾依曼結構也稱普林斯頓結構,是一種將程序指令存儲器和數據存儲器合並在一起的存儲器結構。程序指令存儲地址和數據存儲地址指向同一個存儲器的不同物理位置,因此程序指令和數據的寬度相同,如英特爾公司的8086中央處理器的程序指令和數據都是16位寬。
馮.諾依曼結構處理器具有以下幾個特點:
1:必須有一個存儲器;
2:必須有一個控制器;
3:必須有一個運算器,用於完成算術運算和邏輯運算;
4:必須有輸入設備和輸出設備,用於進行人機通信。另外,程序和數據統一存儲並在程序控制下自動工作。
馮·諾依曼結構:
英特爾公司的8086。
英特爾公司的其他中央處理器。
ARM的ARM7。
MIPS公司的MIPS處理器。
02、哈佛體系
哈佛體系結構圖
結構特點:
A、程序存儲器與數據存儲器分開.
B、提供了較大的存儲器帶寬,各自有自己的總線。
C、適合於數字信號處理.
D、大多數DSP都是哈佛結構.
E、ARM9是哈佛結構,取指和取數在同一周期進行,提高速度,改進哈佛體系結構分成三個存儲區:程序、數據、程序和數據共用。
哈佛結構是一種存儲器並行體系結構,主要特點是將程序和數據存儲在不同的存儲空間中,即程序存儲器和數據存儲器是兩個獨立的存儲器,每個存儲器獨立編址、獨立訪問。程序指令存儲和數據存儲分開,可以使指令和數據有不同的數據寬度。
哈佛結構能基本上解決取指和取數的沖突問題.而對另一個操作數的訪問,就只能采用Enhanced哈佛結構了,例如像TI那樣,數據區再split,並多一組總線.或向AD那樣,采用指令cache,指令區可存放一部分數據.。
哈佛結構:
1、ARM(除arm7)
2、大部分DSP
哈佛體系架構有個致命的弱點在動態加載程序上面,想象我們從外存中讀取一段程序然后加載到RAM,這個程序是在數據內存當中的,我們需要一種機制將數據內存再傳輸到程序內存當中去,這反而增加了設備復雜度。
對於多任務操作系統來說,管理程序內存是一件非常重要的事情,而且僅僅是保護模式下的頁面映射等等機制就已經足夠復雜了,如果還要求將程序和數據分開管理,復雜度就太高了。這種時候馮諾依曼體系結構就有非常大的優勢了。
03、arm和哈佛、馮·諾依曼的關系
哈佛架構是針對cpu從cache中取指而言,指令和數據在主存中並未分開,但在加載到cache中的時候被分離為指令和數據兩份存儲空間,cpu可以同時從cache取到指令和數據.
所以arm系統CPU(除arm7)對外表現為馮.諾伊曼架構,對內則表現為哈佛架構。
04、實際芯片制造
實際上,絕大多數現代計算機使用的是所謂的“ModifiedHarvard Architecture”,指令和數據共享同一個address space,但緩存是分開的。可以說是兩種架構的一種折中吧。
在現實世界中很少有非常純粹的概念,特別是在實際的應用里。教科書里的大多是理想化的模型,便於掌握某個概念的重點和本質,但實際中很難達到這種理想化的狀態。
哈佛結構和馮諾依曼結構主要區別在是否區分指令與數據。在教科書里這是兩種截然不同的做法。
但實際上在內存里,指令和數據是在一起的。而在CPU內的緩存中,還是會區分指令緩存和數據緩存,最終執行的時候,指令和數據是從兩個不同的地方出來的。你可以理解為在CPU外部,采用的是馮諾依曼模型,而在CPU內部用的是哈佛結構。
大部分的DSP都沒有緩存,因而直接就是哈佛結構。
哈佛結構設計復雜,但效率高。馮諾依曼結構則比較簡單,但也比較慢。CPU廠商為了提高處理速度,在CPU內增加了高速緩存。也基於同樣的目的,區分了指令緩存和數據緩存。有時為了解決現實問題,究竟是什么主義真的沒那么重要。因而個人認為爭論到底是哪種結構意義不大。
點擊查看本文所在的專輯,STM32F207教程