Operating system 内存映射io和io映射io之间有什么区别

Operating system 内存映射io和io映射io之间有什么区别,operating-system,linux-kernel,Operating System,Linux Kernel,请解释内存映射IO和IO映射IO之间的区别,。。。除非我误解了,你说的是两件完全不同的事情。我会给你两个非常简短的解释,这样你就可以用谷歌搜索你现在需要的东西 内存映射I/O意味着将I/O硬件设备的内存映射到主内存映射。也就是说,计算机内存中的地址实际上并不对应于RAM,而是对应于外部设备的内部寄存器和内存。这就是波蒂所说的机器架构 还有映射I/O,这意味着获取(比如)一个文件,并让操作系统在内存中加载部分文件,以便以后更快地访问。在Unix中,这可以通过mmap()实现 我希望这会有所帮助。在

请解释内存映射IO和IO映射IO之间的区别,。。。除非我误解了,你说的是两件完全不同的事情。我会给你两个非常简短的解释,这样你就可以用谷歌搜索你现在需要的东西

内存映射I/O意味着将I/O硬件设备的内存映射到主内存映射。也就是说,计算机内存中的地址实际上并不对应于RAM,而是对应于外部设备的内部寄存器和内存。这就是波蒂所说的机器架构

还有映射I/O,这意味着获取(比如)一个文件,并让操作系统在内存中加载部分文件,以便以后更快地访问。在Unix中,这可以通过
mmap()
实现


我希望这会有所帮助。

在x86上有两个不同的地址空间,一个用于内存,另一个用于I/O端口

端口地址空间限制为65536个端口,并使用IN/OUT指令进行访问

例如,可以使用一些I/O端口访问视频卡的VGA功能,但帧缓冲区是内存映射的


其他CPU架构只有一个地址空间。在这些架构中,所有设备都是内存映射的。

这两者之间还有一个明显的区别。内存映射I/O设备是在IO/M低时响应的I/O设备。而I/O(或外围设备)映射的I/O设备是在IO/M高时响应的设备。

内存映射的I/O映射到与程序内存和/或用户内存相同的地址空间,并以相同的方式访问

端口映射I/O使用单独的专用地址空间,并通过一组专用微处理器指令进行访问

由于16位处理器将逐渐过时,并在一般情况下被32位和64位处理器所取代,因此为I/O保留内存地址空间范围的问题不大,因为处理器的内存地址空间通常比系统中所有内存和I/O设备所需的空间大得多

因此,利用内存映射I/O的好处变得更加实际

这种方法的缺点是必须对每个设备的整个地址总线进行完全解码。例如,具有32位地址总线的机器需要逻辑门来解析所有32条地址线的状态,以正确解码任何设备的特定地址。这增加了向机器添加硬件的成本

IO映射IO系统的优点是,解码离散地址所需的逻辑更少,因此向机器添加硬件设备的成本更低。然而,可能需要更多的说明


Ref:-

内存映射I/O映射到与程序内存和/或用户内存相同的地址空间,并以相同的方式访问

I/O映射I/O使用单独的专用地址空间,并通过一组专用微处理器指令进行访问

这两种方案之间的差异出现在微处理器/微控制器的内部。英特尔的微处理器大多采用I/O映射方案,摩托罗拉则采用内存映射方案


这似乎更像是一个机器架构问题,而不是一个编程问题。试着用ServerFault提问。com@DOK:你怎么会认为这是一个SF问题?@Pointy:至少在编写驱动程序时,这是一个值得关注的问题。目前还不清楚kabhay是否在这个级别上工作,但是…这个问题的答案对于任何为x86构建驱动程序的人来说都是非常重要的。因此,我认为它属于这里。你的答案是信息性的,但你没有解释IO映射IO。“计算机内存中的地址实际上并不对应于你的RAM,而是对应于外部设备的内部寄存器和内存。”每个设备都有自己的内部寄存器和内存映射到RAM吗(例如:打印机可以有4个寄存器,而网络摄像头可以有7个寄存器),或者是否有所有设备都必须实现的标准数量的寄存器和内存?每个设备在内部和接口方面都不同。可以使用内存映射,也可以不使用。对于8位追溯类型、6502已使用内存映射和Z80已使用IO映射,它高度依赖于设备。