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)

相关推荐

  • python中wxpy的安装与使用是怎样的

    技术python中wxpy的安装与使用是怎样的python中wxpy的安装与使用是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。1.wxpy基本介绍w

    攻略 2021年12月4日
  • 基维百科,维基百科新规带来哪些改变

    技术基维百科,维基百科新规带来哪些改变为确保其平台的安全以及对抗各种骚扰行为,维基百科近日宣布正在实施新的行为准则基维百科。部分成员,尤其是女性和LGBTQ社区成员,抱怨平台上经常遭到会员编辑的“有毒行为”言语。该网站主

    生活 2021年10月31日
  • 大数据中如何进行文件上传漏洞的分析

    技术大数据中如何进行文件上传漏洞的分析今天就跟大家聊聊有关大数据中如何进行文件上传漏洞的分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、环境:dvwa二、选

    攻略 2021年12月10日
  • Java学习笔记32——二维数组

    技术Java学习笔记32——二维数组 Java学习笔记32——二维数组二维数组
    概述二维数组:就是元素是一维数组的数组举例:二班{{小王,小李},{小刘,小明},{小朱,小伟}}二维数组的定义格式
    格式

    礼包 2021年12月1日
  • 怎么使用UML

    技术怎么使用UML怎么使用UML,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。多初次接触UML的朋友们可能会感觉它各种各样的线条、关系、描述

    攻略 2021年11月2日
  • 如何解析Java常量池与字符串intern

    技术如何解析Java常量池与字符串intern这期内容当中小编将会给大家带来有关如何解析Java常量池与字符串intern,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。在Java应用程

    攻略 2021年11月23日