欢迎光临
我们一直在努力

计算机原理—内存管理常见概念

一、介绍

好,老生常谈的内存又来了。这次咱们从计算机系统偏硬件的角度来看看一下内存中有哪些常见的技术。其实,明白了硬件底层支撑,才能更好的理解上层软件为什么会出现那么多的内存相关技术。就能更好的理解内存优化的原理以及优化的方向。

二、内存常见的技术(硬件角度)

在现代的计算机系统中,内存及与之相关的虚拟化和设备IO的交互和虚拟化,是一个重要的底层技术支撑。象前面分析过的云相关的技术都在这方面进行扩展。
而从偏硬件的角度看内存常见的技术,主要包括:

  • MMU
    Memory Management Unit,内存管理单元,用于将CPU的虚拟地址转换为物理地址,从而进行进程隔离等应用。内存管理单元实现了虚拟地址和物理地址的分离,极大的扩展了内存的应用和安全可靠的保障。它出现比较早,大约在1960年左右出现
  • IOMMU
    Input-Output Memory Management Unit,IO内存管理单元。用于将IO(外设如硬盘、USB等)的虚拟地址与物理地址的转换。同样也提高了IO访问的安全性。它出现较晚,大约在1990年后才出现
  • MMIO
    Memory-Mapped I/O,内存映射IO。一般用于CPU直接操作内存来实现对IO设备的内存(主要是寄存器)访问。它出现于上世纪70年代,相对也较早
  • 三、应用场景

    MMU的应用一般是系统底层应用,对于绝大多数的开发者说,此技术都是透明的。它主要用于进程地址的虚拟地址和物理地址的转换或相关分页、共享内存等技术的实现。
    IOMMU一般用于IO设备的DMA时居多,DMA是技术是绕过内核和CPU的一种高效数据传输方式,而此时就需要对内存访问的方式、安全性进行控制,IOMMU就解决了这个问题。
    MMIO的应用场景主要是对外设的操作,主要是寄存器和缓存等。应用比较广泛的是网络硬件和显卡。通过MMIO,CPU可以直接操作IO的寄存器等,实现透明操作。
    可能大家对于上述的技术都有一种似乎明白但又摸不到的感觉。不过,在实际的应用场景中,很多情况下大家都在使用上面的技术。最典型的就是内存映射mmap,有没有在网络接收大量数据时通过mmap映射到硬盘上进行大数据的读写操作。而在内核中,也提供了一个类似的机制ioremap,这个用得比较少,就不展开说明了。

    四、分析

    很多人在学习操作系统或计算机原理时,可能对上面的技术都有过了解,甚至有过相当深入的分析和学习。但当时的学习更侧重于对原理和实现,而对与上层的内存应用介绍的就非常泛簹了。
    MMU实现了从实际的物理上限到理论上的“无”上限(当然还是有上限的只是理论上可能),它类似于抽象隔离,既让开发者不再关注物理内存空间的是否可用,又让物理空间的实际应用脱离了开发者直接操作导致的各种风险。通过程的虚拟地址与物理地址的自动转换,提高了内存的利用率。大家不必非纠结于教科书上的什么页表啊,转换啊等等技术细节,明白MMU的本质是什么就可以了。
    需要指出的是,为了提高转换的效率,MMU一般是集成在CPU中的。当然,在某些特定场景下,如一些低功耗的IOT应用、MCU等等中,可能出于某种目的没有集成MMU。这要看具体的芯片的设计和相关的应用了。
    对于IOMMU来说,其实就是IO设备也需要使用内存,而内存地址一般是虚拟地址操作的,所以,就必须提供一个类似于MMU的IO的MMU。而且,地址空间是可以人为划分成哪些IO使用的。IOMMU一般是需要设备需要直接操作内存时才会用到,另外其重要的一点是可以对IO的中断进行重映射。这些特点让它在容器和虚拟化技术中起到了重要的作用并优化IO的性能和相关的硬件的利用率。
    MMIO技术将外设IO的地址空间映射到了基于CPU的统一的内存地址空间,这样,就不需要提供专门的IO地址操作命令并在硬件上提供额外的通信地址编解码电路。在硬件设计和驱动开发上都提高了效率。
    这三项技术在实际的应用中,往往是共同结合使用的,来完成一系列的相关地址处理,“众人拾柴火焰高”。

    五、总结

    MMU用于面对CPU,IOMMU用于面对设备IO,而MMIO是用于为CPU和IO搭建一个沟通的“桥梁”。而它们一起发力,就形成了虚拟化的底层技术支持,进而为现代的云技术产生提供了硬件的保证。

    赞(0)
    未经允许不得转载:171主机测评 » 计算机原理—内存管理常见概念
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址