代码之家  ›  专栏  ›  技术社区  ›  Alex B

为什么没有内存管理的硬件支持?

  •  11
  • Alex B  · 技术社区  · 14 年前

    虚拟内存被现代硬件所支持,但应用级内存分配仍然是所有实现的软件,是手工堆内存管理ALA-C和C++,或者VM级垃圾回收。

    除了经典的手动内存管理与垃圾收集的争论之外,为什么没有基于硬件的原语可以帮助在用户空间中构建高效的内存管理和/或垃圾收集方案(可能由操作系统公开或内置,然后是各种虚拟机)。

    硬件用于加速图形操作,卸载网络堆栈的各个部分,加密算法和音频/视频编解码器经常在硬件中实现,为什么不能为更高级别的内存管理构建块呢?它似乎无处不在,但我不知道任何硬件辅助实现。

    由于我缺乏硬件知识,这对我来说有点模糊,但我有兴趣听到

    1. 如果有这样的事情(至少在研究阶段),或
    2. 它是否会比传统的内存管理带来任何好处,或者
    3. 为什么在硬件中构建这样的东西是不可行的?
    6 回复  |  直到 14 年前
        1
  •  5
  •   Lothar    14 年前

    在上个千年的70和80年代,我们有很多这种硬件。所有这些lisp机器都非常擅长通过间接访问和双重间接访问来帮助内存管理(如果GC移动对象,则是必需的)。我们中的一些人还记得80286的最初几天,人们认为段可以用于更好的内存管理,并且在性能上失败了。

    目前的智慧状态是,为了通用用途而优化CPU,而不是添加一些有时只需要的特殊功能,这样做要好得多。

    现代垃圾收集器已经使用了一些操作系统功能,比如虚拟页面的脏标记来实现写屏障,但是另外,这些算法非常简单、简单和高级。不需要特别的硬件。

    我最近在使用HP-UX时发现了一个惊人的结果。您可以将虚拟页面大小设置为256MB,这将有效地转换虚拟内存。这使得这个CPU的性能提高了120%。TLB未命中比缓存未命中更严重。这让我想到了一个很好的旧MIPS体系结构,它在TLB中存储了一个进程ID,因此它不需要在每个进程开关上进行完整的TLB刷新。

    内存管理改进还有很大的空间,比一些高级垃圾收集功能更重要。

        2
  •  10
  •   Wim    14 年前

    理论上,你可以在硬件中实现一个完整的Java虚拟机,包括内存管理,我相信有一些研究项目(尝试)做到这一点。但有几个很好的理由 要在硬件中实现内容:

    • 硬件已修复,您无法轻松修补错误或实现更新/更好的算法
    • 硬件是昂贵的,对于诸如垃圾收集之类的复杂操作,您需要大量的硬件,而使用现有硬件资源的软件实现则要便宜得多。
    • 硬件资源占用空间并消耗(静态)能量,即使不在使用中,而未使用的软件代码的危害相对较小。

    最后,对于您想要的每个特性,您必须在这些成本和您获得的收益(更快或更低的执行能力)之间进行权衡。

    对于内存管理,这通常是一种复杂的算法,但并不经常运行,因此获得的收益将相当小(您可以将垃圾收集速度提高10倍,但如果开始时只需要1%的执行时间,那么何必费心呢?)另一方面,成本将是一个更大的芯片,其中大部分区域被浪费,因为大部分时间它是不活动的…

        3
  •  4
  •   Aaron Digulla    14 年前

    是的,有几个CPU内置内存管理和GC。其中一个是为 Ceres workstation . 它使用34位内存(即32位数据+2位额外内存)。

    现在很少有硬件支持GC有几个原因:

    1. 您需要一个特殊的主板-价格昂贵
    2. 您需要一个特殊的CPU--非常昂贵
    3. 您需要能够使用CPU和主板额外功能的特殊软件
    4. 关于如何提高GC的效率还有很多研究。这是一个非常活跃的区域,与我们通过设置单个像素绘制图像的时间相当。当我们了解到哪些部件可以标准化时,为其构建硬件是有意义的。
    5. 它会为所有不使用此功能的程序浪费内存

    [编辑]下一代“通用CPU”可能带有可编程区域。( FPGA )您可以在其中定义新的“汇编程序操作代码”。这将允许软件根据其特定需求修改CPU。这里要解决的问题是使FPGA的加载速度更快,这样它的内容就可以通过它们的过程进行切换。

    这将允许为

        4
  •  3
  •   codymanix    14 年前

    在奔腾这样的现代处理器中,有支持虚拟内存管理的功能。但是它的实现必须由操作系统来完成,因为有很多可能的算法可以用来管理内存。

    哪种算法最适合取决于内存的使用方式。在计算机上运行哪些类型的应用程序?它们能跑多久?运行了多少应用程序?以及如何组织任务切换。

    因此,你不能在硬件中硬接线。操作系统更了解如何有效地管理内存,因为它是为一种特殊的计算机类型(服务器与桌面操作系统)而设计的,而且它对计算机上运行的进程具有更高的级别视图。

        5
  •  2
  •   Don Mackenzie    14 年前

    在嵌入式空间中,Ajile Systems Inc., http://www.ajile.com/ 在具有可选GC的芯片产品上生成一系列JVM。它们还提供了多个JVM特征,其中Java进程独立地在自己的虚拟机上独立地执行具有完整内存保护的确定的、时间分割的调度。

    它们似乎提供了三种GC算法和一种关闭模式。所以不仅仅是芯片上的JVM,更像是芯片上的操作系统。

        6
  •  1
  •   Vilx-    14 年前

    对于这个问题,有很多不同的算法和方法,至今还没有人找到它们的任何共同原语。