I/O端口编址方式:统一编址和独立编址


微机原理与接口技术复习


PS:微处理器系统采用存储映像方式编址时 存储单元 与 I/O端口 是通过 不同的地址编码 来区分的!

编址方法

8086CPU和外部设备之间是通过I/O接口进行联系的,从而达到相互间传输信息的目的。每个I/O芯片上都有一个端口或几个端口,一个端口往往对应于芯片上的一个寄存器或一组寄存器。微机系统要为每个端口分配一个地址,这个地址成为端口号。各个端口号和存储器单元地址一样,具有唯一性。外设都是通过读写设备上的寄存器来进行的,外设寄存器也称为“I/O端口”,而I/O端口有两种编址方式:独立编址和统一编址。

(1)统一编址

基本概念:

外设结构中的I/O寄存器(即I/O端口)与主存单元一样看待,每个端口占用一个存储单元的地址,将主存的一部分划出来用作I/O地址空间,如,在PDP-11中,把最高的4K主存作为I/O设备寄存器地址。端口占用了存储器的地址空间,使存储容量减小。

此统一编址也称为“I/O内存”方式,外设寄存器位于“内存空间”(很多外设有自己的内存、缓冲区、外设的寄存器和内存统称“I/O空间”)。

优点:

可以利用存储器的寻址方式来寻址I/O端口。

缺点:

I/O端口占用了存储空间,而且进行I/O操作时,因地址编码较长,将导致速度较慢。

举例:

Samsung的S3C2440,是32位ARM处理器,它的4GB地址空间被外设、RAM等瓜分:


      0x8000 1000 LED 8*8点阵的地址
    0x4800 0000 ~ 0x6000 0000 SFR(特殊暂存器)地址空间
    0x3800 1002 键盘地址
    0x3000 0000 ~ 0x3400 0000 SDRAM空间 
    0x2000 0020 ~ 0x2000 002e IDE
    0x1900 0300 CS8900

(2)独立编址

基本概念:

独立编址又称为单独编址,I/O地址与存储地址分开独立编址,I/O端口地址不占用存储空间的地址范文,这样,在系统中就存在了另一种与存储地址无关的I/O地址,CPU也必须具有专用于输入输出操作的指令(IN、OUT等)和控制逻辑。独立编址下,地址总线上过来一个地址,设备不知道是给I/O端口的、还是给寄存器的,于是处理器通过MEMR/MEMW和IOR/IOW两组控制信号来实现对I/O端口和存储器的不同寻址。如,intel 80x86就采用单独变回,CPU内存和I/O是一起编址的,就是说内存一部分的地址和I/O地址是重叠。

独立编址也称为“I/O端口”方式,外设寄存器位于“I/O(地址)空间”。

对于x86架构来说,通过IN/OUT指令。PC架构一共有65536个8bit的I/O端口,组成64K个I/O端口,编号从0~0xFFF,有16位,80x86用低16位地址线A0~A15来寻址。连续两个8bit的端口可以组成一个16bit的端口,连续4个组成一个32bit的端口。I/O地址空间和CPU的物理地址空间是两个不同的概念,例如I/O地址空间为64K,一个32bit的CPU物理地址空间是4G。

优点:

不占用内存空间;使用I/O指令,程序清晰,很容易看出是I/O操作还是存储器操作;译码电路比较简单(因为I/O端口的地址空间一般比较小,所用地址线也比较少)。

缺点:

只能用专门的I/O指令,访问端口的方法不如访问存储器的方法多。

举例:

在Intel 8086+Redhat9.0下用“more /proc/ioports”可以看到:

        0000-001f : dma1
     0020-003f : pic1
     0040-005f : timer
     0060-006f : keyboard
     0070-007f : rtc
     0080-008f : dma page reg
     00a0-00bf : pic2
     00c0-00df : dma2
     00f0-00ff : fpu
     0170-0177 : ide1
     ……

不过Intel x86平台普通使用了名为内存映射(MMIO)的技术,该技术是PCI规范的一部分,IO设备端口被映射到内存空间,映射后,CPU访问I/O端口就如同访问内存一样。看Intel TA 719文档给出的x86/x64系统典型内存地址分配表:

系统资源 占用

---------------------------------------------------------------------------------------------------------------------

       BIOS 1M
    本地APIC 4K
    芯片组保留 2M
    IO APIC 4K
    PCI设备 256M
    PCI Express设备 256M
    PCI设备(可选) 256M
    显示帧缓存 16M
    TSEG 1M

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

 

  • 21
    点赞
  • 111
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
### 回答1: I/O端口编址方式主要有两种:基于端口编址和基于内存映射编址。 1. 基于端口编址:这种方式下,每个I/O设备都被赋予了一个唯一的端口号。程序每次需要与设备进行通信时,都需要指定设备的端口号。在x86架构的计算机中,使用in和out指令进行I/O操作。 2. 基于内存映射编址:这种方式下,I/O设备被映射到计算机的内存地址空间中,程序通过读写内存地址的方式与设备进行通信。在这种方式下,程序可以像访问内存中的数据一样访问I/O设备。在Linux系统中,使用mmap系统调用进行内存映射。 ### 回答2: I/O端口编址方式有两种:内存映射I/O和端口映射I/O。 1. 内存映射I/O:内存映射I/O是将I/O设备与内存地址空间进行映射,使得I/O设备在内存中拥有一段地址空间。通过读写这段地址空间来实现对I/O设备的访问和控制。在这种方式下,CPU与I/O设备之间的通信与内存之间的通信是一致的,可以通过使用读写指令来进行读写操作。内存映射I/O的优点是简单、灵活,不需要使用专门的I/O指令,但同时也需要对内存地址进行保护,以避免访问冲突。 2. 端口映射I/O:端口映射I/O是将I/O设备与一组预留的特定地址,即端口地址进行映射。通过专门的I/O指令来访问和控制I/O设备,在控制程序中使用专门的读写端口指令来访问设备的状态、读取输入或写入输出。端口映射I/O的优点是可以对I/O设备进行地址保护,提高系统的安全性。但缺点是需要额外的读写指令,增加了指令的复杂度和执行的时间。 总而言之,内存映射I/O和端口映射I/O是两种常见的I/O端口编址方式。内存映射I/O简单灵活,而端口映射I/O可以提高系统的安全性,具体使用哪种方式需要根据系统的需求和硬件平台的特点来决定。 ### 回答3: I/O端口编址方式有两种:内存映射I/O和端口映射I/O。 1. 内存映射I/O(Memory-Mapped I/O)是一种将设备寄存器映射到主存地址空间的方式。在这种方式下,I/O设备与内存单元共用相同的地址空间。I/O设备的寄存器被映射到特定的内存地址上,通过读写该地址来访问I/O设备。这种方式类似于访问主存中的普通数据,可以使用普通的读写指令进行操作。内存映射I/O简化了访问I/O设备的编程,但也增加了对内存地址的竞争,需要通过特殊的指令和技术来保证数据的正确性。 2. 端口映射I/O(Port-Mapped I/O)是一种使用专门的指令来访问I/O设备的方式。在这种方式下,I/O设备被映射到独立端口地址空间中,通过特殊的读写端口指令来访问I/O设备。这些指令通常是特定于处理器体系结构的,可以直接读写I/O设备的寄存器。端口映射I/O较为灵活,可以避免对内存地址的竞争,但需要额外的指令和编程技巧来操作。 总之,内存映射I/O和端口映射I/O是常见的I/O端口编址方式。各自具有优缺点,选择适合的方式取决于具体应用需求和系统架构。
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

HuaCode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值