关于统一编址与独立编址的一点疑问

133 views
Skip to first unread message

Androsphinx.avatar

unread,
Oct 28, 2010, 5:25:13 AM10/28/10
to linux...@googlegroups.com, sz...@googlegroups.com
在不同的体系结构下,可能有不同的编址方式。我看到有说,在统一编址方式下,很多外设有自己的内存、缓冲区,外设的寄存器和内存统称“I/O空间”。但如果,在独立编址方式下,这种外设的内存(如显存),也是在I/O空间嘛?
我想应该一直都是在内存空间里面吧,不区分编址方式?
外设的内存分布是有BIOS启动时就决定好了吧?
像Intel x86如果在以前没有
内存映射(MMIO)的技术,它又是如何访问外设内存的呢?

Androsphinx.avatar

unread,
Oct 28, 2010, 10:04:52 PM10/28/10
to linux...@googlegroups.com, sz...@googlegroups.com, Adam Jiang


2010/10/28 张扬 <w90...@gmail.com>


在 2010年10月28日 下午5:25,Androsphinx.avatar <Androsphi...@gmail.com>写道:

在不同的体系结构下,可能有不同的编址方式。我看到有说,在统一编址方式下,很多外设有自己的内存、缓冲区,外设的寄存器和内存统称“I/O空间”。但如果,在独立编址方式下,这种外设的内存(如显存),也是在I/O空间嘛?
我想应该一直都是在内存空间里面吧,不区分编址方式?
外设的内存分布是有BIOS启动时就决定好了吧?
   我的理解是外设的的内存分布 是硬件做死了的。例如每个设备所用的端口是固定的。 
端口是硬件做死的,但我想外设内存应该不会。
 
像Intel x86如果在以前没有内存映射(MMIO)的技术,它又是如何访问外设内存的呢?  
    这个不懂,猜想要是外设的内存引出地址线来访问或者通过固定端口读取来外设内存。等待高手解答。 

请深圳的朋友知道的,解下惑.
 

Anders Ma

unread,
Oct 28, 2010, 10:08:48 PM10/28/10
to sz...@googlegroups.com

 
像Intel x86如果在以前没有内存映射(MMIO)的技术,它又是如何访问外设内存的呢?  


透过 I/O 指令 in out 来访问外设。 

--
Regards
Anders

Androsphinx.avatar

unread,
Oct 28, 2010, 11:05:22 PM10/28/10
to linux...@googlegroups.com, sz...@googlegroups.com, Adam Jiang


2010/10/28 tony zhao <tonyz...@gmail.com>
独立编址和统一编址都有内存IO空间,统一编址对外设和内存的访问时统一的。独立编址的体系结构下系统对外设的访问也是一样,只是外设和内存空间可能不再连续了。外设的IO分布是由系统硬件决定的,BIOS只是读取内存分布,不能决定内存分布。好像是这样,具体可以查一下汇编语言和计算机体系结构书。Intel的体系好像都是统一编址的体系。

其实我比较疑惑的是,I/O端口是一些寄存器,而显卡显存是实际的存储单元,它们在独立编址方式下,会独立于内存空间,一起在I/O空间寻址嘛? 我看到I/O空间是只有64K大小的。所以我判断,显卡显存是不在I/O空间寻址的,而是一直被映射到内存空间。

Intel体系都是独立编址的,这东西确实容易混淆。

如果Intel没有MMIO那会怎么做?

内存空间分布好像并有硬件固定,而是BIOS可以调整的。

 
 

Anders Ma

unread,
Oct 28, 2010, 11:10:51 PM10/28/10
to sz...@googlegroups.com


2010/10/29 Androsphinx.avatar <Androsphi...@gmail.com>



2010/10/28 tony zhao <tonyz...@gmail.com>
独立编址和统一编址都有内存IO空间,统一编址对外设和内存的访问时统一的。独立编址的体系结构下系统对外设的访问也是一样,只是外设和内存空间可能不再连续了。外设的IO分布是由系统硬件决定的,BIOS只是读取内存分布,不能决定内存分布。好像是这样,具体可以查一下汇编语言和计算机体系结构书。Intel的体系好像都是统一编址的体系。

其实我比较疑惑的是,I/O端口是一些寄存器,而显卡显存是实际的存储单元,它们在独立编址方式下,会独立于内存空间,一起在I/O空间寻址嘛? 我看到I/O空间是只有64K大小的。所以我判断,显卡显存是不在I/O空间寻址的,而是一直被映射到内存空间。


你听过PIO读写设备内存的方法吗?你可以google看看。PIO方式主要是向I/O接口寄存器中写要操作设备内存的地址和数据,进而达到读写设备内存的目的。



--
Regards
Anders

王飞

unread,
Oct 29, 2010, 2:01:55 AM10/29/10
to sz...@googlegroups.com
通过窗口来操作的吧。统一编值有些情况对寄存器的读写也必须通过操作,比如 MSR 寄存器。
--
--

---------------
        致
礼!

 
王飞

Androsphinx.avatar

unread,
Oct 31, 2010, 5:51:13 AM10/31/10
to linux...@googlegroups.com, sz...@googlegroups.com


在 2010年10月29日 下午5:26,tek-life <omy...@gmail.com>写道:

Intel的x86是独立编址的,IA64和atom不清楚。之所以可以像存取内存那样访问IO端口,是因为用了ioremap。

ARM等RISC是统一编址的。

端口就是外设的内存。

我觉得区分独立和统一编址,看汇编指令就可以了。比如x86的,就是out in 来访问IO端口。

“对于x86架构来说,通过IN/OUT指令访问。PC架构一共有65536个8bit的I/O端口,组成64K个I/O地址空间,编号从 0~0xFFFF,有16位,80x86用低16位地址线A0-A15来寻址。连续两个8bit的端口可以组成一个16bit的端口,连续4个组成一个 32bit的端口。I/O地址空间和CPU的物理地址空间是两个不同的概念,例如I/O地址空间为64K,一个32bit的CPU物理地址空间是4G。 如,在Intel 8086+Redhat9.0 下用“more /proc/ioports”可看到。“

端口就是外设的内存?

那这里面的64K应该如何理解呢?


Reply all
Reply to author
Forward
0 new messages