磁盘文件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,它们是可变大小的列表,比较适合构 ...
随机推荐
- JS中直接调用后台静态方法
这两天在维护一个很久之前的老项目,需要在jsp中增加显示一些新的模块,需要连表查询数据库返回数据 最开始想到的是用ajax,但是由于项目十几年前的老项目(jsp页面都是最原始的拼接组成,没有单独的js ...
- 在Delphi下使用迅雷APlayer组件进行免注册开发
之前都是用的delphi下的dspack进行的视频开发,这个组件其实很好用,就是找解码器麻烦点,而且还得在客户的计算机上使用RegSvr32.exe也注册解码器,要不有可能播放不了. 结果在查找合适的 ...
- (函数封装)获取class名称
使用原生JavaScript,获取类操作符时:即使使用getElementByClassName,在Firefox和IE9以下是不兼容的.Firefox下是可以用它获取的到元素而IE不行,一般框架都会 ...
- Python 面向对象之一
Python 面向对象之 类与属性 今天接触了一下面向对象,发现面向对象和之前理解的简直就是天壤之别,在学Linux的时候,一切皆文件,现在学面向对象了,so,一切皆对象. 之前不是一直在学的用面向函 ...
- jQuery选择器与CSS选择器
1. 通过位置选择的几个操作: :first:默认情况下是相对整个页面来说的第一个,如:li:first表示整个页面的第一个li元素,而ul li:first表示整个页面的第一个li元素,并且是在ul ...
- 给上传文件的input控件"美容"
作为一名前端程序猿呢,在工作中经常会遇到form表单这种东西.然而表单的其他input控件样式还是很好改变的.但是,唯独input类型是file的文件上传控件可能就没那么好打扮的漂亮.刚好菜鸟我最近工 ...
- ubuntu系统搭建以太坊私有链
1.安装curl.git apt-get update apt-get install git apt-get install curl 2.安装go curl -O https://storage. ...
- tpcc-mysql安装
1.因为我的虚拟机是centos 7 min版本,所以先得安装gcc gcc++: http://mirror.centos.org/centos/7/os/x86_64/Packages/ rp ...
- 用户交互式命令:read
read命令从键盘读取变量的值,通常用在shell脚本中与用户进行交互的场合.该命令可以一次读取多个变量的值,变量和输入的值都需要使用空格隔开. 语法 read [option]... [name . ...
- c#无限循环线程如何正确退出
c#无限循环线程如何正确退出 在主程序将要结束时,迅速正确退出无限循环执行的子线程.一般子线程循环执行会有一个指定的周期, 在子线程等待(或者睡眠)时,无法唤醒退出,尤其在执行周期较长时,子线程无法即 ...