天天看點

CPU位寬與其尋址能力并不是挂鈎的

1.認識計算機總線

CPU位寬與其尋址能力并不是挂鈎的

馮諾伊曼計算機結構

總線是連接配接多個部件的資訊傳輸線,是各部件共享的傳輸媒體。輸入輸出裝置可以和主存通信而不用影響CPU的工作,這樣CPU的工作效率得到了很大的提升。

  • 系統總線: 用于IO接口、主存、CPU之間的資訊傳輸,IO和CPU之間隻傳輸指令資訊。
  • 主存總線: 專門用于主存和CPU之間的資訊傳輸

1.2 系統總線的分類

  • 資料總線:

資料總線用來傳輸各功能部件之間的資料資訊,它是雙向傳輸總線,其位數就是資料總線的寬度。總之是用來傳輸資料的。

  • 位址總線:

位址總線主要用來指出資料總線上的源資料或目的資料在主存單元的位址或者I/O裝置的位址。總之就是傳輸資料所在位址。

  • 控制總線:

由于資料總線、位址總線都是被挂在總線上的所有部件共享的,如何使各部件能在不同時刻占有總線使用權,需依靠控制總線來完成,是以控制總線是用來發出各種控制信号的傳輸線。總之是用來傳輸控制指令的。

2.CPU結構

CPU位寬與其尋址能力并不是挂鈎的

CPU的結構

CPU基本由運算器、cache、控制器三大部分構成。 

3.IA32、IA64、AMD64、Intel64

IA32、x86、x86-32

IA-32為Intel Architecture 32bit簡稱,即英特爾32位體系架構,在英特爾公司1985年推出的80386微處理器中首先采用。通常也被稱為i386、x86-32、x86等。

IA64

IA64是後來intel和惠普聯合推出的64位體系架構,但是不相容原有的32位體系結構的應用程式,導緻市場慘淡。

AMD64、x86-64、x64、

和  Intel64、CT、IA-32E、EM64T

後來AMD推出了相容32位的64位集關于IA-32的擴充,稱為x86-64或者x64,之後改名為AMD64。

Intel後來也采用該架構,先後使用Clackamas Technology (CT)、IA-32E、EM64T(Extended Memory 64 Technology),最後命名為Intel64。

4.8086名字的由來

當intel發明第一顆4位的位處理器的時候,intel把他叫4004.編号為4004,第一個“4”代表此晶片是客戶訂購的産品編号,後一個“4”代表此晶片是intel公司制作的第四個訂制晶片。

因為4004的指令集很有限,是以又搞出來了一個更新版本4040.

8008是4004的8位版,8080是4040的8位版。

8085是8080的單5伏電壓版

8085更新到16位後,就叫8086了

80286最後一款16位處理器

80386第一款32位處理器

80486英特爾最後一款以數字為編号的

之後進入奔騰(Pentium)、酷睿(Core)時代

5.CPU位寬與其尋址能力并不是挂鈎的

CPU的位寬一般是以 min{ALU位寬、通用寄存器位寬、資料總線位寬}決定的!也就是說CPU由ALU、通用寄存器、資料總線三者之中最少的位寬決定!是以CPU位寬與其尋址能力并不是挂鈎的!

事實上CPU尋址能力因每種CPU設計不同而不同!就比如說32位的X86CPU,其實就在PentiumII是引入了36位的擴充PAE機制(Physical Address Extention)位址位來支援64G記憶體(源于當時伺服器的問題),正常情況下也是用32位尋址,但通過設定相應的寄存器(沒記錯是cr4)的相應位激活PAE就可以支援64G記憶體了!

Intel的32位架構下,可使用的位址線是36個,可使用的最大實體位址是2^36B,折合64GB,可用的位址空間是4GB。

64位架構下,位址線是46個,是以最大的實體位址是2^46B,折合64TB,可用位址空間一般為128G,如下面第7節所示,微軟針對不同版本的作業系統做了不同的限制,有8G,16G,128G,192G;WIN10的有2T和6T

這裡引入線性位址(也叫虛拟位址)和實體位址的概念,另外還有邏輯位址。這些位址的轉換又涉及到記憶體的段式管理和頁式管理。具體可以參見  邏輯位址、虛拟位址、實體位址以及記憶體管理  以及  怎樣通俗的了解作業系統中記憶體管理分頁和分段

記憶體尋址的保護模式和實模式

下圖是不同的CPU型号對應的位址線位數與最大的尋址位址

CPU CPU Address Bus Size  Maximum RAM 
8086 20 bit  1MB
8088  20 bit  1MB
80286  24 bit  16MB
80386SX 24 bit  16MB
80386DX  32 bit  4GB
80486SX  32 bit  4GB
80486DX 32 bit  4GB
Pentium I  32 bit  4GB
K6 32 bit  4GB
Duron  32 bit  4GB
Athlon  32 bit  4GB
Athlon XP  32 bit 4GB
Celeron   36 bit 64GB
Pentium Pro 36 bit  64GB
Pentium II 36 bit 64GB
Pentium III 36 bit 64GB
Pentium 4  36 bit 64GB
Athlon   40 bit 1TB 
Athlon-64  40 bit 1TB 
Athlon-64 FX  40 bit 1TB 
Opteron   40 bit 1TB 
Itanium  44 bit  16TB 
Itanium 2   44 bit 16TB 

6.為什麼32位Windows中實際可用記憶體少于4G

雖然實體位址有4G,但CPU如果要通路你的顯示卡上的顯存,就必須把實體位址空間的一部分用于辨別顯存,這種技術被稱為memory-mapped I/O,這樣可以讓CPU操作顯存像操作記憶體一樣。

在Windows的裝置管理器裡,檢視顯示卡的屬性頁裡的“資源”,可以看到記憶體映射的位址範圍,實際上不管32位還是64位,都需要占用一部分位址空間,32位Windows隻有4G的位址空間,被顯存占去了一部分,是以可用的位址空間就少于4G了

實際上不僅僅是顯存,你電腦上的PCI控制器,各種網卡、聲霸卡、USB控制器等等都需要占用一定的實體記憶體,是以最終的後果就是可用的實體位址範圍變得特别少,最少可能隻有1.99GB,這種限制在32位Windows上是不可改變的。

7.微軟對各個版本的Windows的實體記憶體上限作出限制

PAE(Physical Address Extention)确實可以讓x86硬體支援到能夠通路64G的位址空間,Windows的核心也支援使用多達64G的實體位址空間,但是微軟偏偏要對各個版本的Windows的實體記憶體上限作出限制,下面是XP和Win7、Win10的實體記憶體上限

CPU位寬與其尋址能力并不是挂鈎的
CPU位寬與其尋址能力并不是挂鈎的
CPU位寬與其尋址能力并不是挂鈎的

雖然32位環境下實際上CPU支援通路大于4G的實體記憶體,但Windows将此功能屏蔽了,導緻了32位Windows實際隻能使用4G的實體位址空間,具體原因參見這個回答:為何微軟不在新的作業系統中讓 32 位支援大于 4GB 的記憶體? - 北極的回答