MMU简介
MMU是Memory Management Unit的缩写,中文名是内存管理单元。它是一种负责处理中央处理器(CPU)的内存访问请求的计算机硬件。它的功能包括虚拟地址到物理地址的转换(即虚拟内存管理)、内存保护、中央处理器高速缓存的控制。
在linux中,用户态使用的内存是虚拟地址(Virtual Address,VA),实际硬件内存称为物理地址(Physical Address,PA)。用户访问内存看到的是VA,内核转化成PA操作实际物理地址。这里要提一下,实际MMU硬件支持2层转化,PA->IPA->VA,但是linux bypass了IPA,简化了流程(加密1次和加密2次效果一样)。
对用户体现虚拟地址,一方面可以起到安全作用(防止直接访问物理地址,查看我们存储的数据),另一方面减少用户对物理内存设备的关注,用户只要关注申请、读写、释放等使用内存操作即可。
DMA简介
操作系统中,内存的使用非常频繁,小到一个进程任务分配堆栈、申请内存,大到设备访问内存(读写等操作)。根据上述MMU功能介绍,这些内存使用都需要经过CPU从VA到PA的互相转化。而CPU的总线固定,一旦访问过多,访问有快有慢等,势必造成总线拥堵,影响性能。
此时加入DMA (Direct Memory Access,直接内存存取)硬件,它与外设和内存连接,将搜集的数据批量传输到内存,然后再发送一个中断通知CPU去内存取,这样减少了CPU被中断的次数,提高了系统的效率。 由于DMA不能像CPU一样通过MMU操作虚拟地址,所以DMA需要的是连续的物理地址。
SMMU简述
SMMU全称System Memory Management Unit, SMMU 有着MMU完全一样的能力,区别是供使用DMA的外设使用,同样提供页表转换工作,外设可通过页表转换访问物理地址,达到devices设备和进程一样使用虚拟地址。
参考:
https://zhuanlan.zhihu.com/p/105005488
|