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