x86架构设置两类地址空间的设计目的是什么?
x86采用多地址空间设计的核心思路
x86的独立IO地址空间(也就是和内存地址空间分离的双地址空间设计)是其诞生年代的硬件条件和实际需求共同决定的,核心设计逻辑可以归纳为以下几点:
- 降低早期硬件设计成本:x86架构起源于1978年的8086处理器时代,当时IO设备的运行速度远低于内存,且硬件电路工艺水平有限。独立IO地址空间仅需要16位地址线即可实现64KB IO端口的寻址,对比当时20位的内存地址线,IO端口的译码电路不需要处理全量地址位,大幅降低了主板硬件的设计复杂度和制造成本。
- 简化指令与逻辑区分:x86专门设计了
in/out指令用于IO端口操作,和普通内存读写指令完全区分开,不管是程序员还是硬件总线控制器,都可以直接通过指令类型判断当前操作的对象是内存还是外设,不需要额外的标志位做区分,降低了早期汇编编程和硬件设计的出错概率。 - 天然的操作隔离能力:x86诞生初期操作系统还没有成熟的内存保护机制,独立的IO地址空间天然将外设操作和内存操作进行了隔离,普通应用程序不能通过常规内存读写指令随意操作IO设备,一定程度上减少了误操作导致硬件故障的概率。
目前主流x86处理器早已支持内存映射IO(MMIO),也就是和ARM、RISC-V相同的单地址空间访问逻辑,性能和灵活性都远高于传统独立IO地址空间,现在仅老式 legacy 设备(如ISA总线设备、老式串口、PS/2接口设备等)还在使用独立IO地址空间。
内容的提问来源于stack exchange,提问作者ser
相关产品推荐
相关产品推荐

