0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

一个故事轻松看懂CPU内存管理技术

Linux爱好者 来源:编程技术宇宙 作者:编程技术宇宙 2020-12-07 15:56 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

还记得我吗,我是阿Q,CPU一号车间的那个阿Q。

今天忙里偷闲,来到厂里地址翻译部门转转,负责这项工作的小黑正忙得满头大汗。

看到我的到来,小黑指着旁边的座椅示意让我坐下。

坐了好一会儿,小黑才从工位上忙完转过身来,“实在不好意思阿Q,今天活太多,没来得及招待你”

“刚忙什么呢,看你满头大汗的”,我问道。

“嗨,别提了,老是发现内存页面错误,不停地要通知操作系统那边去处理,真是怀念以前啊,没有这么多破事儿要管”,小黑叹了口气。

我一听来了兴趣,“小黑你给我说说你们的工作呗,地址翻译是怎么一回事儿,为什么怀念以前呢?”

小黑调整了下坐姿,咕噜咕噜喝了几口水说道,“这话说来可就话长了”

接下来小黑开始给我讲起了历史故事······

8086

原来咱们的祖先叫8086,小黑还给我看了他的照片

那是一个纯真质朴的年代,虽然工作性能不高,不过那个年代的程序都很简单,我们的祖先一问世就成为了明星,称得上那个时代的顶流了。

看到照片中的那些金属针脚了吗?那是我们CPU和外界打交道的触角,每一根都有不同的作用。

通过这些触角,CPU就可以跟内存打交道,获取指令和数据,辛勤的干活啦。

那个年代,条件比较差,能凑合的就凑合,能共用的就共用。这不,你看祖先CPU的地址总线针脚和数据总线针脚就共用了。

祖先是一个16位的CPU,数据(Data)总线就有16位,一次性可以传输16个比特位。和地址(Address)总线凑合着一起共用,于是就取名AD0-AD15。

不过祖先的地址总线却不止16个,还多出了A16-A19整整4个呢!这样有20个地址线,可以寻址1MB的内存了!

但是祖先的寄存器都是16位的啊,只能存放16位的地址。不过他们很聪明,发明了一个叫分段式存储管理的方法,把内存划分为最大64KB的小块,为什么是64KB呢,因为16位地址最多只能寻址这么大了。然后又加了几个叫做段寄存器的东西,指向这些块的开头,这样,通过段地址+段内偏移地址的方式,就能访问更多的内存了。

32位时代

后来啊,祖先的那点计算能力越来越捉襟见肘,实在是跟不上时代了。家族中的年轻一代开始挑大梁,80286和80386CPU相继问世,尤其是80386,成为了划时代的存在。

到了80386时代,我们与外界通信的引脚就更多了,并且变成了32位的CPU,那个时候,生活条件就变好了,地址线和数据线再也不用共享引脚了。

后来,人类变得越来越贪心,想要一边听音乐,一边还要上网,同时还要编辑文档,这就同时需要运行多个程序。

这个时候,有人发现了商机,开发了一个叫操作系统的东西,原来那些程序不再直接和我们CPU打交道了,而是和操作系统打交道,操作系统再和我们打交道,中间商赚差价说的就是他们!

操作系统这玩意儿很聪明啊,通过时间片划分让我们CPU来轮流执行多个程序,一会儿让我们执行音乐播放,一会儿让我们执行浏览器程序,一会儿又让我们执行文档编辑程序。我们是无所谓啊,给什么代码不是代码啊,我们不挑,埋头苦干就是了。人类的反应速度跟我们就差得远了,他们还以为这些程序真的是同时执行的呢。

虚拟内存

不过随之而来出现了一个大问题,这么多程序都要运行,大家挤在一个内存里,经常发生摩擦,冲突不断。

先祖们为了此事殚精竭虑,终于想出了一个好办法,一直沿用至今。

他们提出了一个虚拟地址的东西,所有程序使用的地址都是一个虚拟的地址,在真正和内存打交道的时候,咱们CPU内部工作人员再给翻译成真实的内存地址,关于这事儿,内存那家伙一直被我们蒙在鼓里。

这样一来,每个程序都可以用的是0x00000000到0xffffffff总共4GB这么大范围的地址空间,当然不会真的给他们那么多空间,内存那家伙总共才4GB呢,而是要按需申请分配。分配的单元是按照页来进行的,32位的CPU一个页是4KB。这些分配管理的累活就让操作系统来干了,中间商不能光拿好处不干正事,至于我们CPU,做好地址翻译的工作就好了。

为此,在我们寄存器内部专门添置了一个新的寄存器CR3,用来指向一个地址翻译查询字典,字典划分了两级目录。我们把一个32位的地址划分了3部分,前面两部分分别指向两级目录中的条目,用来定位这个地址在物理内存的哪个页面,最后一部分就是指向物理内存页面的偏移,这样就完成了地址的翻译工作。

每个进程有不同的地址空间,切换进程的时候,把CR3的内容换一下就使用新进程的翻译字典,特别的方便。

我们把这种内存管理方式叫做分页式内存管理。

真佩服先祖们的智慧,这样巧妙的把各个程序隔离开来,后来我们把这种工作模式叫做保护模式,把之前那种直接使用真实内存地址的工作模式叫做实地址模式。

分页交换

人类变得越来越贪婪,程序变得越来越多,对内存的需求也越来越大。随着这些程序都不断申请内存页面,内存空间很快就要耗尽了。

我们看在眼里,急在心里,后来找操作系统协商,看看这问题该怎么办。

操作系统那家伙也不赖,想出了一个好办法。内存的大小有限,但是硬盘给力啊,硬盘空间大的多,去硬盘上划一块区域来,把内存里长时间没有用到的页面给换到这块区域里去,然后做个标记。如果后面谁要访问那个页面,咱们CPU就检查如果有这个标记,就发送一个页错误的中断信号告诉操作系统去把这个页面换回来。

通过我们之间的配合,解决了内存紧张的危机。后来我们把这个技术叫做内存分页交换。

现在

时间过得很快,到了我们这一辈,内存变得更大了,16GB都是小case,32GB也很常见。

除了内存,我们CPU本身也更先进了,别的不说,你光看看咱们现在的引脚数那比先祖们那几辈就不可同日而语。

我们不仅从32位变成了64位,还从单核变成了多核,像我所在的CPU就有8个车间,8核并行执行,比起先祖那个年代简直有云泥之别。

彩蛋

和小黑闲谈间,我们车间的老K突然出现在了门口。
“阿Q原来你在这里,让我好找,赶快回去吧,隔壁二号车间的虎子说我们改了他们的数据,上门来闹事了······”

原文标题:一个故事看懂 CPU 内存管理技术

文章出处:【微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

责任编辑:haq

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 寄存器
    +关注

    关注

    31

    文章

    5588

    浏览量

    129057
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11216

    浏览量

    222921
  • 内存
    +关注

    关注

    9

    文章

    3173

    浏览量

    76113

原文标题:一个故事看懂 CPU 内存管理技术

文章出处:【微信号:LinuxHub,微信公众号:Linux爱好者】欢迎添加关注!文章转载请注明出处。

收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    分享嵌入式开发学习路线

    如果你想要学习嵌入式开发,我建议按照这个学习路线准备: 1. 基础铺垫期(1-2月) 理解嵌入式系统的“硬件基础”和“编程入门”,能看懂简单电路,写出基础C语言代码。这阶段的学习对学历没有
    发表于 12-04 11:01

    WebGL/Canvas 内存泄露分析

    在构建高性能、长周期运行的 WebGL/Canvas 应用(如 3D 编辑器、数据可视化平台)时,内存管理至关重要且极具挑战性的课题。 开发者通常面临的
    的头像 发表于 10-21 11:40 167次阅读
    WebGL/Canvas <b class='flag-5'>内存</b>泄露分析

    看懂晶丰明源BP2525x系列的区别

    看懂BP2525x之间的区别
    的头像 发表于 09-13 15:22 2379次阅读
    <b class='flag-5'>一</b>图<b class='flag-5'>看懂</b>晶丰明源BP2525x系列的区别

    科普:什么AI 内存技术

    AI 内存种专为人工智能 (AI) 应用设计的新型内存技术。与传统的通用内存(如 DDR5 或 LPDDR5)不同,AI
    的头像 发表于 09-03 15:44 716次阅读

    连载|业余无线电史话():漫长的故事

    180米波段用莫尔斯电码(CW)发射信号。资料来源:火花博物馆。漫长的故事)如同任何科学故事
    的头像 发表于 06-29 07:07 848次阅读
    连载|业余无线电史话(<b class='flag-5'>一</b>):<b class='flag-5'>一</b><b class='flag-5'>个</b>漫长的<b class='flag-5'>故事</b>

    黑芝麻智能芯多域零拷贝共享内存技术:破解车载大数据传输效能困局

    通过 零拷贝共享内存技术 ,黑芝麻智能解决车载多域间大数据传输的延迟与资源消耗问题。核心技术包括 全局内存管理单元 和 dmabuf机制优化
    发表于 06-23 17:53 1661次阅读
    黑芝麻智能<b class='flag-5'>一</b>芯多域零拷贝共享<b class='flag-5'>内存</b><b class='flag-5'>技术</b>:破解车载大数据传输效能困局

    博鼎弹簧发布数字目录实现稳定高效且易于操作的技术数据管理

    CADENAS****技术颠覆产品数据提供方式:种全新的、行业领先的数字目录 Mollificio Bordignon公司是家以生产各种高质量弹簧而闻名的公司,为了进步提高产品
    发表于 05-23 10:52

    HarmonyOS优化应用内存占用问题性能优化

    应用开发过程中注重内存管理,积极采取措施来减少内存占用,以优化应用程序的性能和用户体验。 HarmonyOS提供了内存
    发表于 05-21 11:27

    RISC-V五级流水线CPU设计

    本文实现的CPU五级流水线的精简版CPU(也叫PCPU,即pipeline),包括IF(取指令)、ID(解码)、EX(执行)、MEM(内存
    的头像 发表于 04-15 09:46 1348次阅读
    RISC-V五级流水线<b class='flag-5'>CPU</b>设计

    文详解AXI DMA技术

    ,SG)功能还可以将数据移动任务从位于于处理器系统中的中央处理器(CPU)中卸载出来。可以通过AXI4-Lite从接口访问初始化、状态和管理寄存器。如图4. 8展现了DMA IP的
    的头像 发表于 04-03 09:32 2071次阅读
    <b class='flag-5'>一</b>文详解AXI DMA<b class='flag-5'>技术</b>

    周带你看懂电路图

    教你看懂电路图 电源电路单元 张电路图通常有几十乃至几百元器件,它们的连线纵横交叉,形式变化多端,初 学者往往不知道该从什么地方开始, 怎样才能读懂它。其实电子电路本身有很强的规律性, 不管多
    发表于 03-03 15:05

    CPU到GPU:渲染技术的演进和趋势

    渲染技术是计算机图形学的核心内容之,它是将三维场景转换为二维图像的过程。渲染技术直在不断演进,从最初的CPU渲染到后来的GPU渲染,性能
    的头像 发表于 02-21 11:11 1375次阅读
    从<b class='flag-5'>CPU</b>到GPU:渲染<b class='flag-5'>技术</b>的演进和趋势

    气密性检测干货!150核心关键词,看懂

    ,JCGK精诚工科结合十余年的行业经验,整理了150核心关键词,并撰写本文,力求用通俗易懂的语言,带您看懂气密性检测,建议收藏备查。(左右滑动查看完整表格)序号关
    的头像 发表于 01-15 14:13 2137次阅读
    气密性检测干货!150<b class='flag-5'>个</b>核心关键词,<b class='flag-5'>一</b>文<b class='flag-5'>看懂</b>

    看懂电感、磁珠和零欧电阻的区别

    电子发烧友网站提供《看懂电感、磁珠和零欧电阻的区别.docx》资料免费下载
    发表于 01-02 14:48 3次下载

    Flexus X 实例 CPU内存及磁盘性能实测与分析

    的网络带宽支持。最近华为云 828 B2B 企业节正在举办,Flexus X 实例的促销也非常给力,大家可以去看看。为了帮助用户更好地了解其性能表现,我们通过系列详尽的测试,对 Flexus X 实例的各项性能进行了全面评测,包括 CPU 性能、
    的头像 发表于 12-24 17:35 870次阅读