操作系统---文件系统.pptx
《操作系统---文件系统.pptx》由会员分享,可在线阅读,更多相关《操作系统---文件系统.pptx(40页珍藏版)》请在咨信网上搜索。
1、10.3.1 VFS10.3.1 VFS一、一、VFSVFS的作用的作用Linux支持许多种文件系统,如EXT2,VFAT等 VFS(Virtual File System)是内核软件层。VFS提供了统一编程接口同时隐藏了不同文件系统的差别。可扩展性、可维护性好 进程描述符中有下面两个与文件系统相关的成员:struct fs_struct*fs;struct files_struct*files;二、进程描述符中与文件系统相关的成员二、进程描述符中与文件系统相关的成员fs_struct结构描述进程进行文件访问时用到的当前目录、根目录等信息。struct fs_struct struct den
2、try*root,*pwd;.;files_struct结构描述被进进程程打打开开使使用用的的文文件件信信息息,fd成员指向一个struct file*数组,数组中的已使用项指向某个正被打开的文件对象,数组中的索引称之为文件号,用户程序就是使用文件号对打开的文件进行操作。struct files_struct struct file*fd;struct file*fd_arrayNR_OPEN_DEFAULT;/*NR_OPEN_DEFAULT为32*/.;内核中与进程使用文件有关数据结构:rootpwddentrydentrydentryFiles_operationsinodeInode_
3、operationsinodeinodefd_arrayfiles_structfiletask_structfs_structSuper_block三、三、VFSVFS的文件模型的文件模型 VFS的关键是根据不同的文件系统抽象出了一个通用的文件模型。通用的文件模型由四种数据对象组成:文文件件对对象象:存储一个打开的文件和一个进程的关联信息。只要文件一直打开,这个对象就一直存在。文件对象用struct file结构描述:struct file struct list_head f_list;struct dentry *f_dentry;/*指向与文件对象关 联的dentry对象*/struc
4、t vfsmount *f_vfsmnt;struct file_operations *f_op;/*文件对象的 操作集合*/unsigned int f_flags;/*使用open()时 设定的标志*/mode_t f_mode;loff_t f_pos;/*对文件读写操作的 当前位置*/struct fown_struct f_owner;.;inodeinode对对象象:存储某个文件的信息。通常对应磁盘文件系统的文件控制块。struct inode struct list_headi_hash;struct list_headi_dentry;unsigned longi_ino;/
5、*inode号*/kdev_t i_dev;/*所在设备的设备号*/umode_t i_mode;/*表示文件类型及权限*/uid_t i_uid;/*文件拥有者的用户ID*/gid_t i_gid;/*用户所在组的ID*/loff_t i_size;/*文件大小*/time_t i_atime;/*最近一次的访问时间*/time_t i_mtime;/*最近一次的修改时间*/time_t i_ctime;/*文件创建时间*/struct inode_operations*i_op;struct super_block *i_sb;/*所属的超级块*/struct address_space*
6、i_mapping;.;dentry对象:dentry对象主要是描述文件名及其相关联的inode信息。struct dentry struct inode*d_inode;/*该dentry对象所属的inode*/struct dentry*d_parent;/*父目录*/struct list_head d_hash;/*hash值相同的dentry链表*/struct list_head d_subdirs;/*子目录链表*/struct qstr d_name;/*文件名及附属信息*/struct dentry_operations *d_op;.;超级块对象:存储已安装文件系统的信息,
7、通常对应磁盘文件系统的文件系统控制块。struct super_block struct list_head s_list;/*将所有的超级块链接起来*/kdev_ts_dev;/*所在设备号*/unsigned long s_blocksize;/*该文件系统磁盘块的 大小(字节数)*/unsigned chars_blocksize_bits;struct file_system_type*s_type;/*文件系统类型*/struct super_operations*s_op;struct dentry*s_root;/*根目录dentry对象*/struct list_head s_
8、dirty;/*修改过的 inodes队列*/.;各对象之间的联系各对象之间的联系inode对象与文件 一对一dentry对象与inode对象 多对一(硬连接)文件对象与dentry对象 多对一VFS各种对象之间的联系四、文件系统的注册与安装四、文件系统的注册与安装 1.1.文件系统驱动的注册文件系统驱动的注册 每一种文件系统使用前必须先注册一个file_system_type对象。这可以看成是文件系统driver的加载。struct file_system_type const char*name;/*文件类型名*/struct super_block*(*read_super)(struc
9、t super_block*,void*,int);struct file_system_type*next;.;file_systems2.2.文件系统分区的安装文件系统分区的安装#mount#mount t ext2/dev/hda3/mnt t ext2/dev/hda3/mnt 内核与之对应的系统调用是sys_mount()。该函数根据文件系统类型得到相应的file_system_type 对象,再取得该分区的超级块对象。建立分区根目录与安装点目录的关系。五、五、各种对象的操作接口各种对象的操作接口1.面向对象的接口 每个对象都有一套函数操作集合,属于不同文件系统的对象的操作也就不同,
10、VFS只负责提供接口(操作集合)。以超级块对象为例。超级块对象有一个struct super_operations*s_op成员struct super_operations void(*read_inode)(struct inode*);void(*write_inode)(struct inode*,int);void(*put_inode)(struct inode*);void(*delete_inode)(struct inode*);void(*put_super)(struct super_block*);void(*write_super)(struct super_bloc
11、k*);.;当 第 一 次 mount一 个 ext2分 区 时 会 调 用ext2_read_super(),该函数有一条语句sb-s_op=&ext2_sops。将操作表地址置入超级块对象相应域。ext2_sops变量的成员值如下:static struct super_operations ext2_sops=read_inode:ext2_read_inode,write_inode:ext2_write_inode,put_inode:ext2_put_inode,delete_inode:ext2_delete_inode,put_super:ext2_put_super,writ
12、e_super:ext2_write_super,.;而 当 第 一 次 mount一 个 fat分 区 时 会 调 用fat_read_super(),该函数有一条语句sb-s_op=&fat_sops。fat_sops变量的成员值如下:static struct super_operations fat_sops=write_inode:fat_write_inode,delete_inode:fat_delete_inode,put_super:fat_put_super,.;super_operations就是一个抽象类抽象类,它只提供接口但并没有实现这些接口,而ext2_sops、f
13、at_sops则是具体类具体类,实现相应的接口。其它几个接口与此类似。2.struct super_operations2.struct super_operationsread_inode 该函数从已mount的文件系统读入一 个inode的信息。该inode对象的 inode号已事先被初始化。write_inode:把 inode信 息 写 入 磁 盘 put_inode:inode对象从inode cache移去 时调用该函数delete_inode:删除inode时调用put_super:umount时VFS释放超级块时调用write_super:希望把VFS超级块写入磁盘 时调用3.
14、struct inode_operations3.struct inode_operationsstruct inode_operations int(*create)(struct inode*,struct dentry*,int);struct dentry*(*lookup)(struct inode*,struct dentry*);int(*link)(struct dentry*,struct inode*,struct dentry*);int(*unlink)(struct inode*,struct dentry*);int(*symlink)(struct inode*,
15、struct dentry*,const char*);.;create:第一个参数必须是目录型文件对应的inode。create在该目录下创建一个文件.lookup:第一个参数是目录型文件对应的inode。lookup()在该目录下查找一个文件。4.struct file_operations4.struct file_operations struct file_operations loff_t(*llseek)(struct file*,loff_t,int);ssize_t(*read)(struct file*,char*,size_t,loff_t*);ssize_t(*writ
16、e)(struct file*,const char*,size_t,loff_t*);int(*mmap)(struct file*,struct vm_area_struct*);int(*open)(struct inode*,struct file*);.;这些操作与系统调用接口相对应5.struct address_space_operations5.struct address_space_operations struct address_space_operations int(*writepage)(struct page*);int(*readpage)(struct fi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 操作系统 文件系统
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【人****来】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【人****来】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。