首先:我一直在纠结应该在哪个 stackexchange 上发布这个问题,因为它涉及操作系统知识、硬件知识,但可能还涉及其他 CS 领域。欢迎提出更好的堆栈站点建议。
我刚刚突然意识到……我已经够老了,可以记住派欧;你知道……CPU 参与将几乎每个字节从连接的外围设备(硬盘、CD-ROM、网络适配器等)传输到内存。有时这可能是一项非常耗费 CPU 的任务。于是出现了直接接入本质上,它只是告诉设备:“这是给你的内存片段,把你的东西放在那里,等你用完后告诉我”。当我注意到驱动器上的 bitlocker 图标时,我才意识到……无论你的计算机(或 NAS 或手机或……)使用什么操作系统:你的 CPU 负责加密,对吧?虽然我们(通常)现在有多个内核,并且 CPU 中有专门的 AES 指令等等,所有这些都可能减轻负载……我们不是基本上回到了 PIO 的本质吗?
我们仍然可以使用 DMA 将整个数据块放入内存并再次放回存储设备,并且不必在该操作期间停止 CPU,但我们仍然需要 CPU 处理每个字节(对其进行加密/解密),然后才能使用它。它可能非常快,甚至可以忽略不计。但是,如果设备和 DMA 之间有一个专用电路可以处理加密/解密,这将减轻 CPU 的负担。现代系统中有这样的电路吗?它可能在北桥/南桥/ICH/FCH/whatchamacallit 中吗?我可以想象 RAID 控制器或其他专用 I/O 控制器(可能只是更昂贵的控制器?)有专用电路,但“普通消费计算机”呢?
虽然我也意识到 Bitlocker 可能更像是一种操作系统级别的构造。但我对 Bitlocker 并不是特别感兴趣;我对任何卷、分区或块级加密方式都很好奇。
答案1
我们不是基本上回到了 PIO 的本质吗?
不。
即使 CPU 进行了加密,无论是否加速,都可以从内存的一部分读取,然后写入内存的另一部分。然后它使用 DMA 将这部分内存发送到磁盘。
这与 PIO 非常不同,因为您不必等待下一个字节准备就绪。而且在大多数情况下,CPU 完成加密的速度比 DMA 传输此块的速度快得多。
然而,如果设备和 DMA 之间有一个专用电路可以处理加密/解密,那么我们的 CPU 就可以摆脱这个负担。
更好的是,如果有一个专用的硬件可以读取一个内存块(通过 DMA),对其进行加密或解密,并将结果写入内存中的不同位置(通过 DMA),那么您就不会将加密与特定类型的 DMA 的特定存储方法绑定在一起,并且可以将其用于任何您想要的用途。
这样的协处理器是存在的(并且可能存在),但正常加密通过 CPU 已经足够快,不值得额外的成本。