CPU访问外设有两种方式:IO与内存统一编址&IO与内存的独立编址

一、外设都是通过读写设备上的寄存器来进行访问的,外设寄存器也成为“”I/O端口“”,而IO端口有两种编址方式:独立编址和统一编址。

1)统一编址:寄存器参与内存统一编址。外设接口中的IO寄存器(即IO端口)与主存(内存)单元一样看待,每个端口占用一个存储单元的地址,将主存的一部分划分出来用作IO的地址空间。(理解:把外设的寄存器当做是一个内存地址,从而以类似访问内存相同的方式来操作外设)

/*举例说明*/

比如基于ARM内核的S5PV210就是使用统一编址的,就是内存和外设的编址放到一起来规划,被外设用了的地址就不能给内存了,反之亦然! 比如:给外设分配地址0~N,那么内存就不能使用0~N了,只能使用N~M!

 

2)独立编址:将外设的寄存器看成一个独立的地址空间。IO地址与存储地(内存)址分开独立编址,I/O端口地址不占用存储空间的地址范围。这样,在系统中就存在了另一种与存储地址无关的IO地址。此时,需要使用专用的CPU指令来访问某种特定外设。

/*举例说明*/

比如Intel的x86就是使用独立编址的,内存和外设分开独立编址(它们的地址原则上可以有重合区域);因为独立,所以内存编址可以从0~N,外设编址也可以从0~N;

 

二、独立编址与统一编址的区别:独立编址访问外设有专门的I/O指令(比如:x86的in/out等指令),也就是独立编址会存在IO空间的概念。而统一编址对外设的访问和都内存的访问指令可以是一样的(这样使用起来更方便)!

 

三、独立编址与统一编址的优缺点:

1)独立编址:优点是不占用CPU的内存地址

                           缺点是编程比较复杂,也就是CPU访问外设时相对复杂

2)统一编址:优点是编程比较简单,也即是CPU访问外设时可以像访问内存一样,这样使用起来简单

                           缺点是会占用CPU的内存地址

 

四、总结

对于某一特定的系统,他要么是独立编址,要么是统一编址,具体是采用哪一种则取决于CPU的体系结构。

目前,大多数嵌入式微控制器如ARM、PowerPC等并不提供I/O空间,仅有内存空间,可直接用地址、指针访问。

但对于Linux内核而言,它可能用于不同的CPU,所以它必须都要考虑这两种方式,于是它采用一种新的方法,将基于   I/O映射方式(对应于独立编址)    的或    内存映射方式(对应于统一编址)     I/O端口通称为“I/O区域”(I/O region),不论你采用哪种方式,都要先申请IO区域:request_resource(),结束时释放它:release_resource()。

 

【有个疑问】这里所说的 I/O映射方式的I/O端口,是与独立编址挂钩吗?内存映射方式的I/O端口,是与统一编址挂钩吗?

【鉴于疑问的补充】统一编址的CPU,由于没有专门用于设备I/O的指令(即没有I/O空间),称为所谓的“I/O内存”方式,也就是所谓的内存映射方式。另一类CPU(典型的如X86),属于独立编址的CPU,由于访问内存的指令不能直接用来访问这些寄存器,因此,需要专用的CPU指令(如IN和OUT指令)来对寄存器进行访问(读操作与写操作),这就是所谓的“ I/O端口”方式,也就是所谓的 I/O映射方式

【助记】独立编址---IO空间、内存空间--“ I/O端口”方式--I/O映射方式

               统一编址---只有内存空间---“I/O内存”方式---内存映射方式

【注】关于IO端口和IO内存的区分及联系请看另一篇文章《IO端口和IO内存的区分及联系》

下面简单介绍一下这两个概念:IO端口:当寄存器或内存位于IO空间时,称为IO端口。

                                                       IO内存:当寄存器或内存位于内存空间时,称为IO内存。

  • 12
    点赞
  • 71
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值