1.認識計算機總線
馮諾伊曼計算機結構
總線是連接多個部件的信息傳輸線,是各部件共享的傳輸介質。輸入輸出設備可以和主存通信而不用影響CPU的工作,這樣CPU的工作效率得到了很大的提升。
- 系統總線: 用於IO接口、主存、CPU之間的信息傳輸,IO和CPU之間只傳輸指令信息。
- 主存總線: 專門用於主存和CPU之間的信息傳輸
1.2 系統總線的分類
- 數據總線:
數據總線用來傳輸各功能部件之間的數據信息,它是雙向傳輸總線,其位數就是數據總線的寬度。總之是用來傳輸數據的。
- 地址總線:
地址總線主要用來指出數據總線上的源數據或目的數據在主存單元的地址或者I/O設備的地址。總之就是傳輸數據所在地址。
- 控制總線:
由於數據總線、地址總線都是被掛在總線上的所有部件共享的,如何使各部件能在不同時刻佔有總線使用權,需依靠控制總線來完成,因此控制總線是用來發出各種控制信號的傳輸線。總之是用來傳輸控制指令的。
2.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的物理內存上限
雖然32位環境下實際上CPU支持訪問大於4G的物理內存,但Windows將此功能屏蔽了,導致了32位Windows實際只能使用4G的物理地址空間,具體原因參見這個回答:爲何微軟不在新的操作系統中讓 32 位支持大於 4GB 的內存? - 北極的回答