虚拟文件系统


  系统内所有文件系统不但依赖VFS共存,而且也依靠VFS系统协同工作。

  VFS使得用户可以直接使用open/read/write等系统调用,而无需考虑具体文件系统和实际物理介质。

  VFS中具有四个主要的对象类型:

  •   超级块 super_block

    • 代表一个已安装的文件系统
    •   通常对应于存放在磁盘特定扇区中的文件系统超级块或文件系统控制块。
  •   索引节点 inode
    •   代表文件系统中(虽然索引节点仅当文件被访问时,才在内存中创建)的一个文件,它也可以是设备或管道这样的特殊文件
    •   包含内核在操作文件或目录时需要的全部信息
  •   目录項对象 denty
    •   代表一个目录项,是路径的一个组成部分
    • VFS把目录当作文件对待,所以路径/bin/vi中,bin和vi都属于文件--bin是特殊的目录而vi是一个普通文件,路径中的每个组成部分由有一个索引节点对象表示。每个denty代表路径中的一个特定部分,/,bin和vi都属于denty,前两个是目录,后一个是文件。
  •   文件对象 file
    •   表示进程已经打开的文件(即一大开的文件在内存中的表示)。

块I/O层


  字符设备和块设备的根本区别在于他们是否可以被随机访问,就是能否在访问设备时随意地从一个位置跳转到另一个位置。

1.块设备中最小的可寻址单元是扇区。扇区一般是2的整数倍,最常见的是512字节大小的。

2.当一个快被调入内存时,它要存储在一个缓冲区中,每个缓冲区都有一个对应的描述符,buffer_head(缓冲区头<linux/buffer_head.h>,包含缓冲区所需要的所有信息)。

3.目前内核中块I/O操作的基本容器由bio结构体表示<linux/bio.h>,代表正在现场执行的I/O操作,管理相关信息。

4.I/O调度程序,在请求提交前,先执行名为合并和排序的预操作。

  I/O调度程序将磁盘I/O资源分配给系统中所有挂起的块I/O请求。这种资源分配是通过将请求队列中挂起的请求合并和排序来完成的。而进程调度程序的作用是将处理器资源分配给系统中的运行进程。

  I/O调度程序的工作是管理块设备的请求队列。整个请求队列按扇区增长的方向排列,使所有请求按硬盘上扇区的排列顺序有序排列(尽可能),这样可以缩短单独一次请求的寻址时间,更重要的优化在于,通过保持磁盘头以直线方向移动,缩短了有所请求的磁盘寻址时间。该排序算法类似于电梯调度。

  linus电梯可能发生的四种操作:

  1. 如果队列中已经存在一个对相邻磁盘扇区操作的请求,那么新请求将和这个已经存在的请求合并成一个请求。
  2. 如果队列中存在一个驻留时间过长的请求,那么新请求将被插入到队列尾部,以防止其他旧的请求发生饥饿。
  3. 如果队列中以扇区方向为序存在合适的插入位置,那么新请求就插入该位置,保证队列中的请求是以被访问磁盘物理位置为序进行排列的。
  4. 如果队列中不存在合适的请求插入位置,请求将被插入到队列尾部。

  目前2.6内核中已经有四种不同的I/O调度程序

  •   最终期限I/O调度程序

    • 为了减少请求饥饿,降低读操作响应时间,必须以降低全局吞吐量为代价。通过增加一个超时时间,并按照一定的请求类型排序,读写请求分别插入到特定的读/写FIFO队列中,当有请求超时,就会提取出请求进行服务。/block/deadline-iosched.c
  •   预测I/O调度程序
    • 保证良好的读操作,也能维持良好的全局吞吐量。请求提交之后并不直接返回处理其他请求,而是会刻意的空闲片刻(默认为6毫秒),对于提交其他读操作请求是一个好机会,任何相邻磁盘位置操作的求情都回立刻得到处理。这种预测行为通过一系列的启发和统计工作完成。/block/as-iosched.c
  •   完全公正的排队I/O调度程序
    •   专门为工作负荷设计,如音频播放器总能即时从磁盘再填满它的音频缓冲区。把进入I/O请求放入特定的队列中,这种队列是根据引起I/O请求的进程组织的。以时间片轮转调度队列,从每个队列中选取请求数,然后进行下一轮调度。/block/cfq-iosched.c
  •   空操作的I/O调度程序
    •   不排序,也不进行其他预测,它是专为随机访问设备而设计的,如闪存卡。/block/noop-iosched.c

  内核命令行选项 elevator = cfq 会启动完全公正的I/O调度程序给所有的块设备。参数可选as(预测)、cfq(完全公正的排队)、deadline(最终期限)、noop(空操作)。

转载于:https://www.cnblogs.com/coder2012/archive/2013/05/30/3100962.html

Linux内核设计与实现笔记(一) 虚拟文件系统、块I/O层相关推荐

  1. LKD (linux内核设计与实现)笔记

    zcat /proc/config.gz > .config 编译时不想看到垃圾信息: make > ../detritus make > /dev/null 提高编译效率:make ...

  2. 《Linux内核设计与实现》读书笔记(十八)- 内核调试

    内核调试的难点在于它不能像用户态程序调试那样打断点,随时暂停查看各个变量的状态. 也不能像用户态程序那样崩溃后迅速的重启,恢复初始状态. 用户态程序和内核交互,用户态程序的各种状态,错误等可以由内核来 ...

  3. 初探内核之《Linux内核设计与实现》笔记下

    定时器和时间管理 系统中有很多与时间相关的程序(比如定期执行的任务,某一时间执行的任务,推迟一段时间执行的任务),因此,时间的管理对于linux来说非常重要. 主要内容: 系统时间 定时器 定时器相关 ...

  4. 《Linux内核设计与实现》读书笔记 - 目录 (完结)

    读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!!!). 为了方便以后查看, 做个<Linux内核设计与实现>读书笔记 的目录: < ...

  5. Linux内核设计与实现学习笔记目录

    **注:**这是别人的笔记,我只是把目录抄过来 <Linux内核设计与实现学习笔记> 1.<Linux内核设计与实现>读书笔记(一)-内核简介 2.<Linux内核设计与 ...

  6. 《Linux内核设计与实现》读书笔记(十七)- 设备与模块

    本章主要讨论与linux的设备驱动和设备管理的相关的4个内核成分,设备类型,模块,内核对象,sysfs. 主要内容: 设备类型 内核模块 内核对象 sysfs 总结 1. 设备类型 linux中主要由 ...

  7. 初探内核之《Linux内核设计与实现》笔记上

    内核简介  本篇简单介绍内核相关的基本概念. 主要内容: 单内核和微内核 内核版本号 1. 单内核和微内核   原理 优势 劣势 单内核 整个内核都在一个大内核地址空间上运行. 1. 简单. 2. 高 ...

  8. 《Linux内核设计与实现》读书笔记 - 目录 (完结)【转】

    转自:http://www.cnblogs.com/wang_yb/p/3514730.html 读完这本书回过头才发现, 第一篇笔记居然是 2012年8月发的, 将近一年半的时间才看完这本书(汗!! ...

  9. 《Linux内核设计与实现》读书笔记(十九)- 可移植性

    linux内核的移植性非常好, 目前的内核也支持非常多的体系结构(有20多个). 但是刚开始时, linux也只支持 intel i386 架构, 从 v1.2版开始支持 Digital Alpha, ...

最新文章

  1. 开源图形库 FreeImage
  2. python使用fpdf将生成的长字符串手动换行写入pdf
  3. C# 窗体实例化一次
  4. 打印100~200 之间的素数
  5. 写论文时的一些高大上词句
  6. IdentityServer4系列 | 快速搭建简易项目
  7. php error_get_last(),PHP捕获异常register_shutdown_function和error_get_last的使用
  8. nodejs websocket server
  9. notes java api_如何使用Java来调用Notes API发送邮件(包括附件)
  10. 统计输入的字母 c语言,请问这个用c怎么做:输入一串字符,分别统计其中数字和字母的个数...
  11. pyspider 数据存储到mongoDB中
  12. 只学一门java可行吗,java可以作为第一门编程语言学习吗
  13. STM32F107各种接口程序合集工程文件
  14. 深入理解LTE网络的CDRX
  15. minic 动作句型处理
  16. CSS运用中所体会到的方法
  17. java如何使用conver_Springmvc conver实现原理及用法解析
  18. cad标注样式快捷键_说说CAD尺寸精度设置的两种方法!
  19. 算法心得:高效算法的奥秘 作者:[美] Henry S. Warren, Jr.
  20. (向量空间)概念和法则的人为定义 I

热门文章

  1. oracle 字典_Oracle只读用户通过JAVA应用程序导出其它用户数据最小权限
  2. 电子时钟单片机c语言程序,51单片机电子时钟C语言程序
  3. 让浏览器判断html为手机页面,判断是从手机端还是客户端访问的页面,判断浏览器类型...
  4. 如何利用Python调用一些搜索引擎网站?
  5. 第十六届全国大学生智能车竞赛线上赛点赛道审核 - 广东赛区
  6. 2021年春季学期-信号与系统-第三次作业参考答案-第二道题
  7. 成绩统计自动计算表格_电气计算太慢?62套自动计算EXCEL表格,一键下载秒出结果...
  8. qt布局中listwidget 保持固定宽度_UI设计中响应式设计实用技巧
  9. phoenix的元数据一般存在哪里_Phoenix常用操作记录-阿里云开发者社区
  10. kalivm 虚拟机访问win文件夹_利用vmware搭建属于自己的win虚拟环境