現在Intel已然成了CPU的代名詞,但當年的Intel並沒有現在這麼風光。從1978年發佈的8086到2013年的四代i7,整整35年,她見證了從PC到互聯網、移動互聯網的幾次鉅變;這些年的變化實在太多。本文不打算對這段歷史及引領這段歷史的風雲人物做多少描述和評價(這些內容足夠寫好幾本書的了),你若對這些內容更感興趣,請移步。本文只對Intel CPU家族中幾位名聲顯赫的人物做簡要介紹,並對比他們區別。
簡要歷史
接下來,對Intel的幾個劃時代的CPU產品做簡要介紹。
Intel ® 8086(16位,1978年)
這是一款1978年發佈的CPU產品,算得上是Intel家族的長老了。20世紀70年代的東西了,爲什麼要介紹它呢?因爲我和很多同學一樣,大學還要學這種古老的東西。我上這門課的時候就在想爲什麼要學這麼老的東西呢?後來查了Intel的其他CPU才知道,越往後的CPU越強大,當然也越複雜,一個學期也學不完;當然這些都是後話了。
在8086之前,還有一款小有名氣8位的CPU產品——8088,但它對後來產品的影響遠沒有8086大,所以本文就不介紹他了。
來瞻仰一下8086的“新特性”吧:
看看幾個“值得一提”的:
- 直接內存尋址能力達1MB
- 時鐘頻率爲5M, 8M, 10MHz
- 最後一個說的是:有40引腳陶瓷和塑料兩種封裝
最後一段的最後一句值得注意的是:8086可以通過多個處理器來實現高性能。
IA-32系列架構發展自8086這樣的16位處理器。8086有16位的寄存器,16位的外部數據總線,和20位數據總線,它提供了1M字節的尋址能力,1M=2^20。
8086將“段”的概念引入了IA-32架構。由於段的引入,一個16位的段寄存器容納了一個指向64K字節內存的指針。20位地址可以經由一個段寄存器和一個附加的16位指針,來提供1M字節的尋址能力。
Intel ® 286 處理器 (1982)
Intel286處理器將“保護模式”引入了IA-32。保護模式使用段寄存器的內容作爲選擇器或指向描述符(descriptor)表格的指針指針。Descriptor提供了24位基地址,使得物理內存尋址能力提高到了16M字節(16M=2^24),並支持了基於段交換的虛擬內存管理,以及一些列的保護機制。這些機制包括:
- 段邊界檢查
- 只讀和只執行段選項
- 四種特權級別
時鐘頻率由6MHz到20MHz。
The Intel386™ Processor (1985)
Intel386處理器是IA-32架構家族的第一個32位處理器。它包括即可存放操作數也可用於尋址的32位寄存器。每個32位寄存器的低半截保留有此前系列的16位寄存器的功能,允許後向兼容(兼容過去的可執行代碼)。該處理器同時提供了虛擬8086模式,以允許有效地執行爲8086/8088創建的程序。
另外,Intel386處理器還支持:
- 32位的地址總線,最高支持4G物理內存
- 分段(segmented)內存模式和平坦(flat)內存模式
- 分頁,大小固定爲4k的頁提供了一種“虛擬內存管理”的方法
- 支持parallel stages(應該指的是指令執行幾個階段可以並行)
時鐘頻率爲12.5MHz
Intel ® 486™ 處理器 (1989)
Intel486處理器通過擴展386處理器的指令譯碼器(instruction decode)和執行單元(execution uint)爲5個排隊階段(pipelined stage)提升了指令的執行能力。每個階段的操作與其他指令的不同階段是同時執行的。
另外,該處理器還引入了:
- 8k片上一級緩存,它提升了單位時間的指令執行數量。
- 集成的x87浮點計算單元(FPU)
- 省電模式和系統管理能力
時鐘頻率從25M到50M.
Intel® Pentium® 處理器 (1993)
因特爾奔騰處理器加入了第二個執行管線(pipeline),以實現更強勁的性能(兩個管線,廣爲人知的u和v管線,可以在同一個時鐘週期執行兩個指令)。片上一級緩存加倍(16K),8k用來緩存代碼,8k用來緩存數據。數據緩存通過Intel486處理器使用MESI協議來支持更高效的緩存回寫。一個片上分支表和被加入,以提升循環的執行性能。
另外,該處理器加入了:
- 一些擴展使得虛擬8086模式更有效率,且允許4M字節或4K字節分頁
- 128位和256位的內部數據路徑用於提示內部的數據傳遞
- 可增強的外部數據總線增加到了64位
- APIC( Advanced Programmable Interrupt Controller,高級可編程中斷控制器),以支持系統可以使用多核
- 雙核模式,以支持無需膠合(外部控制器協調)的雙核系統
另一個重要的階段性的成果是奔騰家族引入了Intel MMX技術,Intel MMX技術使用單指令多數據(single-instruction multiple-data, SIMD)執行模式來在打包的64爲寄存器上實現平行計算。
時鐘頻率由最初的60Mhz和66Mhz到後來的200MHz
Intel® Pentium® 4 Processor Family (2000-2006)
PS:這六年對於CPU的世界來說,變換是在太快,“日新月異”似乎已經不足以描述這幾年CPU的鉅變了。
Intel奔騰4處理器家族是基於Intel NetBurst 微架構的。奔騰4處理器引入了SSME2(Streaming SIMD Extension 2)。
奔騰4處理器具有3.4GHz主頻,支持超線程技術(Hyper-Threading Technology)。
Intel 64架構是在奔騰4處理器 6xx和5xx系列中引入的。
Intel® Virtualization Technology (Intel® VT) 是在 Pentium 4 處理器 672 和 662 引入的.
奔4系列已經接近了CPU主頻技術的極限,它讓當年的“摩爾定律”不再有用。
下面的這些,我只作一些簡要描述。
Intel® Xeon® Processor (2001- 2007)
Intel® Core™ Duo and Intel® Core™ Solo Processors (2006-2007)
Intel® Xeon® Processor 5200, 5400, 7400 Series and Intel® Core™2 Processor Family (2007)
Intel® Atom™ Processor Family (2008)
Intel® Core™i7 Processor Family (2008)
Nehalem架構,45nm。與Atom同時的產品時酷睿i系列,這也算的上是“家喻戶曉”的產品了。
Intel® Xeon® Processor 7500 Series (2010)
Nehalem架構,45nm。繼續高大上。
Second Generation Intel® Core™ Processor Family (2011)
Sandy Bridge架構,32nm。二代酷睿i系列,我現在用的i2410正是這個這個系列的。
Third Generation Intel® Core™ Processor Family (2012)
Ivy Bridge架構,以及有些的Ivy Bridge-EP架構。
Fourth Generation Intel® Core™ Processor Family (2013)
Haswell架構。
“三個代表”
這裏需要指出三個機具代表性的CPU,他們是8086,386(IA32)和酷睿i7(Intel64)。
8086CPU架構
8086相對後來的CPU要簡單得多,這也是爲什麼教材喜歡拿他說事的原因。來讓我一睹8086的架構吧(左圖)。和架構緊密相關的是它的引腳封裝,沒錯,他和51單片機的40-pin封裝長得一樣(右圖)。
基本執行環境
對於我等程序猿來說,架構和封裝都不是我們關心的;我們只關心我們的代碼。直到現在,和具體CPU相關的代碼仍要用彙編語言編寫;自然要關心的是寄存器了;在上面8086
的架構圖(左圖)中可以看到的有段寄存器(Segment register)和指令指針(instruction pointer)。
8086的寄存器很少,少到一張圖就可以概括所有寄存器:
其中IP是指令指針,FLAGS爲機器狀態字。其中CS,DS,SS,ES爲四個段寄存器;SP和BP爲數據指針(data pointer),SI和DI爲索引寄存器(Index register)。
IA32的寄存器則要多一些:
因爲,它除了基本執行環節外,還內置了FPU(浮點計算單元),MMX(多媒體增強)和XMM(與SSE有關)。
IA32的指令指針和機器狀態字分別叫做EIP和EFLAGS。
其中,
8個32爲寄存器爲:EAX, EBX, ECX, EDX, ESI, EDI, EBP, ESP
6個段寄存器爲:CS, DS, SS, ES, FS, GS
而Intel 64執行環境則與IA32環境類似:
Intel 64的通用寄存器增加到了16個,分別爲:RAX, RBX, RCX, RDX, RSI, RDI, RSP, RBP, R8~R15
兼容性
IA32可以與8086兼容,是的8086的程序能夠在IA32上運行,這依賴於寄存器和指令上的兼容。這在當時爲Intel贏得了很好的市場,試想,如果當時386不兼容Dos,估計也不會有今天的微軟了吧。
同樣Intel 64也兼容IA32,下面是一個對照表:
內存模型
接下來,簡要介紹8086,IA-32和Intel 64的內存模型。
8086的有20位地址總線,但寄存器是16位的,這似乎必然導致了分段內存模型。代碼段寄存器(CS)和指令指針(IP)指向當前正在執行的代碼;數據段寄存器(DS)或其他段寄存器與索引寄存器聯合用於定位內存中的數據。
IA32 內存模型
IA32時代,虛擬內存技術已經得到了CPU的支持,這是出現了三種內存模型:
平坦內存模型, 內存表現爲單一的連續的地址空間,這種地址空間也叫線性地址空間。
分段內存模型,內存表現爲一系列獨立的被成爲段的地址空間,代碼段、數據段、棧(stack)段是典型的獨立的段。程序使用邏輯地址尋址一個字節。系統所有段都會被映射到處理器的線性地址空間,處理器負責邏輯地址和線性地址的互相轉換。這種轉換對於應用程序來說是透明的。
實地址模式,這種地址模式是用於Intel 8086處理器的。它是爲了使得程序可以運行在8086處理器上。
幾種模式的示意圖如下所示:
分頁與虛擬內存
在平坦和分段內存模型中,線性地址空間被直接(或分頁)映射到處理器的物理地址空間。
當使用直接映射(關閉分頁),每個先行地址都有一個一對一的物理地址與之對應。線性地址直接由處理器的地址總線送出,不需任何轉換。
當使用IA-32架構的分頁機制(打開分頁)時,線性地址空間被劃分爲一系列的頁並被映射爲虛擬地址,隨後虛擬內存的頁會按照需要映射相應的物理內存。當操作系統或可執行程序使用頁時,分頁機制對於應用程序來說是透明的。所有的應用程序看的都是線性地址空間。
另外,IA-32的分頁機制包括一些擴展功能:
- 物理地址擴展(PAE,Physical Address Extensions)用於尋址超出4G的地址
- 頁面大小擴展(PSE,Page Size Extensions)用於將4M字節的線性地址頁映射到物理地址。
擴展閱讀
【1】CPU的發展歷程:Intel(英特爾公司),http://web.gxmu.edu.cn/zz/Article/ShowArticle.asp?ArticleID=76
【2】Intel 8086 6-BIT HMOS MICROPROCESSOR 8086/8086-2/8086-1,http://download.csdn.net/detail/xusiwei1236/8373939
【3】Intel® 64 and IA-32 Architectures Software Developer’s Manual,http://www.intel.com/content/www/us/en/processors/architectures-software-developer-manuals.html