• cpu的MMU


    • MMU:内存管理单元,用于完成虚拟内存和物理内存的映射,位于CPU内部;
    • 我们知道,程序文件一般放在硬盘上,当把程序运行起来时,程序被放入内存中,通过内存放入cache,通过cache进入cpu,下图中预取器就是负责从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是不一样的,只是位于同一个物理地址处。

  • 相关阅读:
    selenium的持续问题解决
    为什么使用Nginx
    [转]性能测试场景设计深度解析
    [转]CentOS7修改时区的正确姿势
    [转]利用Fiddler模拟恶劣网络环境
    [转]什么是微服务
    [转] WebSocket 教程
    [转] Python实现简单的Web服务器
    shell修改配置文件参数
    [转] linux shell 字符串操作(长度,查找,替换)详解
  • 原文地址:https://www.cnblogs.com/frankltf/p/13807371.html
Copyright © 2020-2023  润新知