热门标签 | HotTags
当前位置:  开发笔记 > 前端 > 正文

磁盘缓存专题之一缓存命中和缓存未命中&缓存与缓冲间的差异

在大多数计算机中,缓存是一个很重要的技术。事实上,计算机中的所有数据访问都可以看成是基本缓存概念的某种变体
不论什么时候,只要系统带有多个设备,而这些设备的性能又各不相同,就存在从慢速设备到快速设备不断更换工作地点以改善系统性能的可能性,这就是缓存的基本思想。即数据从一个地点拷贝到另一个地点,使之检索起来更快。虽然这是一个简单概念,但却包含着许多奇思妙想。

简单地说,为满足某种预期的未来需要所做的准备即缓存。缓存是一种人类的本性,为了保证充分的物品供应量,需要预先进行计划,然后选择一个能够提供最快服务的地方,存放它们,这就是所谓的可靠物资管理。它也是计算机系统的核心概念,即将需要的信息放在可以最快访问的地方,其描述如图。
 
缓存的概念可以用于几种设备,这些设备包括:
• 比正常内存更快的高速内存缓存。
• 比磁盘驱动器更快的、由内存芯片组成的磁盘缓存。
• 比通过Internet访问更快的、由磁盘实现的Internet缓存。

本专题主要涉及的是磁盘缓存。通常,用于缓存的内存是易失内存,假如电源切断,存放在缓存中的数据内容将会丢失。从这个意义上说,缓存内存是一个临时存储,但磁盘设备和子系统所使用的缓存是非易失存储。易失(内存)和非易失存储关系如图所示

 

本篇主题如下:

缓存命中和缓存未命中

缓存与缓冲间的差异



缓存命中和缓存未命中

当I / O操作开始从磁盘缓存而不是从非易失存储中检索数据时,(如磁盘设备或子系统)缓存命中发生。除了提供来自内存的快速响应之外,缓存命中还缩短了I / O路径的距离。如图所示。


 

另一种情况是,虽然搜索了缓存,但没有发现数据,因此数据必须从非易失存储读取,这就是缓存未命中。由于搜索缓存时需要花费时间,所以缓存未命中增加了I / O操作的时间。缓存未命中工作过程如图所示:


 

如果缓存实现不理想,将产生很高的未命中率,由于每次缓存未命中都需要花费额外的时间,所以导致系统性能的下降。用于描述缓存相对精确度的术语叫缓存命中率,缓存命中率是缓存命中数除以I / O请求总数所得的结果。对于开放系统服务器,如UNIX、Win NT及NETWare系统等,通常的命中率率不超过50 %。顺便指出,由于大型计算机系统使用的数据访问方法不同,它能到达更高的命中率(90 %)。

缓存命中率的计算如下:

缓存与缓冲间的差异

“缓存”和“内存”有时可以互换使用。然而,磁带驱动器中的内存通常并不是缓存,而是缓冲。虽然它们的物理组成是一样的,但缓冲只起临时存储数据的作用,由此数据从一个位置或设备传到另一个位置或设备。一般地,缓冲是在生命期较短的进程控制下工作,一旦数据传输完毕,这些进程将立即释放内存地址。一种常见类型的缓冲是F I F O缓冲,即一种先进先出结构,其结构如图所示:


 

另一方面,缓存内存由一个或更多的系统算法所控制,这些算法在一个长时间里维护和管理着内存资源,缓存的数据可以长时间地保存在缓存中。

在协调性能有差异的控制器和设备工作方面,缓冲常常能够发挥作用,这种方式的缓冲可以看作是某种转换器。主机I / O控制器上的芯片可以快速地通过I / O路径传输数据,它们的性能可以达到纳秒级,而对于磁盘和磁带驱动器这样一类的机电存储设备,其数据的传输速度只能在微秒范围内。因此,设备制造商把缓冲内存放入设备中,以减少访问延迟,以适合主机控制器的性能。这样,主机控制器可以同时地在多个设备上实施重叠操作,图显示了这种重叠过程。


 
另一方面,缓存利用更复杂的智能技术决定它将存储什么数据。缓冲是由相对简单的内存芯片构成,这些芯片不停地卸出和填充,但是磁盘缓存算法运用复杂的逻辑处理:那些数据应存放在缓存中,那些数据应从缓存中撤出。根据应用的不同,这些缓存的算法变化很大。

缓存算法既可以在主机软件中实现,也可以在存储子系统或在主机控制器中实现。当缓存由一块电子线路实现时,它被称为缓存控制器,除了管理磁盘缓存内存中的内容外,它还可以控制子系统中的磁盘操作,这些操作的细节是下一章的主要论题。图显示了带有一个缓存控制器和缓存内存的磁盘缓存结构:


之前在社区发布了一系列的文章,后来因为图片问题,很多的文章无法看了,朋友都反应了这个问题,现在发布出来,持续的更新,请大家顶起来 :http://www.itpub.net/thread-1703788-1-1.html

按需下载 打包下载 https://www.jb51.net/books/59793.html

作者:小洋,燕洋天


推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 网络攻防实战:从HTTP到HTTPS的演变
    本文通过一系列日记记录了从发现漏洞到逐步加强安全措施的过程,探讨了如何应对网络攻击并最终实现全面的安全防护。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • QBlog开源博客系统:Page_Load生命周期与参数传递优化(第四部分)
    本教程将深入探讨QBlog开源博客系统的Page_Load生命周期,并介绍一种简洁的参数传递重构方法。通过视频演示和详细讲解,帮助开发者更好地理解和应用这些技术。 ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文探讨了如何像程序员一样思考,强调了将复杂问题分解为更小模块的重要性,并讨论了如何通过妥善管理和复用已有代码来提高编程效率。 ... [详细]
  • 火星商店问题:线段树分治与持久化Trie树的应用
    本题涉及编号为1至n的火星商店,每个商店有一个永久商品价值v。操作包括每天在指定商店增加一个新商品,以及查询某段时间内某些商店中所有商品(含永久商品)与给定密码值的最大异或结果。通过线段树分治和持久化Trie树来高效解决此问题。 ... [详细]
  • Java 中的 BigDecimal pow()方法,示例 ... [详细]
  • 本文总结了汇编语言中第五至第八章的关键知识点,涵盖间接寻址、指令格式、安全编程空间、逻辑运算指令及数据重复定义等内容。通过详细解析这些内容,帮助读者更好地理解和应用汇编语言的高级特性。 ... [详细]
  • 探讨如何高效使用FastJSON进行JSON数据解析,特别是从复杂嵌套结构中提取特定字段值的方法。 ... [详细]
  • 本文详细介绍了如何使用Maven高效管理多模块项目,涵盖项目结构设计、依赖管理和构建优化等方面。通过具体的实例和配置说明,帮助开发者更好地理解和应用Maven在复杂项目中的优势。 ... [详细]
  • 本文介绍了Java并发库中的阻塞队列(BlockingQueue)及其典型应用场景。通过具体实例,展示了如何利用LinkedBlockingQueue实现线程间高效、安全的数据传递,并结合线程池和原子类优化性能。 ... [详细]
  • 探讨一个显示数字的故障计算器,它支持两种操作:将当前数字乘以2或减去1。本文将详细介绍如何用最少的操作次数将初始值X转换为目标值Y。 ... [详细]
  • 深入解析:手把手教你构建决策树算法
    本文详细介绍了机器学习中广泛应用的决策树算法,通过天气数据集的实例演示了ID3和CART算法的手动推导过程。文章长度约2000字,建议阅读时间5分钟。 ... [详细]
author-avatar
苏格兰的秋天
一枚在创业路上坚持走下去的人。。。。
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有