在 2010年10月28日 下午5:25,Androsphinx.avatar <Androsphi...@gmail.com>写道:
在不同的体系结构下,可能有不同的编址方式。我看到有说,在统一编址方式下,很多外设有自己的内存、缓冲区,外设的寄存器和内存统称“I/O空间”。但如果,在独立编址方式下,这种外设的内存(如显存),也是在I/O空间嘛?
我想应该一直都是在内存空间里面吧,不区分编址方式?
外设的内存分布是有BIOS启动时就决定好了吧?
我的理解是外设的的内存分布 是硬件做死了的。例如每个设备所用的端口是固定的。
像Intel x86如果在以前没有内存映射(MMIO)的技术,它又是如何访问外设内存的呢?
这个不懂,猜想要是外设的内存引出地址线来访问或者通过固定端口读取来外设内存。等待高手解答。
像Intel x86如果在以前没有内存映射(MMIO)的技术,它又是如何访问外设内存的呢?
独立编址和统一编址都有内存IO空间,统一编址对外设和内存的访问时统一的。独立编址的体系结构下系统对外设的访问也是一样,只是外设和内存空间可能不再连续了。外设的IO分布是由系统硬件决定的,BIOS只是读取内存分布,不能决定内存分布。好像是这样,具体可以查一下汇编语言和计算机体系结构书。Intel的体系好像都是统一编址的体系。
2010/10/28 tony zhao <tonyz...@gmail.com>独立编址和统一编址都有内存IO空间,统一编址对外设和内存的访问时统一的。独立编址的体系结构下系统对外设的访问也是一样,只是外设和内存空间可能不再连续了。外设的IO分布是由系统硬件决定的,BIOS只是读取内存分布,不能决定内存分布。好像是这样,具体可以查一下汇编语言和计算机体系结构书。Intel的体系好像都是统一编址的体系。
其实我比较疑惑的是,I/O端口是一些寄存器,而显卡显存是实际的存储单元,它们在独立编址方式下,会独立于内存空间,一起在I/O空间寻址嘛? 我看到I/O空间是只有64K大小的。所以我判断,显卡显存是不在I/O空间寻址的,而是一直被映射到内存空间。
Intel的x86是独立编址的,IA64和atom不清楚。之所以可以像存取内存那样访问IO端口,是因为用了ioremap。
ARM等RISC是统一编址的。
端口就是外设的内存。
我觉得区分独立和统一编址,看汇编指令就可以了。比如x86的,就是out in 来访问IO端口。