cpu为什么可以直接访问内存(cpu是如何访问内存的)

技术CPU是如何访问内存的这期内容当中小编将会给大家带来有关CPU是如何访问内存的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。内存管理可以说是一个比较难学的模块,之所以比较难学。一是

本期,边肖将为您带来关于CPU如何访问内存的信息。文章内容丰富,从专业角度进行分析和描述。看完这篇文章,希望你能有所收获。

内存管理可以说是一个难学的模块,这也是为什么难学的原因。首先,内存管理涉及硬件的实现原理和软件的复杂算法;第二,网上关于内存管理的错误解释太多了。我希望做一系列的内存管理,从硬件实现到底层内存分配算法,再从内核分配算法到应用内存分区,直到内存如何与硬盘交互等等。从而彻底了解内存管理的整个框架。下面主要讲解硬件原理和分页管理。

00-1010我们先来看一张图片:

CPU是如何访问内存的

从图中可以清楚地看到CPU、MMU和DDR是如何在硬件中分布的。首先,CPU访问内存时,需要通过MMU将虚拟地址转换为物理地址,然后通过总线访问内存。MMU开启后,CPU看到的所有地址都是虚拟地址。CPU将这个虚拟地址发送给MMU后,MMU会在页表中找出这个虚拟地址对应的物理地址是什么,从而访问外部DDR(记忆棒)。

因此,了解MMU如何将虚拟地址转换为物理地址将有助于您了解CPU如何通过MMU访问内存。

MMU通过页表将虚拟地址转换为物理地址,这是一种特殊的数据结构。它被放置在系统空间的页表区域中,以存储逻辑页和物理页框架之间的对应关系。每个进程都有自己的页表。

CPU访问的虚拟地址可以分为:p(页码),作为页表的索引;d(页面偏移量),页面内的地址偏移量。现在我们假设每页的大小为4KB,页表只有一级,那么页表看起来是这样的(页表的每行有32位,前20位代表页码P,后12位代表页面偏移量D):

CPU是如何访问内存的

CPU、虚拟地址、页表和物理地址之间的关系如下:

CPU是如何访问内存的

页面包含每个页面所在的物理内存的基址。这些基址和页面偏移量的组合形成一个物理地址,可以发送到物理单元。

我们发现,如果采用一级页表,每个进程需要一个4 MB的页表(如果虚拟地址空间为32位(即4GB),每个页面映射4KB,每个页表项占用4MB,那么进程需要1M的页表项(4GB/4KB=1M),即页表(每个进程有一个页表)占用4 MB (1 M * 4B=4 MB)。但是对于大多数程序来说,它们使用的空间远远不是4GB,那么为什么要映射不可能使用的空间呢?也就是说,一级页表覆盖了整个4GB的虚拟地址空间,但是如果不使用一级页表的页表条目,就不需要创建这个页表条目对应的二级页表,也就是说,只有在需要的时候才能创建二级页表。做一个简单的计算,假设只使用了20%的一级页表条目,那么页表占用的内存空间只有0.804 MB(1k * 4b 0.2 * 1k * 1k * 4b=0.804 MB)。除了在需要时创建辅助页表,该页还可以从磁盘传输到内存。只有主页表在内存中,只有一个次页表在内存中,其余的都在磁盘中(虽然这样效率很低)。此时页表占用8KB(1K * 4B 1 * 1K * 4B=8KB),远小于上一步的0.804MB。总之,使用多级页表可以节省内存。

第二级页表是重新分页页表。还是以之前的32位系统为例,一个逻辑地址分为20位页码和12位页偏移量d,因为页表要重新分页,所以页号可以分为10位页码p1和10位页偏移量p2。其中p1用于访问外部页表的索引,p2是外部页表的页偏移量。

CPU是如何访问内存的

CPU是如何访问内存的

这就是上面边肖共享的中央处理器访问内存的方式。如果你恰好也有类似的疑惑,可以参考上面的分析来理解。想了解更多,请关注行业信息渠道。

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/154598.html

(0)

相关推荐

  • 树莓派如何实现CPU温控风扇

    技术树莓派如何实现CPU温控风扇这篇文章主要介绍树莓派如何实现CPU温控风扇,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!树莓派温控风扇三极管方式 J13009三极管(做开关用),管脚说明,面对有

    攻略 2021年11月20日
  • html5map标签的用法(html5 map标签)

    技术html5中map标签怎么用小编给大家分享一下html5中map标签怎么用,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

    攻略 2021年12月17日
  • Spring中spring-context-indexer依赖有什么用

    技术Spring中spring-context-indexer依赖有什么用这篇文章给大家分享的是有关Spring中spring-context-indexer依赖有什么用的内容。小编觉得挺实用的,因此分享给大家做个参考,

    攻略 2021年11月9日
  • Python语法举例分析

    技术Python语法举例分析这篇文章主要介绍“Python语法举例分析”,在日常操作中,相信很多人在Python语法举例分析问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python语法举

    攻略 2021年11月20日
  • 二阶段提交在MySQL中的广义应用是怎样的

    技术二阶段提交在MySQL中的广义应用是怎样的本篇文章给大家分享的是有关二阶段提交在MySQL中的广义应用是怎样的,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看

    攻略 2021年10月25日
  • 家中养什么花好,室内适合养哪种带香味的植物

    技术家中养什么花好,室内适合养哪种带香味的植物阳台花园菜园为您解答家中养什么花好。室内适合栽种哪些有香味的植物?在家里养些花花草草,调节气氛,是一件非常有雅兴的事。如果养护的花卉长势旺盛,开花繁多而又自带香气,可以为家里

    生活 2021年10月21日