我要投搞

标签云

收藏小站

爱尚经典语录、名言、句子、散文、日志、唯美图片

当前位置:六合特肖 > 访问局部性 >

一步步编写操作系统 29 cpu缓存简介

归档日期:07-01       文本归类:访问局部性      文章编辑:爱尚语录

  缓存是20世纪最大的发明,其原理用一些存取速度较快的存储设备做为数据缓冲区,避免频繁访问速度较慢的低速存储设备,归根结底的原因是,低速存储设备是整个系统的瓶颈,缓存用来缓解“瓶颈设备”的压力。

  之前介绍实模式下的寄存器时,举了一个浏览器访问网页的例子,里面有12步,几乎步步都用到了缓存。不过,这些缓存都是在内存DRAM中实现的,即动态随机访问存储器,究其原因是数据要么在数据库中要么在硬盘上,其速度肯定比内存慢。选做用缓存的存储设备,其存取速度肯定是比其原有存储设备更快,否则失去了缓存的意义。相对于cpu来说,DRAM太慢了,如果也要用它来做cpu的缓存,反而是拖了后腿,不如不用。

  cpu为什么要用缓存?因为待执行的指令和相关数据是存储在低速的内存中,让cpu这种高速设备等待慢速的内存,着实太浪费cpu资源了。人们根本无法容忍cpu如此“漫长”的“浪费”,所以需要用一个比内存更快的存取设备做缓冲区,尽量和cpu一个速度,让cpu不要等待。于是SRAM成了cpu的救世主,成为cpu和内存之间数据缓存的不二之选。

  前面在介绍实模式下的寄存器时,也说到了cpu中的缓存。cpu中有一级缓存L1、二级缓存L2,甚至三级缓存L3等。它们都是SRAM,即静态随机访问存储器,它是最快的存储器啦。之所以把SRAM和寄存器放到一块说,是因为很多同学在感观上觉得寄存器是cpu直接使用的存储单元,所以寄存器比SRAM更快。其实他们在速度上是同一级别的东西,因为寄存器和SRAM都是用相同的存储电路实现的,用的都是触发器,它可是工作速度极快的,属于纳秒级别。至于触发器是什么,这已属于硬件范畴,这里咱就不深究了,因为我也不懂,不敢乱说啦^_^,有兴趣的同学请自行调研吧。

  有哪些东西可以被缓存呢?无论是程序中的数据或指令,在cpu眼里全是一样形式的二进制01串,没有任何区别,都是cpu待处理的“数据”。所以我们眼中的指令和数据都可以被缓存到SRAM中。

  什么时候能缓存呢?可以根据程序的局部性原理采取缓存策略。局部性原理是:程序90%的时间都运行在程序中10%的代码上。

  一方面是时间局部性:最近访问过的指令和数据,在将来一段时间内依然经常被访问。

  另一方面空间局部性:靠近当前访问内存空间的内存地址,在将来一段 时间也会被访问。

  举一个典型的例子,我们在用高级语言写程序时,经常会写到这样的循环嵌套代码,如:

  以上是将二维数组中的所有元素相加求和。循环中经常被用到的地址是sum所在的地址,经常被用到的指令是加法求和指令,这是在时间上的局部性。未来要访问的地址是与当前访问地址&array[i][j]相邻的地址&array[i][j+1],它们之间只差一个整型变量的大小,这是空间上的局部性的。(当然,这些局部性都是编译器编译的结果,编译器就是这样安排的。)cpu利用此特性,将当前用到的指令和当前位置附近的数据都加载到缓存中,这就大大提高了cpu效率,下次直接从缓存中拿数据,不用再去内存中取啦。

  当然,上面说的是理想的状态,如果缓存中没有相应的数据,还是要去内存中去加载,然后再放到缓存中。

  CPU缓存(CacheMemory)是位于CPU与内存之间的临时存储器,它的容量比内存小的多但是交换速度却比内存要快得多。缓存的出现主要是为了解决CPU运算速度与内存读写速度不匹配的矛盾,因为CPU运...博文来自:小米mm修仙路

  一步步写操作系统(一)0.介绍很久之前就有了写一个操作系统的想法,参考了很多书籍,主要包括《自己动手写操作系统》(余渊)和《30天自制操作系统》(川合秀实),总体感觉就是,川合秀实版本的比较注重界面描...博文来自:stophin的专栏

  你需要自己去查:assembler,BIOS目标:创建一个可以被BIOS识别为可启动介质的文件我们要亲自写一个引导扇区,你会发现这很爽。理论:计算机启动时,BIOS会启动,它并不知道如何启动操作系统,...博文来自:geyu

  一、cachecpucache已经发展到了三级缓存结构,基本上现在买的个人电脑都是L3结构。1.cache的意义为什么需要CPUcache?因为CPU的频率太快了,快到主存跟不上,这样在处理器时钟周期...博文来自:厚积薄发者,轻舟万重山

  一。操作系统原理1、串行:  一个任务完完整整地运行完毕后,才能运行下一个任务2、并发  看起来多个任务是同时运行的即可,单核也可以实现并发3、并行:  真正意义上多个任务的同时运行,只有多核才实现并...博文来自:乐石风华

  空间局部性原理分配连续紧凑的内存,且最好不要超过catchline的大小时间局部性原理尽量重复使用同一个变量,使其保持在寄存器中因为cpu的MESI的存在,要尽量避免伪共享将共享在多线程间的数据进行隔...博文来自:啊浪的博客

  小型嵌入式操作系统的实现写一个自己的操作系统是我一直以来的愿望,一来,学习,二来吗,装装X了。。哈哈进过一段时间的学习,今天我写的代码终于实现了任务切换,也就是多任务环境了,虽然任务本身只是很简单那的...博文来自:shixiongtao的博客

  一步步写操作系统(四)4.任务切换其实在一开始,各种操作系统的书籍都着重在讲任务,并且在许多计算机考试中也一直在问:操作系统的任务切换、任务有哪些状态等等。初学者一看就知道这是很高深的东西,并且有的研...博文来自:stophin的专栏

  最近在学习自己动手写嵌入式操作系统,分享学习过程,希望各位大佬指教!先预热一下,这几天较忙,过几天再码字,上详细学习过程...博文来自:往事撩人醉的博客

  对于操作系统,我们知道,越靠近CPU的存储器,其存储速度就会越来越快,如果将整个存储系统视作一个金字塔,CPU作为塔顶,那么从上到下,访问速度会越来越慢,但存储容量越来越大,价格越来越低,按照常用的存...博文来自:aisxyz

  学计算机几年了,常常会听及关于CPU、指令集、体系结构以及操作系统的相关概念,你中有我我中有你,听时似懂非懂,听完迷迷糊糊。终于受不了了,决定好好整理一下。  一、先从CPU开始,从图灵提出图灵机的概...博文来自:zaguobangzhu的博客

  关于CPU寄存器的简单介绍最近浅显的学习了下这方面的知识,所以目前也想去总结一下CPU除了控制器、运算器等器件还有一个重要的部件就是寄存器。其中寄存器的作用就是进行数据的临时存储。CPU的运算速度是非...博文来自:ZCMUCZX的博客

  线程工作内存是cpu寄存器和高速缓存的抽象描述,使用频率高的数据从主存拷贝到高速缓存中,每个线程在cpu高速缓存中对拷贝的数据进行读取、计算、赋值,再在合适的时候同步更新到主存的该数据,如i=1,i+...博文来自:u014507083的博客

  结合CPU理解一行Java代码是怎么执行的根据冯·诺依曼思想,计算机采用二进制作为数制基础,必须包含:运算器、控制器、存储设备,以及输入输出设备,如下图所示.(该......博文来自:纯洁的微笑

  (写在文章前:本文只考虑紧耦合多处理器的调度问题:即共享同一内存,且由OS完全控制的多个处理器。)一、基本的设计问题把进程分配到处理器:静态分配:一个进程始终在同一CPU上运行。动态分配:所有CPU共...博文来自:Cca_R

  为什么java不翻译成汇编语言,然后能一次翻译,多地运行。因为程序不光要翻译成机器指令,还要调用操作系统的系统调用接口,控制硬件。不同操作系统的接口不同,所以不能。需要java虚拟机来对接各个系统关于...博文来自:dingxm_的博客

  一.在进入了解CPU的工作原理之前,我们先来简单的谈一谈CPU当初是如何被生产出来的也就是CPU的历史还记得那是1968年7月18日,鲍勃-诺斯和戈登-摩尔的新公司在美国加利福尼亚州,美丽的圣弗朗西斯...博文来自:即使台下没有掌声,自己也要优雅的谢幕 ----致自己曾经的付出

  操作系统-计算机管理控制程序操作系统(OperatingSystem,简称OS)是管理计算机硬件资源,控制其他程序运行并为用户提供交互操作界面的系统软件的集合。操作系统是计算机系统的关键组成部分,负责...博文来自:roarly的博客

  CPU,内存,磁盘,指令以及他们之间的关系 一、Cpu:cpu是centralprocessunit的简称,是计算机的核心处理器。Cpu的作用是运行机器语言指令。高级语言和汇编语言程序被编译成cpu能...博文来自:zkandmz1990的博客

  因为各级存储硬件的参数和性能不同所以在计算机硬件当中分为以下几种:由此可见顶级空间小但处理速度最快,下层容量大但处理速度时间较长。存储器系统采用分层结构,顶层的存储器速度较高,容量较小,与底层的存储器...博文来自:IBLiplus的博客

  好记性不如烂笔头——东西太多,脑子永远不够用问题用C语言写个程序,运行时,cpu占用率一直保持50%解决方案一看题目好眼熟!《编程之美》!然而已经记不清楚了,果然东西需要经常用经常积累,废话不多说重来...博文来自:weixin_34366546的博客

  裸机与引导程序裸机是什么?裸机其实就是不包含操作系统的计算机,若是定义的更严格一点,那可以说是不包含任何应用程序的计算机。但对PC来讲,PC出厂时都是被厂商烧入了BIOS的,所以裸机的叫法...博文来自:双林子木

  本文主要跟大家来探讨下缓存的应用场景有哪些?缓存给我们带来了哪些便利?同时又给我们带来了哪些问题?还有,简单介绍一些常用的缓存工具。JUSTDOIT!GO!缓存的应用场景CPU缓存(CacheMemo...博文来自:just do it

  我们选购电脑时,CPU处理器的配置会有缓存大小,它是CPU性能的重要指标。为什么呢?因为CPU计算速度与访问主存速度非常不匹配!先来看计算速度。单颗CPU计算速度目前在2GHz-4GHz之间,以2.5...博文来自:陶辉:聚焦分布式系统的程序员

  CPU位数是指CPU一次能处理的二进制数的最大位数。这是体系结构决定的。操作系统的位数是由字长决定(wordsize)。字长决定了指针的大小,指针的大小决定了操作系统中的虚拟空间的最大值。故操作系统的...博文来自:ghalcyon的博客

  CPU的工作原理1.将一个程序放在内存中,然后设置一个地址2.cpu根据地址发出取指指令,将设置的地址中的指令放在地址总线上,将该指令传到CPU中3.CPU开始解释执行该指令4.地址自动累加,看取一条...博文来自:weixin_34293059的博客

  1.1CPU缓存在现代计算机当中,CPU是大脑,最终都是由它来执行所有的运算。而内存(RAM)则是血液,存放着运行的数据;但是,由于CPU和内存之间的工作频率不同,CPU如果直接去访问内存的话,系统性...博文来自:xiaohei__的博客

  CPU是什么?我们通过计算机的输入设备向内存输入数据或指令,CPU取存计算后写存,输出设备取存转换为我们需要的结果。这里的CPU就是扮演着核心角色,从CPU的名称也可以看出来他的地位:CentralP...博文来自:阿亮学长的博客

  试了好多方法解决这个问题,都不行,什么进入BIOS开启服务都没用,最后在设置里勾选了这三项,可以了,大家可以试试看...博文来自:菜鸟小芝

  缓存是在CPU和内存之间的一块存取速度极快的存储单元,CPU在处理数据时,如果在寄存器中找不到目标数据,则优先从缓存中寻找。而缓存的容量远远小于内存的容量,当缓存已满而又要继续往其中添加新的数据的时候...博文来自:yange1025的博客

  高速缓冲存储器(Cache)Cache也是我们经常遇到的概念,也就是平常看到的一级缓存(L1Cache)、二级缓存(L2Cache)、三级缓存(L3Cache)这些数据,它位于CPU与内存之间,是一个...博文来自:LittleBee的博客

  不适合阅读 为了方便记录,以后把记录更新到blog基础准备:1.      微机原理的基本知识,CSAPP深入理解计算机系统 前4章2.      操作系统的基础知识,简单过一下 学习方法:1.在gi...博文来自:笑斐戈

  来写写一些看了很多遍才了解的东西吧。  以下大部分内容复制于:内存与缓存:,部分内容是我自己理解补充的。   ...博文来自:独钓寒江雪

  CPU位数我们从计算机中的信息表示谈起。计算机中的信息分为两类:控制信息(条件、命令、状态等)、数据信息(数值与非数值两类)。所有这些信息在计算机中用数字代码表示,为了电路表示处理方便,就用二进制表示...博文来自:Beast_Liu的博客

  CPU缓存网页浏览器为了加快速度,会在本机存缓存以前浏览过的数据;传统数据库或NoSQL数据库为了加速查询,常在内存设置一个缓存,减少对磁盘(慢)的IO.同样内存与CPU的速度相差太远,于是CPU设计...博文来自:justenjoyitpy的博客

  知识需要不断总结、验证、迭代,知其然,知其所以然。 1、进程和线程进程和线程的区别与联系:进程:资源申请的最小单位线程:资源调度的最小单位,进程的一部分,描述指令流的执行状态。内核中,描述进程的数据结...博文来自:Liukengpeng的专栏

  作为一名java攻城狮,想要深入了解java这门语言,免不了跟多线程打交道,继而会跟java内存模型打交道。内存模型是一个比较难以理解的东西,而这一切都缘于更加底层的硬件,cpu工作方式的复杂度引起的...博文来自:yanyan19880509的专栏

  jquery/js实现一个网页同时调用多个倒计时(最新的)nn最近需要网页添加多个倒计时. 查阅网络,基本上都是千遍一律的不好用. 自己按需写了个.希望对大家有用. 有用请赞一个哦!nnnn//jsn...博文来自:Websites

本文链接:http://shawntierney.com/fangwenjubuxing/589.html