共找到2條詞條名為定址空間的結果 展開

定址空間

定址空間

定址空間一般指的是CPU對於內存定址的能力。通俗地說,就是能最多用到多少內存的一個問題。數據在存儲器(RAM)中存放是有規律的,CPU在運算的時候需要把數據提取出來就需要知道數據存放在哪裡,這時候就需要挨家挨戶的找,這就叫做定址,但如果地址太多超出了CPU的能力範圍,CPU就無法找到數據了。 CPU最大能查找多大範圍的地址叫做定址能力,CPU的定址能力以位元組為單位,如32位定址的CPU可以定址2的32次方大小的地址也就是4G,這也是為什麼32位的CPU最大能搭配4G內存的原因,再多的話CPU就找不到了。

簡介


I/O埠和定址
CPU為了訪問I/O介面控制器或控制卡上的數據和狀態信息,需要首先指定它們的地址。這種地址就稱為I/O埠地址或者簡稱埠。通常,一個I/O控制器包含訪問數據的數據埠、輸出命令的命令埠和訪問控制器執行狀態的狀態埠。埠地址的設置方法一般有兩種:統一編址和獨立編址。
埠統一編址的原理是把I/O控制器中的埠地址歸入存儲器定址地址空間範圍內。因此這種編址方式也稱為存儲器映像編址。CPU訪問一個埠的操作與訪問內存的操作一樣,也使用訪問內存的指令。埠獨立編址的方法是把I/O控制器和控制卡的定址空間單獨作為一個獨立的地址空間對待,稱為I/O地址空間。每個埠有一個I/O地址與之對應,並且使用專門的I/O指令來訪問埠。
IBM PC及其兼容機主要使用獨立編址方式,採用了一個獨立的I/O地址空間對控制設備中的寄存器進行定址和訪問。使用ISA匯流排結構的傳統PC,其I/O地址空間範圍是0x000~0x3FF,有1024個I/O埠地址可供使用。各個控制器和控制卡所默認分配使用的埠地址範圍見表2-1。關於這些埠的使用和編程方法將在後面具體涉及相關硬體時再詳細進行說明。
另外,IBM PC也部分地使用了統一編址方式。例如,CGA顯示卡上顯示內存的地址就直接佔用了存儲器地址空間0xB800~0xBC00範圍。因此若要讓一個字元顯示在屏幕上,可以直接使用內存操作指令往這個內存區域執行寫操作。

埠地址分配


埠地址範圍分配說明埠地址範圍分配說明
0x000~0x01F8237A DMA控制器10x1F0~0x1F7IDE硬碟控制器
0x020~0x03F8259A 可編程中斷控制器10x278~0x27F并行印表機埠2
0x040~0x05F8253/8254A 定時計數器0x2F8~0x2FF串列控制器2
0x060~0x06F8042 鍵盤控制器0x378~0x37F并行印表機埠1
0x070~0x07F訪問CMOS RAM/實時時鐘RTC(Real Time Clock)埠0x3B0~0x3BF單色MDA顯示控制器
0x080~0x09FDMA頁面寄存器訪問埠0x3C0~0x3CF彩色CGA顯示控制器
0x0A0~0x0BF8259A 可編程中斷控制器20x3D0~0x3DF彩色EGA/VGA顯示控制器
0x0C0~0x0DF8237A DMA控制器20x3F0~0x3F7軟盤控制器
0x0F0~0x0FF協處理器訪問埠0x3F8~0x3FF串列控制器1
0x170~0x177IDE硬碟控制器1
對於使用EISA或PCI等匯流排結構的現代PC,有64KB的I/O地址空間可供使用。在普通Linux系統下通過查看/proc/ioports文件可以得到相關控制器或設置使用的I/O地址範圍:
[root@plinux root]# cat /proc/ioports
0000-001f : dma1
0020-003f : pic1
0040-005f : timer
0060-006f : keyboard
0070-007f : rtc
0080-008f : dma page reg
00a0-00bf : pic2
00c0-00df : dma2
00f0-00ff : fpu
0170-0177 : ide1
01f0-01f7 : ide0
02f8-02ff : serial(auto)
0376-0376 : ide1
03c0-03df : vga+
03f6-03f6 : ide0
03f8-03ff : serial(auto)
0500-051f : PCI device 8086:24d3 (Intel Corp.)
0cf8-0cff : PCI conf1
da00-daff : VIA Technologies, Inc. VT6102 [Rhine-II]
da00-daff : via-rhine
e000-e01f : PCI device 8086:24d4 (Intel Corp.)
e000-e01f : usb-uhci
e100-e11f : PCI device 8086:24d7 (Intel Corp.)
e100-e11f : usb-uhci
e200-e21f : PCI device 8086:24de (Intel Corp.)
e200-e21f : usb-uhci
e300-e31f : PCI device 8086:24d2 (Intel Corp.)
e300-e31f : usb-uhci
f000-f00f : PCI device 8086:24db (Intel Corp.)
f000-f007 : ide0
f008-f00f : ide1
[root@plinux root]#