1 存储器的金字塔结构-德赢Vwin官网 网
0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

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

3天内不再提示

存储器的金字塔结构

Linux阅码场 来源:未知 作者:李倩 2018-08-30 08:16 次阅读

写在前面

在开始正式的讨论前,我先抛出几个问题:

谈到磁盘时,常说的HDD磁盘和SSD磁盘最大的区别是什么?这些差异会影响我们的系统设计吗?

单线程写文件有点慢,那多开几个线程一起写是不是可以加速呢?

write(2)函数成功返回了,数据就已经成功写入磁盘了吗?此时设备断电会有影响吗?会丢失数据吗?

write(2)调用是原子的吗?多线程写文件是否要对文件加锁?有没有例外,比如O_APPEND方式?

坊间传闻,mmap(2)的方式读文件比传统的方式要快,因为少一次拷贝。真是这样吗?为什么少一次拷贝?

如果你觉得这些问题都很简单,都能很明确的回答上来。那么很遗憾这篇文章不是为你准备的,你可以关掉网页去做其他更有意义的事情了。如果你觉得无法明确的回答这些问题,那么就耐心地读完这篇文章,相信不会浪费你的时间。受限于个人时间和文章篇幅,部分议题如果我不能给出更好的解释或者已有专业和严谨的资料,就只会给出相关的参考文献的链接,请读者自行参阅。

言归正传,我们的讨论从存储器的层次结构开始。

存储器的金字塔结构

受限于存储介质的存取速率和成本,现代计算机的存储结构呈现为金字塔型[1]。越往塔顶,存取效率越高、但成本也越高,所以容量也就越小。得益于程序访问的局部性原理[2],这种节省成本的做法也能取得不俗的运行效率。从存储器的层次结构以及计算机对数据的处理方式来看,上层一般作为下层的Cache层来使用(广义上的Cache)。比如寄存器缓存CPU Cache的数据,CPU Cache L1~L3层视具体实现彼此缓存或直接缓存内存的数据,而内存往往缓存来自本地磁盘的数据。

本文主要讨论磁盘IO操作,故只聚焦于Local Disk的访问特性和其与DRAM之间的数据交互。

无处不在的缓存

如图,当程序调用各类文件操作函数后,用户数据(User Data)到达磁盘(Disk)的流程如图所示[3]。图中描述了Linux下文件操作函数的层级关系和内存缓存层的存在位置。中间的黑色实线是用户态和内核态的分界线。

从上往下分析这张图,首先是C语言stdio库定义的相关文件操作函数,这些都是用户态实现的跨平台封装函数。stdio中实现的文件操作函数有自己的stdio buffer,这是在用户态实现的缓存。此处使用缓存的原因很简单——系统调用总是昂贵的。如果用户代码以较小的size不断的读或写文件的话,stdio库将多次的读或者写操作通过buffer进行聚合是可以提高程序运行效率的。stdio库同时也支持fflush(3)函数来主动的刷新buffer,主动的调用底层的系统调用立即更新buffer里的数据。特别地,setbuf(3)函数可以对stdio库的用户态buffer进行设置,甚至取消buffer的使用。

系统调用的read(2)/write(2)和真实的磁盘读写之间也存在一层buffer,这里用术语Kernel buffer cache来指代这一层缓存。在Linux下,文件的缓存习惯性的称之为Page Cache,而更低一级的设备的缓存称之为Buffer Cache. 这两个概念很容易混淆,这里简单的介绍下概念上的区别:Page Cache用于缓存文件的内容,和文件系统比较相关。文件的内容需要映射到实际的物理磁盘,这种映射关系由文件系统来完成;Buffer Cache用于缓存存储设备块(比如磁盘扇区)的数据,而不关心是否有文件系统的存在(文件系统的元数据缓存在Buffer Cache中)。

综上,既然讨论Linux下的IO操作,自然是跳过stdio库的用户态这一堆东西,直接讨论系统调用层面的概念了。对stdio库的IO层有兴趣的同学可以自行去了解。从上文的描述中也介绍了文件的内核级缓存是保存在文件系统的Page Cache中的。所以下篇的讨论基本上是讨论IO相关的系统调用和文件系统Page Cache的一些机制。

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

    关注

    38

    文章

    7484

    浏览量

    163759
  • Linux
    +关注

    关注

    87

    文章

    11292

    浏览量

    209315

原文标题:浅墨: 聊聊Linux IO(上)

文章出处:【微信号:LinuxDev,微信公众号:Linux阅码场】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    PCB工程师金字塔分级标准

    PCB工程师金字塔分级标准
    发表于 08-06 13:21

    自制for循环打印金字塔

    自制for循环打印金字塔
    发表于 09-18 08:46

    基于金字塔模型的地形网格裂缝消除算法

    本文针对基于多分辨金字塔模型绘制海量地形时的网格裂缝问题,提出了一种网格裂缝消除算法。该算法利用分裂标记表,结合金字塔模型本身分块与多分辨率的特性,从整体上
    发表于 12-30 12:02 8次下载

    工程师电子制作故事:单片机控制LED金字塔DIY设计

      首先要说一下哪些人适合做这个金字塔:完全不懂程序的是可以的,但是一定要有焊接基础。如果你自己焊接不出51最小系统,也搞不定8X8的点阵,那我不建议你来做这个金字塔
    发表于 05-01 10:37 2.3w次阅读
    工程师电子制作故事:单片机控制LED<b class='flag-5'>金字塔</b>DIY设计

    图像金字塔和resize综合示例_《OpenCV3编程入门》书本配套源代码

    《OpenCV3编程入门》书本配套源代码:图像金字塔和resize综合示例
    发表于 06-06 15:52 3次下载

    基于压缩金字塔核稀疏表示的人脸识别_周凯

    基于压缩金字塔核稀疏表示的人脸识别_周凯
    发表于 01-08 11:13 0次下载

    新型太阳能电池板之光伏金字塔结构反射红外线

    很好的解决方案。因为一方面主动冷却方式会消耗能源,成本较高,另一方面还会干扰太阳能电池板有效吸收光线。 为了解决这个问题,近日斯坦福大学的科学家们发明了一种新型太阳能电池板,能够通过表面的微型三角金字塔结构
    发表于 10-24 10:47 5次下载
    新型太阳能电池板之光伏<b class='flag-5'>金字塔结构</b>反射红外线

    绘制金字塔程序实现

    用c语言编程绘制金字塔
    发表于 11-27 16:24 822次阅读

    可控特性的金字塔变换

    本文设计了一种具有平移不变性、方向和尺度联合可控特性的金字塔变换,称为几何变形可控金字塔变换(DPT)。此DPT从一种数值形式表示的方向可控金字塔变换(SPT)发展而来。我们以SPT的每一个方向可控
    发表于 12-14 16:41 4次下载
    可控特性的<b class='flag-5'>金字塔</b>变换

    一种金字塔注意力网络,用于处理图像语义分割问题

    基于以上观察,我们提出了特征金字塔注意力模块 (FPA),该模块能够融合来自 U 型网络 (如特征金字塔网络 FPN) 所提取的三种不同尺度的金字塔特征。为了更好地提取不同尺度下金字塔
    的头像 发表于 06-05 09:21 1.2w次阅读
    一种<b class='flag-5'>金字塔</b>注意力网络,用于处理图像语义分割问题

    中国集成电路封装行业市场现状——金字塔的尖顶与基座

    中国集成电路封装行业技术演变路程漫漫集成电路封装在电子学金字塔中的位置既是金字塔的尖顶又是金字塔的基座。
    的头像 发表于 07-11 14:51 3317次阅读

    基于规范化函数的深度金字塔模型算法

    传统深度金字塔模型作为一种有效的行人检测算法备受关注,融合可变形部件模型和卷积神经网络模型,但特征提取部分使用的算法像素区堿的大小不冋,导致模型之间不能完全融合,在行人数量多、姿势复杂和有遮挡情况
    发表于 03-30 14:09 14次下载
    基于规范化函数的深度<b class='flag-5'>金字塔</b>模型算法

    晶片表面刻蚀工艺对碳硅太阳能电池特性的影响

    引言 为了分析不同尺寸的金字塔结构对太阳能电池特性的影响,我们通过各种刻蚀工艺在硅片上形成了金字塔结构。在此使用一步蚀刻工艺(碱性溶液蚀刻、反应离子蚀刻(RIE)和金属辅助化学蚀刻)以及两步蚀刻
    发表于 01-11 14:05 1231次阅读
    晶片表面刻蚀工艺对碳硅太阳能电池特性的影响

    DIKW金字塔中AI爬到了第几层

    ,“这波啊,这波是在大气层”。 这种说法虽然有些戏谑,但还真有点科学道理。 DIKW金字塔,是一个关于人类理解、推理和解释的层次结构,分别是:数据(原始的事实集合)、信息(可被分析测量的结构化数据)、知识(需要洞察力和理解
    的头像 发表于 04-09 19:51 1046次阅读

    DIY自制基于51单片机的LED金字塔

    德赢Vwin官网 网站提供《DIY自制基于51单片机的LED金字塔.pdf》资料免费下载
    发表于 10-25 10:27 0次下载
    DIY自制基于51单片机的LED<b class='flag-5'>金字塔</b>