简而易懂的CPU和MMU画图讲解

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/IT_10/article/details/89818738

我们知道,程序文件一般放在硬盘上,当把程序运行起来产生进程是,程序被放入内存中,通过内存放入cache,通过cache进入cpu,进入cpu的是程序的一条条指令,即01组合,下图中预取器就是负责从cache取出指令,然后由译码器译码,译码的作用就是要知道需要哪些寄存器配合完成指令,如该指令是一个加法运算,则译码器译码后发现需要使用到add,eax和ebx寄存器,然后交给ALU算数逻辑单元进行算数运算,结果放回寄存器,再放入cache,再放入内存,之后交给IO总线,再交给物理设备显示到屏幕上。
在这里插入图片描述
下图是一个0到4G的虚拟地址空间,.text存放代码,.data存放数据,heap是堆区,stack是栈区,这0到3G是用户区,3到4G是内核区,当程序运行的时候便会产生这样一个虚拟地址空间,程序运行时所需的所有资源都放到虚拟内存中。虚拟内存不是真实存在的,图中所示的4G大小的虚拟内存是指程序运行可用的地址空间有4G,程序运行的资源最终还是要放到物理内存中。那虚拟地址和物理地址如何对应?就是使用MMU。MMU:内存管理单元,用于完成虚拟内存和物理内存的映射,位于CPU内部;MMU将虚拟内存映射到物理内存,以及设置修改CPU的访问级别,如printf函数,要调用系统函数write,要进入内核空间,此时CPU的访问级别由3级用户空间转换到0级内核空间。
在这里插入图片描述
下图所示为在同一个机器上运行两份可执行程序a.out,产生两个虚拟地址空间,其中,两个进程的用户态虚拟地址被MMU映射到物理内存的不同地址,但是内核态映射到同一个地址(针对单核来讲),而PCB虽然位于内核中,两个进程的PCB是不一样的,只是位于同一个物理地址处。
在这里插入图片描述
综上,程序运行的时候产生虚拟地址空间,预取器取处指令后需要MMU的配合,将虚拟地址映射到物理地址才能正确取出数据。

猜你喜欢

转载自blog.csdn.net/IT_10/article/details/89818738
MMU