Memory management 为什么不是';内存管理没有硬件支持吗? 虚拟内存是由现代硬件支持的,但应用级内存分配仍然是全部实现的软件,是手工堆内存管理ALAC和C++,或者VM级垃圾回收。

Memory management 为什么不是';内存管理没有硬件支持吗? 虚拟内存是由现代硬件支持的,但应用级内存分配仍然是全部实现的软件,是手工堆内存管理ALAC和C++,或者VM级垃圾回收。,memory-management,hardware,Memory Management,Hardware,除了经典的手动内存管理与垃圾收集之争,为什么没有基于硬件的原语可以帮助在用户空间中构建高效的内存管理和/或垃圾收集方案(可能由操作系统公开或内置,然后是各种虚拟机) 硬件用于加速图形操作,卸载网络堆栈的各个部分,加密算法和音频/视频编解码器经常在硬件中实现,为什么不能使用更高级别内存管理的构建块?它似乎无处不在,但我不知道任何硬件辅助实现 鉴于我缺乏硬件知识,这对我来说有点模糊,但我很想听听 如果真有这样的事情(至少在研究阶段),或者 与传统的内存管理相比,它是否会带来任何好处 为什么在硬件中构

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

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

鉴于我缺乏硬件知识,这对我来说有点模糊,但我很想听听

  • 如果真有这样的事情(至少在研究阶段),或者
  • 与传统的内存管理相比,它是否会带来任何好处
  • 为什么在硬件中构建这样的东西是不可行的

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

    • 硬件是固定的,您无法轻松修补bug或实现更新/更好的算法
    • 硬件是昂贵的,对于诸如垃圾收集之类的复杂操作,您将需要大量硬件,而使用现有硬件资源的软件实现则要便宜得多
    • 硬件资源占用空间并消耗(静态)电源,即使在不使用的情况下也是如此,而未使用的软件代码危害相对较小
    最后,对于您想要的每个功能,您必须在这些成本和您所获得的收益(更快或更低的执行能力)之间进行权衡


    对于内存管理,通常是复杂的算法,但并不经常运行,其收益将非常小(您可以将垃圾收集速度提高10倍,但如果一开始只需要1%的执行时间,为什么还要麻烦呢?),将是一个更大的芯片,其中大部分区域被浪费,因为它大部分时间处于非活动状态…

    是的,有几个CPU内置了内存管理和GC。其中一个是N320xx CPU的定制版本,它为。它使用34位内存(即32位数据+2位额外)

    目前GC几乎没有硬件支持的原因有几个:

  • 你需要一个特殊的主板->昂贵
  • 你需要一个特殊的CPU->非常昂贵
  • 您需要能够使用CPU和主板额外功能的特殊软件
  • 如何使GC更有效,还有很多研究正在进行中。这是一个非常活跃的区域,与我们通过设置单个像素来绘制图像的时间相当。当我们了解哪些部分可以标准化时,为其构建硬件是有意义的
  • 这将浪费所有不使用此功能的程序的内存
  • [编辑]下一代“通用CPU”可能会附带一个可编程区域(),您可以在其中定义新的“汇编程序操作码”。这将允许软件根据其特定需求修改CPU。这里要解决的问题是加快FPGA的加载速度,以便其内容可以随进程切换


    这将允许创建对

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

    哪种算法最合适取决于内存的使用方式。计算机上运行哪些类型的应用程序?他们跑多长时间?运行了多少个应用程序?任务是如何组织的


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

    在嵌入式空间中,Ajile Systems Inc.生产了一系列具有可选GC的芯片上JVM产品。它们还提供了一个多JVM特性,其中java进程在自己的VM上以确定性的、分时间片的时间表独立执行,并具有完整的内存保护


    它们似乎提供了三种GC算法和一种关闭模式。因此,不仅仅是芯片上的JVM更像是一个操作系统,在某种程度上,在芯片上。

    有很多不同的算法和方法来解决这个问题,以至于还没有人找到任何通用的原语。

    在上千年的70和80年代,我们有很多这样的硬件。所有这些Lisp机器都很好地尝试通过间接和双间接访问来帮助内存管理(如果GC移动对象,则需要)。我们中的一些人还记得80286的最初几天,当时人们认为可以使用段进行更好的内存管理,但在性能上失败了

    到目前为止,最明智的做法是优化CPU的通用性,而不是添加只需要不时添加的特殊功能

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

    我最近在使用HP-UX时发现了一个惊人的结果。您可以将虚拟页面大小设置为256M