CPU加了缓存后,有人急了~

Hi,我是CPU一号车间的阿Q,还记得我吗,真是好久不见了~

我所在的CPU是一个八核CPU,就有八个工作车间,那运行起来速度杠杆的~

虚拟地址翻译

一大早,我们一号车间MMU(内存管理单元)部门的小黑就来到领导办公室,恰好我也在。

4946b1f8ecd130a31206541cb3b62ba1.png

“领导,听说您同意了阿Q他们的方案,给每个车间都划拨了缓存建设预算?”

你这小子,消息还挺灵通的。没错,内存那家伙实在太慢了,加了缓存后,不用每次都从内存读取数据,能让咱们的性能提升不少”,领导说到。

“那我们MMU部门也要申请一笔经费”,小黑说到。

领导眉头一紧,问道:“你们要申请经费干什么?”

“我们也要建设缓存”

“你们MMU部门做地址翻译工作,要缓存做什么,怕不是看领导给我们拨了款,眼红了吧?”,我在一旁说到。

小黑转过身来,看着我说道:“说我眼红,我倒是问你,你知道虚拟地址翻译的过程吗?”

这可难不倒我,以前就没少听他说过,“怎么不知道?以32位的虚拟地址为例,一个32位的虚拟地址分为三部分,分别是页目录索引、页表索引、页内偏移。翻译的时候,从CR3寄存器中取出页目录地址,根据页目录索引找到页表,再根据页表索引找到物理内存页面,最后根据页内偏移,完成寻址。我说的对吧?”

b5102644f52016567e24c776080eb482.png

“嘿,你小子不错啊,记性挺好”,小黑有点不敢相信,随后又问到:“既然你知道,那我再问你,这读取一次数据,需要访问几次内存?”

我思考了一下,开始算了起来。从页目录表中读取一次,从页表中再读取一次,最后访问页面内数据再读取一次,总共就是三次。

“需要访问三次内存!”,我回答到。

小黑点了点头说道:“没错,你知道的,内存那家伙本来就慢,这每读写一个数据,都要访问内存三次,这谁顶得住啊?”

说的是啊,内存那家伙慢我是知道的,但读写一次就要折腾三回,我倒是没想过。

“就这还是32位地址的情况,我还没算64位下变成了4级页表呢,那访问内存的次数就更多了!”

“好在咱们马上就要建设缓存设施了,也不用每次都从内存读取数据,要是缓存能找到,就不用读取内存了嘛!”

“可是查页目录和页表还是得要两次啊”,小黑说到。

“要是能把地址翻译的结果也缓存起来就好,就不用每次都从内存查了”,我陷入了思考。

“你看,你跟我想到一会儿去了,所以我才向领导申请,咱们MMU部门也加上缓存,这样地址翻译变快了,咱们整个车间工作效率才高嘛!”

b4acc11409ddebc8f65b8317d856b37a.png

这时,领导站了起来,说道:“唉~格局要打开,光你们一号车间提高不行,得发动全厂八个车间一起。小黑,经费的问题不用担心,这事由你牵头,把其他几个车间的MMU部门负责人召集起来开个会,把你说的方案落地下去”

“没问题!”,领导这么一说,小黑高兴坏了。

地址翻译缓存

回去的路上,我又忍不住好奇,向小黑打听起来:“你们这翻译地址用的缓存,准备怎么个弄法?”

“我还没想的很成熟,只有个大概的方案”

“快给我透露一下”

“好吧,告诉你也无妨!我举个例子吧,假设要翻译的虚拟地址是0x12345678,这是一个32位的地址,前面的20位是0x12345000,经过两次查表后,定位到真实的物理页面0x00abc000,最后再加上页内偏移,翻译结果就是0x00abc678

5beef333178327e07ca0b8d1965bda0d.png

“地址翻译完成后,将虚拟页编号0x12345和物理页编号0x00abc的映射关系记录起来放到缓存中”

a76a2ea06452f1195ee33020290a4fb1.png

“在进行地址翻译的时候,先去这个缓存里瞅一瞅,看看有没有记录过,如果有就直接用之前记录的,找不到再去内存页表中找。跟局部性原理类似,翻译过的地址,在接下来一段时间内再次用到的可能性很大,所以这个缓存是很有必要的!”,小黑非常自信的说到。

599a6c523c59bcb9811fed425dc65a99.png4eef5b8993dc29fb55f088fb6cc02e78.png

“听上去很不错,期待早点上马啊!”

TLB

过了几天,我打算去MMU部门转转,想看看他们的缓存搞的咋样了。

一进门,只见小黑和其他几个车间的MMU部门负责人正在紧张的讨论着,一旁的画板上画了不少条条框框的图。

de0153e6f802aee4781bbf737db74eec.png

“小黑老哥,你们这是在做什么呢?”

“我们正在研究这个翻译记录缓存项的存储方式呢!你来的正好,我们讨论了半天也没什么好的思路,快来帮我出出主意”

我有些好奇,问道:“什么问题把你们都难倒了?”

“就是虚拟地址翻译的结果,我们不知道怎么存了!”

“这有什么好纠结的,缓存空间就那么大,一个翻译结果就是一条记录,一条一条的存呗”

二号车间MMU负责人连连挥手,“没你想的这么简单,按照你这种存法,那在翻译地址的时候,怎么查找?难道要全部扫描一遍?”

b1bf6aa9eaf5c76c564f275b519c4ea9.png

我愣了一下,“啊这,我倒是没想这么多···不过缓存空间也不大,存不了太多翻译结果,全部扫描也还好吧?”

“那可不行,咱们CPU的目标就是要把性能优化到极致,这种方案上了,领导还不得骂死我”,小黑说到。

我想了想,“有了,给虚拟页编号取模,每个虚拟页的翻译记录只能存在缓存中固定的位置,这样不用全部扫描,一次就能定位,是不是很赞?”

80ec855a5c2062f748ce4656fa7afef9.png

小黑摇了摇头:“这个方案我们刚才也讨论过了,缓存空间有限,会导致大量的虚拟页取模后映射到同一个存储位置,就会经常冲突,也不是个好办法!”

“看来还真有点麻烦啊”,我也不自觉的皱起了眉头,陷入了思考之中。

“可不是嘛,所以我们才头疼啊”

空气突然安静,所有人都在低头沉思。

“哎,有了!”,一个念头在我脑中闪现。

“什么办法?快说说看”

“分组连接!”

“分组连接?”,众人问到。

“没错!把前面这两种方案结合一下。可以把缓存存储空间划分很多个组,全部遍历太慢,直接取模映射又容易冲突,那如果映射的结果不是一个固定的位置,而是一个分组呢?”

0b58529ec25f10dbb02e76f44ff8fc39.png

“听上去不错唉,这样既降低了冲突,遍历也只需在分组区间里进行了,工作量大大降低了,真是个好办法”

小黑和大家都一致同意了我的想法。

“那怎么分组呢,多少项为一组呢?”,有人问到。

“嗯,这个我也说不好,得做实验验证,2、4、8、16都可以试试,实践出真知嘛!”

“好,没问题,咱们下来测试下”

“我还有一个问题,你们的这个缓存项什么时候更新呢?咱们在保护模式下,不同的进程中,同一个虚拟页翻译后对应的物理页面可是不同的,你们可不要用了错误的缓存,那可就出大乱子了!”

“嗨,这还用你说,在场的各位干这份工作时间都不短了,这一点我们比你更清楚。进程切换的时候,会把新进程的页目录表基地址写到CR3寄存器中,那时候我们就会把缓存中的数据全部清掉啦!”,小黑胸有成竹的说到。

“也不用全部清掉吧,像有些内核页面,是所有进程共享的,就可以保留啊”

小黑点了点头,“有道理,看来得给地址翻译记录增加一个标记,用来标记是不是全局有效”

一个月后,八个车间MMU部门的缓存全部建设完成,当天便投入使用,咱们这个CPU的运行效率一下突飞猛进,这缓存的威力可真是太大了。

为了跟我们的一二级缓存相区分,小黑还给他们的地址翻译缓存取了一个响亮的名字:TLB——翻译后备缓冲区


推荐阅读:

专辑|Linux文章汇总

专辑|程序人生

专辑|C语言

我的知识小密圈

关注公众号,后台回复「1024」获取学习资料网盘链接。

欢迎点赞,关注,转发,在看,您的每一次鼓励,我都将铭记于心~


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/465236.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

redis -- 学习

redis 安装 就不细说了。 可以看这个 地址 https://www.cnblogs.com/feijl/p/6879929.html 配置完成之后 连接不上redis 如果报错守护模式 解决办法 1.修改redis配置 redis.conf 守护模式不启用 如下 2.第二种 启动redis后 设置密码 先查看是否设置了 config get requirepass…

一个学妹写的按键检测函数把我秀翻了!

摘要:今年实验室来了三个学妹,其中一个学妹以前是物联网专业的,进了实验室老师二话没说:先把STM32单片机过一遍上来第一个例程就是使用按键点亮一个LED灯,好家伙。点灯小师弟比较在行,毕竟32、FPGA、Linux的…

嵌入式行业需要什么样的技术人才?

关注「嵌入式大杂烩」,选择「星标公众号」一起进步!来源 | 巧学模电数电单片机嵌入式行业需要什么样的技术人才?仔细观察各种招聘的岗位要求吧,无非是两方面。1)通用要求比如什么学历,多少年工作经验&#…

消除VIM光标闪烁

2019独角兽企业重金招聘Python工程师标准>>> VIM光标闪烁比较影响人读代码的心情,消除光标闪烁,在配置文件中写下set gcra:block-blinkon0 保存并重启VIM 即可消除光标闪烁。 转载于:https://my.oschina.net/tonyyang/blog/10240

java异常个人理解

废话不说先贴图 所有的异常和错误都继承与Throwable类,它的下面又分为两大子类。 1.Error(uncheck) Error,错误。它是java程序中不被捕获的错误,并且总是不被控制。 例如:OutOfMemoryError 2.Exception(check) Exception,异常。所有的异常类都…

华为专家助你1个月拿下物联网高工认证,首次提供全方位就业指导!

物联网职业方向主要包括研究型岗位、研发型岗位、技术型岗位和技能型岗位4类:技能型岗位:工作内容主要是系统部署实施、运维管理等技术支持服务。技术型岗位:工作内容主要是负责物联网系统规划、设计、集成、技术咨询。研发型岗位&#xff1a…

php获取linux是几核的,linux下怎么查看机器cpu是几核的

linux下怎么查看机器cpu是几核的?linux下查看机器是cpu是几核的几个cpumore /proc/cpuinfo |grep "physical id"|uniq|wc -l每个cpu是几核(假设cpu配置相同)more /proc/cpuinfo |grep "physical id"|grep "0"|wc -lcat /proc/cpuinfo…

我的自学编程之路!

大家好,我是写代码的篮球球痴昨晚上打车回家,接我的滴滴司机是一个年纪比较大的大姐,她说她儿子毕业了,但是找不到好的工作,就报名参加了编程培训,培训费两万多。我就问,那谁给他学费&#xff0…

鹰眼拓扑锁定跟踪 网络管理一目了然

为什么要在网管软件中引入“鹰眼”的概念? 企业网管经常遇到的问题是:为什么业务人员访问生产系统(例如ERP等)速度非常慢,甚至无法访问?邮件系统无法使用?下载数据时总是无法连接&#xff…

读工作31年退休的同事离职信有感

大家好,我是写代码的篮球球痴,下面的文章是我的朋友痞子衡写的。大家好,我是痞子衡,是正经搞技术的痞子。今天痞子衡不讲技术,跟大家随便唠唠嗑。这周五,痞子衡收到了一位来自恩智浦深圳分公司同事的离职信…

Silverlight 计时器

代码 publicpartialclassMainPage : UserControl{inti 1;TextBlock myTextBlock;publicMainPage(){ InitializeComponent(); myTextBlock newTextBlock(); myTextBlock.Loaded this.StartTimer; myTextBlock.Margin newThickness(30); LayoutRoot.Children.Add(myTextBlock);}p…

这三个Offer,你怎么选?

前几天,有读者给我发信息,让我帮他看一下offer的选择:字节、腾讯天美、阿里云,随便一个都是羡煞旁人的offer,这家伙一下拿了三个,我都开始酸了起来。于是我让他总结一下面试过程中考察的知识点,…

挖掘经典:几乎被人遗忘的HTML七种用法 (转)

转来学习http://www.cnblogs.com/netWild/archive/2010/11/30/1892418.html 当今的WEB领域,新概念、新技术不断涌现 -- WEB2.0、AJAX、HTML5.0... ... 但在几乎被我们忽略的HTML和XHTML里,还有许多并不为人所知的,但却非常有用的一些TAG 以下…

这种扯淡的嵌入式项目,尽量不要碰

第一种:画大饼的项目不接。有的客户会很热情的找到你,告诉你这个项目如何如何地有前途,产品研发成功了之后会有多么大的出货量,会有多么丰厚的利润,建议你一起跟他创业合作,成功了之后给你高额提成。但是产…

高频面试题,malloc实现

面试官:你好,请先做自我介绍我:巴拉巴拉,我喜欢打篮球……面试官:请解释下malloc的实现原理我:我不会面试官:那就先这样,我们就不浪费大家的时间了。在开发c或c时,经常需…

单机版简易考试系统开发过程讲解(C#注册机、用户注册、考试系统、×××全部源码)...

前些日子有个朋友,找我做一个考试软件,浙江省驾驶员理论包考专用系统,总共也没几个页面需要做,但是他以前的数据库VFP的数据,题库里有几千条数据,若人工录入几乎比太可行,他把原来的软件&#x…

CF 1025C Plasticine zebra

昨晚忘记判只有一个字符的情况fst了呜呜呜 挺有趣的题,昨晚连刚带猜弄出结论 考虑答案的取值,最优答案可能是一个后缀,或者是一个前缀,或者是一个后缀加上前缀 那么翻转之后最优答案的可选值就有了1的前缀n的后缀 对于一个合法的z…

嵌入式|这些年我都是怎么找兼职的?

‍‍‍‍1这篇文章是在上一篇文章之后写的,因为上篇文章写到了嵌入式找兼职的一些坑,下面有同学留言说要怎么找到兼职项目,所以这篇文章会写一些我的兼职经历还有总结建议,希望对大家如何找兼职有一些帮助。这篇文章是写第二次了&…

linux java的启动内存溢出,java - Java的R代码可在Linux上运行,但不能在Windows中运行 - 堆栈内存溢出...

我在做什么?我正在用Java编写一个数据分析程序,该程序依赖R的arulesViz库来挖掘关联规则。我想要什么?我的目的是将规则存储在Java中的String变量中,以便以后进行处理。它是如何工作的?该代码分别使用String.format和e…

这届毕业生薪资高,是真的

‍‍‍‍最近一份校招的薪资上了知乎的热搜榜。大家想查薪资的&#xff0c;可以用这个微信小程序offershow>查薪资的小程序<可以看到这个小程序可以查到的企业还挺多的&#xff0c;方便大家在选择工作谈薪资的时候做下参考。额&#xff0c;我这篇文章不是为了介绍这个小程…