磁盘文件I/O,SSD结构,局部性原理 笔记
磁盘文件I/O过程
- 进程向内核发起read scene.dat请求;
- 内核根据inode获取对应该进程的address space,在address space查找page_cache,如果没有找到,内核分配一个page加到内存页;
- 第一次拷贝:读取scene.dat文件相应的页填充页缓存中的页 ;
- 第二次拷贝:内核将page_cahce中的page拷贝到用户进程的堆空间内存;

拷贝完成后,物理内存有两份拷贝(一份在page_cache,一份在用户的堆空间),如图;常规读文件必须从内核空间的page cache拷贝contents到用户空间,不仅耗费CPU时间降低CPU cache的命中,也浪费了物理内存。

mmap
内存映射文件mmap只复制一次是如何做的,mmap只有一次页缓存的复制,从磁盘文件复制到页缓存中;
mmap会创建一个虚拟内存区域vm_area_struct,进程的task_struct维护着这个进程所有的虚拟内存区域信息,虚拟内存区域会更新相应的进程页表项,让这些页表项直接指向页缓存所在的物理页page。mmap新建的这个虚拟内存区域和进程堆的虚拟内存区域不是同一个,所以mmap是在内存映射区域,位于用户进程 栈和堆之间。

页缓存的作用:它位于内存和文件之间(内核空间),文件I/O操作实际上只和页缓存交互,不直接和内存交互。
page结构表示物理内存页帧,同一个物理内存地址可以同时被内核进程和用户进程访问,只要将用户进程的页表项也指向这个物理内存地址。也就是mmap的实现原理。
SSD结构
基于闪存的存储技术,SSD封装插到I/O总线上标准硬盘插槽,一个SSD封装由一个或多个闪存芯片和闪存翻译层组成;闪存芯片替代传统硬盘的机械驱动器,闪存翻译层是一个硬件设备,相当于磁盘控制器的角色,将。逻辑块请求翻译成对底层物理设备的访问。

SSD的读比写快,一个闪存由若干个块的序列组成,每个块由若干页组成,页大小通常512byte~4KB,块有32~128页组成,大小约为16KB~512KB。数据是以页为单位读写的。
写时只有一页所属的块整个被擦除后,才能写这一页(通常该块中所有位置被置为1)。
随机写很慢的原因:
- 擦除块需要相对较长的时间;
- 如果写操作试图修改一个包含已经有数据的页,这个块中的所有有用数据的页都必须拷贝到一个新的块,然后才能对该页写。
SSD的优点:没有移动的部件,随机访问时间比旋转磁盘要快,能耗更低;反复写之后,闪存块会磨损;闪存翻译层中的平均磨损逻辑试图通过将擦除平均分布在所有的块来最大化每个块的寿命。
局部性原理
局部性原理通常有两种不同的形式:时间局部性和空间局部性;一个具有良好时间局部性的程序中,被引用过一次的内存位置很可能在不远的将来再次被多次引用;
一个具有良好空间局部性的程序中,如果内存位置被引用了一次,很可能在不远的将来引用附件的一个内存位置。
- 重复引用相同变量的程序有良好的时间局部性;
- 对于步长为k的引用模式的程序,步长越小,空间局部性越好。
- 对于取指令来说,循环有好的时间和空间局部性。循环越小,迭代次数越多,局部性越好。
链接
Page Cache, the Affair Between Memory and Files
《深入理解计算机系统》(第三版) 第六章
磁盘文件I/O,SSD结构,局部性原理 笔记的更多相关文章
- 【翻译】CEDEC2013 BANDAI NAMCO 了解游戏格斗动画中的身体运动结构和原理
CEDEC搬运工程开始~ 这篇会议PPT的作者 元梅幸司曾经就职在TECMO参与开发了死或生2,3[ DEAD OR ALIVE],忍龙「NINJA GAIDEN」后来加入NAMCO(现在是BAN ...
- Jmeter 结构、原理介绍
Jmeter结构.原理介绍 一.Jmeter 简介 1.是基于java语言的开源的应用软件. 2.可以进行接口测试.性能测试.接口及性能的自动化测试. 二.Jmeter体系结构 元件:可以理解为每一个 ...
- [转帖]SSD的工作原理、GC和TRIM、写入放大以及性能评测
SSD的工作原理.GC和TRIM.写入放大以及性能评测 https://blog.csdn.net/scaleqiao/article/details/50511279 SSD的物理结构和工作原理 ...
- 局部性原理的点滴应用场景 use of localityprinciple
话说九月份博士入学面试的时候被问到了一个问题:请说明一下局部性原理在计算机科学中的应用场景?(哈哈,不记得怎么问的了,大概是这个意思)但是巴拉巴拉整半天却也只说出了一个Cache,后来补充的也都是跟C ...
- Python的dict字典结构操作方法学习笔记
Python的dict字典结构操作方法学习笔记 这篇文章主要介绍了Python的dict字典结构操作方法学习笔记本,字典的操作是Python入门学习中的基础知识,需要的朋友可以参考下 一.字典的基本方 ...
- 3D-camera结构光原理
3D-camera结构光原理 目前主流的深度探测技术是结构光,TOF,和双目.具体的百度就有很详细的信息. 而结构光也有双目结构光和散斑结构光等,没错,Iphone X 的3D深度相机就用 散斑结构光 ...
- B/S结构通信系统原理
本文介绍JavaWeb的B/S结构通信原理 概念: Javaweb中B/S架构是一种系统架构形式,这里的B是Browser(浏览器),S是Server(服务器),是一种系统的架构形式,有 ...
- 详细了解 InnoDB 内存结构及其原理
最近发现,文章太长的话,包含的信息量较大, 并且需要更多的时间去阅读.而大家看文章,应该都是利用的一些碎片时间.所以我得出一个结论,文章太长不太利于大家的吸收和消化.所以我之后会减少文章的长度,2-3 ...
- Map实现之HashMap(结构及原理)(转)
java.util包中的集合类包含 Java 中某些最常用的类.最常用的集合类是 List 和 Map.List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构 ...
随机推荐
- CSAcademy Beta Round #3 a-game
题目连接 a-game 大意:有一个只包含A和B的字符串,两个人分别取这个串的子串,但是每一次取不能与之前取到过的子串有交集,最后谁取到的所有串中A的总数量少的判为胜.如果一样,则为平手. 给出这样的 ...
- SQLite中使用CTE巧解多级分类的级联查询
在最近的项目中使用ActiveReports报表设计器设计一个报表模板时,遇到一个多级分类的难题:需要将某个部门所有销售及下属部门的销售金额汇总,因为下属级别的层次不确定,所以靠拼接子查询的方式显然是 ...
- Apache Spark1.1.0部署与开发环境搭建
Spark是Apache公司推出的一种基于Hadoop Distributed File System(HDFS)的并行计算架构.与MapReduce不同,Spark并不局限于编写map和reduce ...
- .net之抽象工厂模式
//抽象工厂 //抽象食物 namespace abstractFactory{ public abstract class food { public abstract void Food(); } ...
- TFS下载文件已损坏问题
近日在把一个数千人使用的TFS环境进行机房迁移时,从现有的服务器集群中整体迁移到另外一个服务器集群中,经过周密的设计迁移方案,充分验证方案中的各个关键过程,最终在几乎对数千人用户完全透明,没有任何感知 ...
- C#基础知识-编写第一个程序(二)
通过上一篇数据类型已经介绍了C#中最基本的15种预定义数据类型,了解每一种类型代表的数据以及每种类型的取值范围,这是很重要也是最基本.下面我们通过实例来了解每个类型如何去使用.编写C#程序时我们需要用 ...
- 结构体的vector resize()与初始化
序: 我们在使用vector的时候可以自定义里面的数据类型.例如这样: struct Edge{ int from; int to; int weight; }; vector<Edge> ...
- IOS的Application以及IOS目录的介绍
1.UIApplication介绍 .UIApplication对象是应用程序的象征 .每一个应用都有自己的UIApplication对象,而且是单例的 .通过[UIApplication share ...
- Excel 数据导出
Web controller /// <summary> /// 导出数据 /// </summary> /// <param name="UserID&qu ...
- js函数的使用
js函数应用 [函数的声明及调用]: 1.函数声明: function 函数名(参数1,参数2,·····){ //函数体 retu ...