關于I/O和存儲器操作,和CPU體系結構,和所用的操作系統都有關系。
比如X86的平臺下,I/O和存儲器分開編址,有專用的I/O讀寫指令。其他平臺如ARM中實際上是把I/O都映射到存儲器的地址里了,這種情況下操作I/O也就是操作存儲器了。
對于操作系統
通用的桌面OS,win95應用程序可以直接操作物理地址,2000/NT后出于安全性考慮應用程序對物理地址不能直接訪問了。
嵌入式OS里uc/os,uclinux這些不具備虛擬地址概念的,可以直接用指針訪問物理地址。而wince和其他引入了虛擬地址管理的OS,只能訪問到虛擬地址了。如果想訪問某個物理地址,必須先作一個物理地址到虛擬地址的映射,再訪問。對于設備I/O最好是用專門的宏來操作,比如READ_PORT_xxx,READ_RGISTER_xxx之類的。如果用指針操作,最好聲明成volatile類型,避免被編譯器優化。