欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    Linux的虚拟文件系统.ppt

    • 资源ID:70277007       资源大小:1.37MB        全文页数:66页
    • 资源格式: PPT        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    Linux的虚拟文件系统.ppt

    Linux的虚拟文件系统的虚拟文件系统提纲提纲虚拟文件系统VFS的作用VFS的数据结构文件系统类型文件系统安装路径名查找VFS系统调用的实现文件加锁1/17/20232嵌入式嵌入式OS虚拟文件系统虚拟文件系统VFS的作用的作用虚拟文件系统Virtual FilesystemVirtual Filesystem SwitchVFS是一个软件层,用来处理与Unix标准文件系统相关的所有系统调用。是用户应用程序与文件系统实现之间的抽象层能为各种文件系统提供一个通用的、统一的接口Linux与其他类Unix系统一样,采用虚拟文件系统VFS来达到支持多种文件系统格式的目标1/17/20233嵌入式嵌入式OSVFS在一个简单文件复制操作中的作用在一个简单文件复制操作中的作用假设用户输入以下shell命令$cp/floppy/TEST/tmp/test 其中,/floppy是MS-DOS的磁盘的一个挂载点(安装点)/tmp是Ext2文件系统中的一个目录对于cp命令而言,它不需要知道/floppy/TEST和/tmp/test分别是什么文件系统类型在cp命令中,它通过VFS提供的系统调用接口进行文件操作1/17/20234嵌入式嵌入式OS1/17/20235嵌入式嵌入式OSVFS支持的文件系统类型支持的文件系统类型VFS支持的文件系统可以划分为三种主要类型基于磁盘的文件系统:它们管理在本地磁盘分区中可用的存储空间Linux使用的文件系统:ext2、ext3、ReiserFSUnix家族的文件系统:SYSV文件系统,UFS,MINIX文件系统以及VERITAS VxFS微软公司的文件系统:MS-DOS、VFAT以及NTFSISO9660CD-ROM文件系统和通用磁盘格式的DVD文件系统其他有专利权的文件系统,如HPFS、HFS、AFFS、ADFS起源于非Linux系统的其他日志文件系统,JFS,XFS1/17/20236嵌入式嵌入式OS网络文件系统:用于访问属于其他网络计算机的文件系统所包含的文件NFS、Coda、AFS、SMB、NCP特殊文件系统不同于上述两大类不管理具体的磁盘空间/proc各种不同的文件系统通过mount(挂载、安装)到根文件系统中在Linux中,根文件系统即根目录所代表的文件系统通常是ext2文件系统1/17/20237嵌入式嵌入式OSVFS中通用文件模型概念中通用文件模型概念VFS的基本思想:引入一个通用文件模型,这个模型能够表示所有支持的文件系统对于一个具体实现的文件系统,在处理时,需要将其进行概念上的转换例如,在通用文件模型中,目录被看成是普通文件在实现上,read()sys_readfile数据结构f_opMS_DOS文件操作指针(其中的read操作)类似面向对象的概念1/17/20238嵌入式嵌入式OS通用文件模型有下列对象类型组成超级块对象(superblock object)存放文件系统相关信息:例如文件系统控制块索引节点对象(inode object)存放具体文件的一般信息:文件控制块/inode文件对象(file object)存放已打开的文件和进程之间交互的信息目录项对象(dentry object)存放目录项与文件的链接信息1/17/20239嵌入式嵌入式OS三个不同的进程打开同一个文件三个不同的进程打开同一个文件两个不同的硬链接同一个硬链接1/17/202310嵌入式嵌入式OSVFS所处理的系统调用所处理的系统调用mount、umount:挂载/卸载文件系统sysfs:获取文件系统信息statfs、fstatfs、ustat:获取文件系统统计信息chroot:更改根目录chdir、fchdir、getcwd:操纵当前工作目录mkdir、rmdir:创建/删除目录getdents、readdir、link、unlink、rename:对目录项进行操作readlink、symlink:对符号链接进行操作chown、fchown、lchown:更改文件所有者chmod、fchmod、utime:更改文件属性open、close、create 1/17/202311嵌入式嵌入式OS上述大部分操作之需要与通用文件模型中的一些对象打交道,而不需要真正操作具体的文件系统和文件,因此可以把VFS看成是一个“通用”的文件系统,在必要时依赖某种具体的文件系统1/17/202312嵌入式嵌入式OSVFS的数据结构的数据结构每个VFS对象都对应一定的数据结构,在这个数据结构中包含对象的属性及其方法一个具体的文件系统:超级块对象:super_block所有超级块链表:super_blocks:s_list域文件系统特有信息:s_fs_info域脏标志:s_dirt域文件系统特有方法:super_operations数据结构及域include/linux/fs.h1/17/202313嵌入式嵌入式OS一个具体的文件:Inode对象:inodeInode特有的方法目录项对象:dentry一个打开文件:文件对象:file文件操作指针f_pos文件对象特有的方法专用高速缓存:“filp”,filp_cachep include/linux/fs.hinclude/linux/dcache.hinclude/linux/fs.h1/17/202314嵌入式嵌入式OS1/17/202315嵌入式嵌入式OS1/17/202316嵌入式嵌入式OS与进程相关的文件与进程相关的文件文件系统相关信息fs_struct打开文件相关信息files_structinclude/linux/fs_struct.hinclude/linux/path.h1/17/202317嵌入式嵌入式OSinclude/linux/fdtable.hinclude/linux/fdtable.hinclude/linux/types.hinclude/linux/posix_types.h1/17/202318嵌入式嵌入式OS1/17/202319嵌入式嵌入式OS文件系统类型文件系统类型特殊文件系统用来为系统程序员、系统管理员等提供一种容易的方式来操作内核的数据结构并实现操作系统的特殊特征常用的特殊文件系统1/17/202320嵌入式嵌入式OS1/17/202321嵌入式嵌入式OS文件系统类型的注册文件系统类型的注册文件系统类型:file_system_type在系统初始化期间,register_filesystem()用来注册编译时指定的每个文件系统相应的文件系统对象被插入到file_systems链表中unregister_filesystem()1/17/202322嵌入式嵌入式OS文件系统的挂载文件系统的挂载根文件系统在系统初始化过程中被直接mount提供系统初始化脚本以及基本命令每个文件系统都有自己的根目录如果一个文件系统的根目录是系统目录树的根目录,那个这个文件系统就是根文件系统其他文件系统可以挂载到系统的目录树上这样的目录称为挂载点(mount点,安装点)文件系统之间的挂载关系对应文件系统之间的父子关系1/17/202323嵌入式嵌入式OS例如,放在软盘/dev/fd0上的ext2文件系统,可通过下列命令安装在/flp上mount-t ext2/dev/fd0/flp 一般情况下,只允许挂载一次在umount之前,其他对/dev/fd0的挂载命令会失败在2.4中,可以挂载多次不管被挂载多少次,只有一个真实的文件系统,因此只有一个超级块对象1/17/202324嵌入式嵌入式OS已挂载文件系统描述符vfsmount挂载根文件系统第一阶段:安装一个特殊的文件系统,该文件系统仅提供一个作为初始安装点的空目录:init_mount_tree第二阶段:mount_root挂载一个文件系统sys_mount卸载一个文件系统sys_umount1/17/202325嵌入式嵌入式OS路径名查找路径名查找VFS是如何从文件路径名找到相应的索引节点的?分析路径名,将它拆分成一个文件名序列除了最后一个文件名之外,其他所有文件名必定都是目录名搜索的起点:绝对路径:currentfsroot相对路径:currentfspwd1/17/202326嵌入式嵌入式OS首先找到起点目录的索引节点在这个索引节点的目录文件中,找到第一个目录名(文件名)所对应的索引节点在第一个目录名的索引节点的目录文件中找到第二个目录名(文件名)所对应的索引节点反复,直到文件名序列的最后一项1/17/202327嵌入式嵌入式OS在上述查找过程中要处理的其他问题:对每个目录的访问权限必须进行检查若是符号链接,需要进行扩展要考虑符号链接的循环引用(进行处理)目录名可能是一个文件系统的安装点,必须扩展到一个新的文件系统中路径名查找数据结构:struct nameidata在需要进行路径名查找的时候,依此调用如下函数:path_init,path_walk,path_release1/17/202328嵌入式嵌入式OS查找操作的标志查找操作的标志1/17/202329嵌入式嵌入式OS标准查找操作标准查找操作要处理的问题跳过第一个路径名分量前的任何/考虑符号链接的查找检查权限考虑“.”考虑“.”考虑普通目录,要在目录项高速缓存中查找1/17/202330嵌入式嵌入式OS父路径名的查找父路径名的查找在很多情况下,查找操作的真正目的不是路径名的最后一个分量,而是最后分量的前一个分量例如创建一个文件时此时,路径解析的结果中存放最后一个分量所在目录对应的对象1/17/202331嵌入式嵌入式OS符号链接的查找符号链接的查找关于符号链接的解析由内核来完成如何识别这是一个符号链接?如何处理符号链接的循环情况?1/17/202332嵌入式嵌入式OSVFS系统调用的实现系统调用的实现仍然考虑$cp/floppy/TEST/tmp/test假定cp执行下列代码片段(实际要更复杂)inf=open(/floppy/TEST,O_RDONLY,0);outf=open(/tmp/test,O_WRONLY|O_CREAT|O_TRUNC,0600);do len=read(inf,buf,4096);write(outf,buf,len);while(len);close(outf);close(inf);1/17/202333嵌入式嵌入式OSopen()系统调用sys_openread和write系统调用sys_writesys_readclose系统调用sys_close1/17/202334嵌入式嵌入式OSExt2文件系统简介文件系统简介EXT2文件系统是EXT文件系统的升级,在Linux中得到了广泛的使用。介绍EXT2文件系统的磁盘组织目录项和支持的文件类型1/17/202336Linux OS analysis(一)(一)EXT2文件系统的磁盘组织文件系统的磁盘组织 除了引导扇区之外,EXT2磁盘分区被顺序划分为若干个磁盘块组(磁盘块组(Block Group)。每个块组由若干个磁盘块,按照相同的方式组织,具有相同的大小。EXT2磁盘块组中的磁盘块按顺序被组织成:一个用作超级块超级块的磁盘块。在这个磁盘块里,存放了文件系统超级块的一个拷贝;N个记录组描述符组描述符的磁盘块;1个记录数据块位图数据块位图的磁盘块;1个记录索引结点位图索引结点位图的磁盘块;N个用作索引结点表索引结点表的磁盘块;N个用作数据块数据块的磁盘块。1/17/202337Linux OS analysisEXT2的超级块的超级块每个块组的第一个磁盘块用来保存所在EXT2 fs的超级块多个块组中的超级块形成冗余在某个或少数几个超级块被破坏时,可用于恢复被破坏的超级块信息。1/17/202338Linux OS analysis超级块超级块1/17/202339Linux OS analysis1/17/202340Linux OS analysisLinux 2.4.18中在内存中记录中在内存中记录ext2超级块的数超级块的数据结构据结构1/17/202341Linux OS analysis组描述符组描述符组描述符用来描述一个磁盘块组的相关信息1/17/202342Linux OS analysis索引结点索引结点 EXT2中所有的索引结点大小相同,都是128个字节。1/17/202343Linux OS analysis1/17/202344Linux OS analysis索引节点表索引节点表EXT2的一个磁盘块组中的索引结点存储在一组连续的磁盘块中,形成一个索引结点表。这组磁盘块中的第一个磁盘块的块号存储在超级块的bg_inode_table数据项中。根据磁盘块的大小,可以计算出每个磁盘块能容纳多少个索引结点根据索引结点的总个数,可以计算出索引结点表所需要占用的磁盘块的个数。1/17/202345Linux OS analysis关于索引节点中的关于索引节点中的i_blockext2的索引结点中使用了组合索引方式。前12项用作直接索引第13项用作间接索引第14项用作二次间接索引第15项用作三次间接索引 1/17/202346Linux OS analysis数据块位图和索引结点块位图数据块位图和索引结点块位图EXT2的空闲盘块分配算法采用了位图法位图:为便于查找数据块或索引结点的分配信息每个位(bit)都对应了一个磁盘块:0,表示对应的磁盘块(或索引结点)空闲1,表示占用。2个位图分别占用一个专门的磁盘块。根据磁盘块的大小,可以计算出每个块组中最多能容纳的数据块个数和索引节点块个数。1/17/202347Linux OS analysis(二)(二)EXT2中的目录项和文件类型中的目录项和文件类型 在EXT2中,目录是一种特殊的文件,这种文件的数据块中存放了该目录下的所有目录项 1/17/202348Linux OS analysis新版的目录项结构1/17/202349Linux OS analysisEXT2支持的文件类型支持的文件类型 EXT2在目录项中存放了文件的类型信息。文件类型可以是07中的任意一个整数。它们分别代表如下含义:0:文件类型未知;1:普通文件类型;2:目录;3:字符设备;4:块设备;5:有名管道FIFO;6:套接字;7:符号链接。1/17/202350Linux OS analysis注意:注意:1/17/202351Linux OS analysis(三)创建一个(三)创建一个ext2文件系统文件系统在磁盘上创建文件系统通常有两个步骤:格式化磁盘Linux中:superformat或者fdformat创建文件系统Ext2:mke2fsmke2fs的缺省参数磁盘块大小:1024字节分片:目前不支持,因此与磁盘块一样分配inode的个数:1/8192B永久保留的块的个数:51/17/202352Linux OS analysis创建流程创建流程1.初始化超级块和组描述符2.Optionally,检查是否有坏块,若有创建坏块列表3.对每个块组,保留所有用来存放超级块、组描述符、inode表、2个位图的磁盘块4.初始化每个块组中的位图5.初始化每个块组中的inode表6.创建/root 目录7.创建 lost+found 目录(供e2fsck 使用,与坏块相关)8.为上述两个目录而更新位图信息9.若有坏块,则将其在 lost+found 目录中组织起来1/17/202353Linux OS analysis以以1.44MB的软盘为例,创建的软盘为例,创建ext2文件系统后文件系统后1/17/202354Linux OS analysis(四)(四)Ext2提供的各种对象方法提供的各种对象方法超级块对象方法1/17/202355Linux OS analysis索引节点对象方法1/17/202356Linux OS analysis文件对象方法1/17/202357Linux OS analysis(五)管理(五)管理ext2的磁盘空间的磁盘空间存储在磁盘上的文件与用户所“看到”的文件有所不同:用户感觉,文件在逻辑上是连续的而在磁盘上,存储文件数据的磁盘块可能分散在磁盘各处用户感觉,文件可能比较大而在磁盘上,由于文件空洞的存在,分配给文件的磁盘空间可能小于用户感觉到的文件大小。1/17/202358Linux OS analysis涉及到如下操作:创建/删除一个索引节点数据块的寻址文件空洞分配/释放一个数据块1/17/202359Linux OS analysis创建创建/删除一个索引节点删除一个索引节点创建一个磁盘索引节点删除一个索引节点1/17/202360Linux OS analysis关于数据块的寻址关于数据块的寻址任何一个常规文件都会包含一系列数据块文件内块号 vs.逻辑块号根据数据在文件中的偏移可以计算逻辑块号:首先计算出文件内块号(偏移f1)/块大小的商 1 根据索引信息,查询到逻辑块号1/17/202361Linux OS analysis混合索引示意图混合索引示意图1/17/202362Linux OS analysis文件大小限制文件大小限制1/17/202363Linux OS analysis关于文件空洞关于文件空洞A file hole is a portion of a regular file that contains null characters and is not stored in any data block on disk.这是UNIX文件一直以来都有的一个特性例如命令:创建一个大小为102461字节的文件,这个文件有一个102466144个字节大小的空洞。只有最后一个字节存放了字母“X”文件空洞可以节省磁盘空间Ext2通过数据块的动态分配来实现这一点:当且仅当一个进程要写数据到文件中的时候才真正分配当且仅当一个进程要写数据到文件中的时候才真正分配磁盘块磁盘块1/17/202364Linux OS analysis分配分配/释放一个数据块释放一个数据块当一个文件需要新的数据块来存放数据时当一个文件被删除或者被截断时1/17/202365Linux OS analysisThanksThanks!The end.

    注意事项

    本文(Linux的虚拟文件系统.ppt)为本站会员(qwe****56)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开