一、什么叫尋址空間?
尋址空間一般指的是CPU對于內(nèi)存尋址的能力。通俗地說,就是能最多用到多少內(nèi)存的一個問題。數(shù)據(jù)在存儲器(RAM)中存放是有規(guī)律的 ,CPU在運算的時候需要把數(shù)據(jù)提取出來就需要知道數(shù)據(jù)在那里 ,這時候就需要挨家挨戶的找,這就叫做尋址,但如果地址太多超出了CPU的能力范圍,CPU就無法找到數(shù)據(jù)了。 CPU最大能查找多大范圍的地址叫做尋址能力 ,CPU的尋址能力以字節(jié)為單位。
通常人們認為,內(nèi)存容量越大,處理數(shù)據(jù)的能力也就越強,但內(nèi)存容量不可能無限的大,它要受到系統(tǒng)結(jié)構(gòu)、硬件設(shè)計、制造成本等多方面因素的制約,一個最直接的因素取決于系統(tǒng)的地址總線的地址寄存器的寬度(位數(shù))。
計算機的尋找范圍由總線寬度(處理器的地址總線的位數(shù))決定的,也可以理解為cpu寄存器位數(shù),這二者一般是匹配的。
Intel公司早期的CPU產(chǎn)品的地址總線和地址寄存器的寬度為20位,即CPU的尋址能力為2^20=1024*1024字節(jié)=1024K字節(jié)=1M字節(jié);286的地址總線和地址寄存器的寬度為24位,CPU的尋址能力為
2^24=1024*4*1024*4B=4*1024*4KB=16M;386及386以上的地址總線和地址寄存器的寬度為32位,CPU的尋址能力為2^32=4096M字節(jié)=4G字節(jié)。 也就是說,如果機器的CPU過早,即使有很大的內(nèi)存也不能得到利用,而對于現(xiàn)在的PⅡ級的CPU,其尋址能力已遠遠超過目前的內(nèi)存容量。
由此推出:地址總線為N位(N通常都是8的整數(shù)倍;也說N根數(shù)據(jù)總線)的CPU尋址范圍是2的N次方字節(jié),即2^N(B)。
二、16位、32位、64位通常指的是什么?
從CPU的發(fā)展史來看,從以前的8位到現(xiàn)在的64位,8位也就是CPU在一個時鐘周期內(nèi)可并行處理8位二進字符0或是1,那么16就以此類推是64位就64位二進制.
從數(shù)據(jù)計算上來講理論上64位比32快一半。但因為電腦是軟硬相配合才能發(fā)揮最佳性能的.所以操作系統(tǒng)也必須從32位的到64位的,而且系統(tǒng)的硬件驅(qū)動也必須是64位的.
在64CPU的計算機上要安裝64位操作系統(tǒng)64位的硬件驅(qū)動,32位的硬件驅(qū)動是不能用的,只有這樣才能發(fā)揮計算機的最佳性能.如果64CPU裝32操作系統(tǒng)的話,那性能不會有明顯的提升。
三、為什么是2的N次方,而不是其他數(shù)的N次方?
因為計算機是采用二進制計算的。 假設(shè)一臺計算機,它只有1根地址線,請問它最多能對幾個存儲單元尋址?答案是:2個.因為在任何2進制計算機中,所有物理元件只有 0,1兩種狀態(tài),對應(yīng)這個例子,我們假設(shè)已經(jīng)把這唯一的一根地址線與兩個存儲單元a和b連上了,那么究竟怎么確定何時讀a何時讀b?有一個辦法,當?shù)刂肪€上的電壓是高電壓時我們讀a,相反是低電壓時,我們讀b.如此一來,一根地址線的情況下,只能對2個存儲單元進行尋址 依次類推,2根地址線時可以對4個存儲單元進行尋址,對應(yīng)的電壓情況可以是:低低,低高,高低,高高;繼續(xù)想下去,3根地址線就可以對8個存儲單元進行尋址(3個1和3個0不同組合情況:111、110、100、000、101、100、001、011),4根就是16個,也就是說,當有n根地址線時,可以對2的n次方個存儲單元進行尋址。
一根線是怎么連接到兩個存儲單元的?好像不同于一根電話線吧,他有兩個線芯或才網(wǎng)線,有八個小線(線芯)?
四、什么是存儲單元?
存儲單元一般應(yīng)具有存儲數(shù)據(jù)和讀寫數(shù)據(jù)的功能,一般以8位二進制作為一個存儲單元,也就是一個字節(jié)。每個單元有一個地址,是一個整數(shù)編碼,可以表示為二進制整數(shù)。
程序中的變量和主存儲器的存儲單元相對應(yīng)。變量的名字對應(yīng)著存儲單元的地址,變量內(nèi)容對應(yīng)著單元所存儲的數(shù)據(jù)。
五、為什么計算機采用二進制?
(1)技術(shù)實現(xiàn)簡單,計算機是由邏輯電路組成,邏輯電路通常只有兩個狀態(tài),開關(guān)的接通與斷開,這兩種狀態(tài)正好可以用“1”和“0”表示。
(2)簡化運算規(guī)則:兩個二進制數(shù)和、積運算組合各有三種,運算規(guī)則簡單,有利于簡化計算機內(nèi)部結(jié)構(gòu),提高運算速度。
(3)適合邏輯運算:邏輯代數(shù)是邏輯運算的理論依據(jù),二進制只有兩個數(shù)碼,正好與邏輯代數(shù)中的“真”和“假”相吻合。
(4)易于進行轉(zhuǎn)換,二進制與十進制數(shù)易于互相轉(zhuǎn)換。
(5)用二進制表示數(shù)據(jù)具有抗干擾能力強,可靠性高等優(yōu)點。因為每位數(shù)據(jù)只有高低兩個狀態(tài),當受到一定程度的干擾時,仍能可靠地分辨出它是高還是低。
我們的宇宙誕生于137億年前的一次大爆炸。在宇宙之外的一個宇宙中,有一個星系與銀河系具有非常顯著的相似之處,在這個星系的一條旋臂上,存在著一個恒星系統(tǒng),這個系統(tǒng)中只有一顆恒星,這顆恒星也與我們的太陽非常相似,再將鏡頭放大,在這顆恒星周圍存在著八大行星,其中第三顆行星與我們的地球非常相似,這顆行星上同樣也存在著高等直立智慧生物,其中有一個生物和您非常相似,過著同樣的生活,更重要的是,此時此刻,他與您一樣,也正在閱讀這篇文章正文第一段的最后一行。
在X86系統(tǒng)里面,其實有多個尋址空間(Memory空間、IO空間、PCI的配置空間)類似于獨立的多個并行的宇宙,雖然沒有多宇宙的相似性,但是每個空間通過自己的指令,自己獨立編制,是不同的空間,互不干涉。這在RISC處理器的編址方式里面,是不涉及的,在RISC處理器中,一般所有的外設(shè),內(nèi)存,寄存器都在統(tǒng)一的尋址空間。
IO空間
通過in/ins、out/outs指令訪問。
16位地址范圍(0-0FFFFh)。
對于x86架構(gòu)來說,通過IN/OUT指令訪問。PC架構(gòu)一共有65536個8bit的I/O端口,組成64KI/O地址空間,編號從0~0xFFFF。連續(xù)兩個8bit的端口可以組成一個16bit的端口,連續(xù)4個組成一個32bit的端口。I/O地址空間和CPU的物理地址空間是兩個不同的概念,例如I/O地址空間為64K,一個32bit的CPU物理地址空間是4G。
MMIO占用CPU的物理地址空間,對它的訪問可以使用CPU訪問內(nèi)存的指令進行。一個形象的比喻是把文件用mmap()后,可以像訪問內(nèi)存一樣訪問文件、同樣,MMIO是用訪問內(nèi)存一樣的方式訪問I/O資源,如設(shè)備上的內(nèi)存。MMIO不能被cache,原因以前很多帖子論述過,就不多說了(有特殊情況,如VGA)。
Port I/O和MMIO的主要區(qū)別在于:
1)前者不占用CPU的物理地址空間,后者占有(這是對x86架構(gòu)說的,一些架構(gòu),如IA64,port I/O占用物理地址空間)。
2)前者是順序訪問。也就是說在一條I/O指令完成前,下一條指令不會執(zhí)行。例如通過Port I/O對設(shè)備發(fā)起了操作,造成了設(shè)備寄存器狀態(tài)變化,這個變化在下一條指令執(zhí)行前生效。uncache的MMIO通過uncahce memory的特性保證順序性。
3)使用方式不同
由于port I/O有獨立的64KI/O地址空間,但CPU的地址線只有一套,所以必須區(qū)分地址屬于物理地址空間還是I/O地址空間。早期的CPU有一個M/I針腳來表示當前地址的類型。
評論