2012-03-16 147 views
1

我研究了一下端口映射IO和內存映射IO,並且我找出了第一個工作原理(不是第二個工作原理),所以如果你有一些很好的解釋內存(我聽說它是​​關於通過操作系統攔截頁面錯誤將它們重新路由到設備)請讓我知道。澄清誰決定內存映射和端口IO映射

無論如何,我的問題是:與內部實時時鐘(RTS)通信使用I/O端口映射,您需要使用outb(byte_selected,0x70)和0x70端口上的類似函數..誰決定0x70港口?我怎麼知道他們在哪裏宣佈?那麼內存映射IO呢?誰決定哪些地址與哪些設備相關聯?如果我將自己的設備添加到系統中,它的內存將如何映射?

我還有一個關於OS-HW通信很混亂..

回答

1

內存映射由硬件製造商決定的,在公共汽車上硬連接。它們不能被改變,必須從硬件規格中讀取正確的映射。

一些類似PCI的可插拔總線通過爲自己的設備擁有自己的地址空間而工作。他們可以根據I/O檢測設備的存在及其需求,並將它們分配到此保留空間內。然後CPU可以使用PCI寄存器通過自己的空間訪問它,或者通過DMA更高效地訪問它。有關更多詳細信息,請參見此頁:http://tldp.org/LDP/tlk/dd/pci.html

請注意,並非所有設備都使用映射I/O - 例如,USB設備不使用內存I/O,只通過定義良好的USB命令與主機通信。

+1

但請注意,USB主控制器通常會使用內存映射I/O來生成這些命令。另請注意:使用'outb'的示例是基於端口的I/O,它是一種特殊的x86特性,它與內存映射I/O不同。這是一件遺留的事情,而這些映射完全是硬連線的。 – pmdj 2012-03-17 17:07:57

+0

偉大的一點我忘了提及。 int/outb不使用內存映射,而是使用自己的16位地址空間。這是非常遺傳的東西,除了x86上的基本配置外,現在還沒有如此使用。再次映射是靜態決定的,儘管一些非常舊的ISA卡(聲卡,重力超聲...)允許您使用跳線來更改它們使用的I/O端口(如IRQ和DMA)。 PCI及其自動配置使其無用(並且PCI也使用其自己的地址空間)。 – Gnurou 2012-03-18 03:28:17