Warning: Undefined global variable $debug in /var/www/ourcoders/tiny4cocoa/application/controllers/baseController.php on line 124
有个梨UGlee 2020-01-01 22:07:25 发布的技术动态 - OurCoders (我们程序员)
有个梨UGlee
2020-01-01 22:07:25 发布
mmu是一个硬件层,不仅仅是kernel用,很多外设也接受,例如dma,(实际上内存控制器也是个硬件外设,在soc上),换句话说写驱动时,外设也可能接受这个地址,包括dma,isp图像处理器以及某些图形硬件加速,编解码器,加密硬件等;如果硬件不接受这一层那软件上的麻烦有一些而且地址要到处由软件翻译效率严重受损。另外GPU有自己的mmu也很常见。

kmalloc最贴近这一层。

vmalloc是利用mmu,以及mmu异常中断虚拟出的地址空间,不谈效率,它对软件使用内存是透明的,是软件意义上的内存。但很多硬件无法这样工作。换句话说这种内存纯粹是用于计算的地址空间。

memory本质上是IO,在硬件上体现的非常明显,说他是IO的意思,不仅大量外设IO真的被映射成了地址空间,还体现在它对硬件来说都是named channel,实际工作时的读写全都是基于总线通讯的,arm上包括内存也是通过和内存控制器通讯读写的,内存控制器甚至包含调度器让一些内存读写的优先级比另外一些高,以保证低延迟和实时性。

但是对纯计算来说,这些都看不到,所以纯计算使用的内存是另一层的,就像一个address space,容量仅仅受到寻址能力限制(如果系统可以swap的话)。

@字节跳不动