为什么硬盘不支持内存管理?

Ale*_*x B 11 hardware memory-management

虚拟内存得到现代硬件的良好支持,但应用程序级内存分配仍然是所有实现的软件,无论是手动堆内存管理a-la C和C++,还是VM级垃圾收集.

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

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

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

  1. 如果有这样的东西(至少在研究阶段),或者
  2. 将会或将不会提供超过传统内存管理的任何好处,或者
  3. 为什么在硬件中构建这样的东西是不可行的?

Wim*_*Wim 10

理论上,您可以在硬件中实现完整的Java VM,包括内存管理,我相信有一些研究项目(试图)这样做.但是有几个很好的理由不在硬件中实现东西:

  • 硬件是固定的,你不能轻易修补错误或实现更新/更好的算法
  • 硬件很昂贵,对于垃圾收集这样的复杂操作,你需要大量的硬件,而使用现有硬件资源的软件实现要便宜得多
  • 硬件资源占用空间并消耗(静态)功率,即使在不使用时也是如此,而未使用的软件代码的损害相对较小

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

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


Lot*_*har 5

在上一个千年的第70和第80期,我们有很多这样的硬件.所有这些Lisp机器都非常适合尝试使用间接和双重间接访问来帮助进行内存管理(如果GC移动对象,则需要).我们中的一些人还记得80286的第一天,人们认为这些段可以用于更好的内存管理,并且在性能上失败很糟糕.

到目前为止,目前的智慧状态是优化CPU以用于通用目的,而不是添加仅时常需要的特殊功能.

现代垃圾收集器已经使用一些操作系统功能,如虚拟页面的脏标记来实现写入障碍,但除此之外,算法非常简单,直接和高级别.没有特别需要的硬件.

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

内存管理改进仍有很多空间,比一些高级垃圾收集功能更重要.