複製鏈接
請複製以下鏈接發送給好友

尋址空間

鎖定
尋址空間一般指的是CPU對於內存尋址的能力。通俗地説,就是能最多用到多少內存的一個問題。數據在存儲器(RAM)中存放是有規律的 ,CPU在運算的時候需要把數據提取出來就需要知道數據存放在哪裏 ,這時候就需要挨家挨户的找,這就叫做尋址,但如果地址太多超出了CPU的能力範圍,CPU就無法找到數據了。 CPU最大能查找多大範圍的地址叫做尋址能力 ,CPU的尋址能力以字節為單位 ,如32位尋址的CPU可以尋址2的32次方大小的地址也就是4G,這也是32位的CPU最大能搭配4G內存的原因 ,再多的話CPU就找不到了。
中文名
尋址空間
外文名
Addressing space
含    義
CPU對於內存尋址的能力
通俗含義
能最多用到多少內存
尋址能力
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~0x01F
0x1F0~0x1F7
0x020~0x03F
0x278~0x27F
並行打印機端口2
0x040~0x05F
8253/8254A 定時計數器
0x2F8~0x2FF
串行控制器2
0x060~0x06F
0x378~0x37F
並行打印機端口1
0x070~0x07F
訪問CMOS RAM/實時時鐘RTC(Real Time Clock)端口
0x3B0~0x3BF
單色MDA顯示控制器
0x080~0x09F
DMA頁面寄存器訪問端口
0x3C0~0x3CF
彩色CGA顯示控制器
0x0A0~0x0BF
0x3D0~0x3DF
彩色EGA/VGA顯示控制器
0x0C0~0x0DF
0x3F0~0x3F7
軟盤控制器
0x0F0~0x0FF
協處理器訪問端口
0x3F8~0x3FF
串行控制器1
0x170~0x177
-
-
對於使用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]# [1] 
參考資料