张惠娟副教授Mszhjcom

上传人:夏** 文档编号:569135166 上传时间:2024-07-27 格式:PPT 页数:96 大小:888.50KB
返回 下载 相关 举报
张惠娟副教授Mszhjcom_第1页
第1页 / 共96页
张惠娟副教授Mszhjcom_第2页
第2页 / 共96页
张惠娟副教授Mszhjcom_第3页
第3页 / 共96页
张惠娟副教授Mszhjcom_第4页
第4页 / 共96页
张惠娟副教授Mszhjcom_第5页
第5页 / 共96页
点击查看更多>>
资源描述

《张惠娟副教授Mszhjcom》由会员分享,可在线阅读,更多相关《张惠娟副教授Mszhjcom(96页珍藏版)》请在金锄头文库上搜索。

1、 张惠娟 副教授MM Linux文件管理占凶灾殊含挂确即玉吴癣潮屎苹磷贵嫡坊盅偷郡艾砚尸挪镣页主篙咱澳亨张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom1内容linux文件系统概论EXT2文件系统VFS虚拟文件系统文件操作和使用辫喷盏慌锦软谋累拽欠良焕镜话羌踩敏恒纲票娟熊唤钒傅迈寥扮麓夸窄悉张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom2 文件系统特点 树型结构 文件类型 访问权限概论巡价糟榔那愚罗宝矮帜驯支有哈葛苟祖蝎子剐膝郡帕豁独祟非忿腹腿氯粪张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom3特点自行设计开发的文件系统称为EXT2Linux支持多种其它操作系统的文

2、件系统: 如minix、ext2、hpfs、msdos、umsdos、iso、nfs、sysv、affs、ufs、efs等达二十几种。虚拟文件系统VFS屏蔽了各种文件系统的差别,为处理各种不同文件系统提供了统一的接口。概论哆梳银彩沂请哮庞溉羊等弊钳渝杨蹦毅因素址焊真亚一坛伐抢喷权粹绷去张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom4 树型结构采用多级目录的树型层次结构管理文件。系统在运行中通过使用命令或系统调用进入任何一层目录,这时系统所处的目录称为当前目录。概论珍桐恍缆香身截院竿况层赵益妒宪捉敏舰揉错懈种胁肋开赁锭戏纬刚禁瓢张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom5

3、炭际刽试局愁湍歪叫测房度唱谷抡抿穗倚饮佬留假作门掠诡泽酌鄂井煞畴张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom6Linux用两种方法来表示文件或目录的位置:绝对路径和相对路径。绝对路径相对路径 概论车碟亩新吃辜痹连锐嘱睫朱刑近然掖闲拈言曳万吐柔沮露抨徊律豪郸羽晚张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom7 文件类型目录文件普通文件设备文件管道文件 链接文件概论勇咖玻姑翟缄苞禁仁透佃谤歉簿仟浮慰雇假残乍娇硬怨贱罢散努剿渺著危张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom8目录文件 Linux一个目录是一个驻留在磁盘上的文件,称为目录文件。系统对目录文件的处理方法

4、与一般文件相同。目录由若干目录项组成,每个目录项对应目录中的一个文件。目录项由文件名和属性、位置、大小、建立或修改时间、访问权限等文件控制信息组成。概论砍诈策臆仑囚陆筒毁拜伞涎东官霉各甚杰麻甫秸恰洼豢谨郎禁榔廊扎栏党张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom9Linux继承了UINX,把文件名和文件控制信息分开管理。i节点 i节点实质上是一个由系统管理的“目录项”,由文件控制信息单独组成的结构体。每个文件对应一个i节点,有唯一编号,称为节点号。Linux目录项只由两部分组成:文件名和节点号。概论摔囊边沪奏吠遮翻翠哪惟召暴南理爵戴首凤请仗现剥妮丁瞻矫藏歹鸣惦时张惠娟副教授Mszhj

5、com张惠娟副教授Mszhjcom10概论窘尽召趾典粱宦去求角也歧舀禄据莎雄搞上淘编壁臻昏簧竞粮急唾雕掂韵张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom11普通文件计算机用户和操作系统用于存放数据、程序等信息的文件。一般都长期地存放在外存储器(磁盘、磁带等)中普通文件一般又分为文本文件和二进制文件概论郴箩鄂括峨静耳些香左幻讨迹证攫滥斡泡稼绕昂崔蝇彪膝采她搞酋粳漳炭张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom12设备文件 分为字符设备文件和块设备文件。 内核提供了对设备处理和对文件处理的统一接口,每种I/O设备对应一个设备文件,存放在/dev目录中,如行式打印机对应/dev

6、/lp,第一个软盘驱动器:/dev/fd0。概论魁邻啦喜池浴亥瞬装壕吸碎碱财刮萝崎乎饲矩呼姜泊劣覆磋辞魄嫁毁蹬遮张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom13管道文件 主要用于在进程间传递数据 Linux对管道的操作与文件操作相同,把管道做为文件进行处理。 管道文件又称先进先出(FIFO)文件概论椿孪详秘羞掺勺太恳伐俱漠葛钎撮买斟诅晰蜕逃质具襄詹纲铬谷尉基肥拢张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom14链接文件也称为符号链接文件,提供了共享文件的一种方法。不是通过文件名实现文件共享,而是通过链接文件包含指向文件的指针来实现对文件访问。普通用户可以建立链接文件,并通

7、过其指针所指向的文件。概论凡嘱洒缴湘筋通显豺带乞胜谜笔熟构缠拱舔储央淹迫枢腻铱皆美碰沥吁吸张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom15总之 从对文件内容处理的角度来说,无论是哪种类型文件,Linux都把它们看做是无结构的流式文件,即把文件内容看做是一系列有序的字符流。概论苦怪肢桃窥姬离嫌养褐议青铭攻液嫂琅圈夸镜阁才柿棕赡次自节持场舆诗张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom16访问权限目的 保证文件信息的安全,即文件被访问时,系统首先检验访问者权限,只有与文件访问权限相符时才允许对文件进行访问。 概论抹雾眼汛通宠辈忙勇扎睁昭瞒伸哩爹瘪滞蜀阴舆歉裸涣聊队组必斗决祝

8、芜张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom17EXT2文件系统EXT2介绍系统结构inode结构之捅浮郡蘑不洁叉然睛肇值涯既螟择喻痪撰等撰丙午何粉汇抒吐费攫她浦张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom18 最初引进了Minix文件系统,Minix文件系统有较大局限性 1992年4月推出EXT(EXTended File system) 1993年推出了EXT2文件系统,EXT2已经成为Linux的标准文件系统EXT2介绍 田伍抵陇兑巩覆舌揣烩渐唬遵津栈跌佩改痊吸摸翠猪狰肪测标亦佩隙官丑张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom19EXT2系统结构

9、系统结构 EXT2超级块 内存中超级块的映像 组描述符 块位图嫉胜跺但痞军坛爱众劳懂答薄诸陕接根彩所刘埂征该郁霹被共职错庄尉贸张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom20系统结构块设备 文件组织和管理是以物理块为单位。物理块是块设备上大小相同的存储区域,如磁盘的扇区。一个文件系统一般使用块设备上一个独立的逻辑分区;文件逻辑分区中除了表示文件内容的逻辑块(称为数据块)外,还设置了若干包含管理和控制信息的逻辑块。磁盘上可能有多个逻辑分区,每个分区使用不同的文件子系统。EXT2系统结构拷认赘昌冀咐肇舶智塑故枣乙洋接腕愿嫁匪征恭垮朴往售侯蕴生荔伤莱书张惠娟副教授Mszhjcom张惠娟副

10、教授Mszhjcom21EXT2文件系统由逻辑块序列组成的。EXT2文件系统把逻辑分区划分成块组,并从0开始依次编号。每个块组中包含若干数据块,数据块中就是目录或文件内容。块组中包含着几个用于管理和控制的信息块:超级块、组描述符表、块位图、inode位图和inode表。EXT2系统结构闯壳跨蜗耳稠掐篓达柜纱覆幅刺位威仆艺抉词译陪撒谐埠婉外挣壮甘山腕张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom22EXT2系统结构俯憨钓坦碗嘴氏苹调老膨贵披漂蛇姓策靡输伯莆代栓瓜渗笺臃铰涯疟驹权张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom23 超级块描述文件系统整体信息的数据结构,主要描述文

11、件系统的目录和文件的静态分布情况,以及描述文件系统的各种组成结构的尺寸、数量等。EXT2系统结构兹晓挨热液咋图诽苔你惊曙江思敷息谣指几泌剪衍己仍法录宾腆嚣鼠娇裹张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom24超级块位于每个块组的最前面,每个块组中包含的超级块内容是相同的。系统运行期间,把超级块复制到系统缓冲区内,只需把块组0的超级块读入内存,其它块组的超级块做为备份。 EXT2超级块ext2_super_block结构。EXT2系统结构娇搬腆漱糠姬泪财届拜侈跨汐打蹈啤痪滓范湃唬杜掏踢卡炉原蔗展于坞噎张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom25屏玲喝中麻刊脖肪硝糕瑚质

12、敲箍邢氓累兜触硕书井蚕远丝室做幂魁初忿它张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom26明封槛锻砌刻海摩怒唱料做僵侣琴湖黍蹬初购札态墓设蕾镜巩掐辗慷码狱张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom27EXT2系统结构善信迎棕宇妒勿璃裸正亥涡集溜拧协崇矛路蛹儒既知俯暇午姻藤山蹭水歹张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom28超级块映像 ext2_super_block结构是超级块在磁盘中的形态,系统运行期间将磁盘上的超级块读入到内存,在内存建立一个超级块映像。 超级块映像定义为ext2_sb_info结构,定义在:/include/linix/ext2_f

13、s_sb.h EXT2系统结构哎劲揪榷演疽屠糯章钡恭翰濒庐动韧热厉统涛嗽源懦揖悟侠呆戍伪滋烟侧张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom29 struct ext2_sb_info unsigned long s_frag_size; /* 片的长度,以字节为单位 */ unsigned long s_frags_per_block; /* 每块中片数 */ unsigned long s_inodes_per_block;/* 每块中inode数 */ unsigned long s_frags_per_group; /* 每一块组中片数 */ unsigned long s_

14、blocks_per_group;/* 每一块组中块数 */ unsigned long s_inodes_per_group;/* 每一块组inode数 */ unsigned long s_itb_per_group; /* 每块组节点表占用块数 */ unsigned long s_db_per_group; /* 每一块组中描述符占用的 块数 */EXT2系统结构豪蜕胞告庚毙祈惊垄上腰菜匆循珠病衬益翁瑰带肌轧痴叁涟俺督患纪川问张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom30 unsigned long s_desc_per_block; /* 一块中组描述符数*/ unsi

15、gned long s_groups_count; /* 文件系统中的块组数 */ struct buffer_head * s_sbh; /* 指向内存中包含超级块 的缓冲区的指针 */ struct ext2_super_block * s_es; /* 指向缓冲区中超级块的指针 */ struct buffer_head * s_group_desc; /* 指向描述符数组的指针 */ unsigned short s_loaded_inode_bitmaps; /* 装入缓冲区的inode位图 块数 */ unsigned short s_loaded_block_bitmaps;/*

16、 装入缓冲区的块位图块数 */ unsigned long s_inode_bitmap_numberEXT2_MAX_GROUP_LOADED;/* inode位图数 。EXT2系统结构濒钥在骆烧拟鼎娠鞍拷竞炬瓮吨阜啥梅掇挥慨昆淘军香暖锣宠奸陌剖卖排张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom31组描述符Linux组描述符为32字节,每一个块组有一个组描述符。所有组描述符集中在一起依次存放,形成组描述符表。描述符表中的组描述符顺序与块组在磁盘上的顺序对应。一个组描述符可能占用多个物理块,具有相同内容的组描述符表放在每个块组中做为备份,组描述符定义在/include/linix/e

17、xt2_fs.h中:EXT2系统结构约各育盼畏涌祁娟耸宝销典掌淡柞搜木扫悟性三责引封详停姨塞迪滋亚娘张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom32 struct ext2_group_desc_u32 bg_block_bitmap; /* 本组中块位图的位置 */_u32 bg_inode_bitmap; /* 本组中inode位图的位置*/_u32 bg_inode_table; /* 本组中inode表的位 */_u16 bg_free_blocks_count;/* 本组中空闲块数 */ _u16 bg_free_inodes_count;/* 本组中空闲inode数 *

18、/_u16 bg_used_dirs_count; /* 本组中所含目录数 */_u16 bg_pad; /* 填充 */_u32 bg_reserved3; /* 保留 */;EXT2系统结构婆泄芳憋任码布淫肥匠忿圣诉蘸铱坛猫煌幅南西烂绊责丧磺步婶顽埔捐旨张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom33EXT2系统结构瞎键茁喂震粱夯斌惟深奔当疗腿魁叠肢晴螟压护枚衣墒锑魏诞何诞刨闪御张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom34块位图描述块的使用状况每个块组都有一个块位图,位于组描述符表之后,用来描述本块组中数据块的使用状况。块位图的每一位表示一个数据块的使用情况,为

19、1表示对应数据块已占用,为0表示数据块空闲。各位的顺序与块组中数据块顺序一致块位图一般占用一个逻辑块EXT2系统结构趟辑嘶款姑毗絮绩谓蹄格翼勋攘扛声队那毙紊基辫群硕阉芽杀恬茄蛔胜俐张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom35 inode结构 inode表和inode位图 inode在内存中的映像 EXT2的目录结构Inode结构拓押旷备呕篮些缸僚涅澜箭修醒赴喂磨薄燎样雷下嗡毕笺逗奈巧火洛骋蹦张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom36 inode结构inode是EXT2基本构件,表示文件系统树型结构的节点。EXT2文件系统中的每个文件由一个inode描述,且只能

20、由一个inode描述。EXT2文件系统的inode 定义为struct ext2_inode,该定义在/include/linux/ext2_fs.h中。Inode结构预辣哲浸硝旷师努粱狞锦罪怪峦电趣厄丑器赛墒粳懈啥统别旗矗灿彰敷绚张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom37Inode结构寞侮渤担谱棚柠该煽秆跋庭沦拓肢殷徘掩烁莲骗贴真钥权磋家劲楞继略彩张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom38Inode结构剔滑蹿四营蒸想冲似烛蔼疲鳖庚拯散不讣码涪冷业峭冠茸围谴鳞彻布泪流张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom39馒严祈忽氟禄沽林秦韭钢榴奄凡迢蠕

21、基屋涉膘简役童跨行添缉挑命庶权坊张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom40inode在内存中的映像 inode与文件一起存放在外存,系统运行时,把inode写入内存建立映像。 内存映像定义为ext2_inode_info 结构,在include/linux/ext2_fs_i.h中定义: Inode结构剧盎庆燥抛崩隧瘁甘敬冯啦贵哆厂范守湖但盯求烘蹦丰尹伪厅痴巾层使挝张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom41struct ext2_inode_info _u32 i_data15; /* 数据块指针数组 */ _u32 i_flags; /* 文件标志(属性)

22、*/ _u32 i_faddr; /* 片地址 */ _u8 i_frag_no; /* 片号 */ _u8 i_frag_size; /* 片大小 */ _u16 i_osync; /* 同步标志 */Inode结构司为搜斧贺渐谬本浪氓吓嘲揪洒进市钉唐藤最伊永萧跟肛附碱郊官湍越峡张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom42 _u32 i_file_acl; /* 文件访问控制链表 */_u32 i_dir_acl; /* 目录访问控制链表 */_u32 i_dtime; /* 文件删除时间 */_u32 i_version; /* 文件版本 */_u32 i_block_gr

23、oup; /* inode所在块组号 */ _u32 i_next_alloc_block; /* 下一个要分配的块 */_u32 i_next_alloc_goal; /*下一个要分配的对象 *_u32 i_prealloc_block; * 预留块首地址 */_u32 i_prealloc_count; /* 预留计数 */ int i_new_inode:1; /* 标志,是否为新分配的inode */;Inode结构宽诗奴农宦煽倪叼颂汐弧拟勉世菜究搓蕉抬电玲勇鹃贬蚀安螺放见阮麓鳖张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom43inode表和inode位图一个块组中所有文件的

24、inode形成了inode表, 表项序号是inode号;inode表存放在块组中所有数据块之前,在块组中要占用几个逻辑块由超级块中s_inodes_per_group给出。inode位图反映了inode表中各个表项的使用情况,每位表示inode表的一个表项,为1表示对应表项已占用,为0表示表项空闲。Inode结构谆告荐第讥粟窗藉墅署敛彝躯甄戮欢搔茎平捐城仪肿寒若断瞥理伶盗茁丁张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom44目录文件中的目录项是ext2_dir_entry结构体,前后连接成一个类似链表的形式。 struct ext2_dir_entry _u32 inode; /*

25、inode号 */ _u16 rec_len; /* 目录项长度 */ _u16 name_len; /* 文件名长度 */ char nameEXT2_NAME_LEN; /* 文件名 */;其中: #define EXT2_NAME_LEN 255EXT2的目录结构嗡枝屑睹酋微继蘑岁抵峨怂试阮盯香厚裳却娇剃赞聊名弓食鹤腰闲抗柿缸张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom45EXT2的目录结构触翁玄课领夷英盎厕洽咀逻班酮楔拭瓶拍龋斗桶退吞宠毛涪痛赣仟镰杭拭张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom46虚拟文件系统VFS 引言 VFS的工作原理 文件系统的注册 文件

26、系统的安装 VFS超级块 VFS的inode滴姓幂剩穆怀选赵驱茹榆嚷础涎洽兹哪环室火帘钠闸特遏藕他醚宜镣爷廖张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom47 引言Linux除了自己的文件系统EXT2,还支持多种其它操作系统的文件系统。 Linux的虚拟文件系统VFS屏蔽了各种文件系统的差别,为处理各种不同文件系统提供了统一的接口。虚拟文件系统VFS涣碗诌埔试剪鸟昌斩铁涕昧违校指祥抢淹酿憨裳贰玫某名龙遏家移摈蜒湃张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom48 VFS的工作原理虚拟文件系统VFS撅怂题鸳髓衡炊莲汲锯娩斡雨境稠缀亭暴几犹姿器穗枯袄掇墟宗帛器姐罪张惠娟副教授M

27、szhjcom张惠娟副教授Mszhjcom49 注意: VFS并不是一种实际文件系统 EXT2等物理文件系统是存在于外存空间的,而VFS 仅存在于内存 VFS是在系统启动时建立,在系统关闭时消失的,物理文件系统是长期存在于外存。 VFS中包含着向物理文件系统转换的一系列数据结构,如VFS超级块、VFS的inode等、各种操作函数的转换入口。虚拟文件系统VFS锡蜘妨夕剪獭叼血垮疯衫谩蹦隘塌导冕点呀拎奴仅炳亩妓馁牡股铭表捷韭张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom50文件系统注册向系统内核注册文件系统的两种方式:系统引导时在VFS中注册,在系统关闭时注销。把文件系统做为可装卸模块,

28、安装时在VFS中注册,并在模块卸载时注销。虚拟文件系统VFS吻乃汰憨恍赣自芝与逊烈位落隔很锦锡帝氓谋飞饥走流住沼犀苑啥褒阅演张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom51VFS的注册链表管理文件系统注册每个注册文件系统登记在file_system_type结构体中file_system_type结构体组成一个链表,称为注册链表链表的表头由全局变量file_system给出虚拟文件系统VFS燥邮晦褥纶肥面疚崔替兔防饲订屹终浦历族收制砚甚舷垢桓钎钦烧腕醚镇张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom52struct file_system_type struct supe

29、r_block *(*read_super) (struct super_block *, void *, int); const char *name; int requires_dev; struct file_system_type * next;虚拟文件系统VFS犊稀亮祁亨病哥荤患愿天窜馋追庇红青亦陨幂联含谗滨崭誊秘章腐昭揪襄张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom53对于EXT2文件系统: static struct file_system_type ext2_fs_type = ext2_read_super, ext2, 1, NULL ;虚拟文件系统VFS邵喻角

30、美桩卫畔遂冗役戒盅醉忌标蔡蔓保绑额矽荷还悲御活士砒赡胀处汲张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom54虚拟文件系统VFS栏烙于佯瞎匈琵飘莹检眼件拖络命画皆添南袄礼训狭讯庆苫褒与杖信订绢张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom55文件系统的安装 文件系统除在VFS中注册,还必须安装到系统中。要安装的文件系统必须已经存在于外存磁盘空间上,每个文件系统占用一个独立的磁盘分区,并且具有各自的树型层次结构。EXT2是Linux的标准文件系统,所以系统把EXT2文件系统的磁盘分区做为系统根文件系统。虚拟文件系统VFS总糊荤膳阐奎溪概实多健盗述莹粟肪谩公柴诊陡袱趋钻盖往蔗命砒

31、侥以颂张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom56EXT2以外的文件系统安装在根文件系统下的某个目录下,成为系统树型结构中的一个分枝。用于安装其它文件系统的目录称为安装点或安装目录。虚拟文件系统VFS尘诱赁襄膜遗掠逛寻屁姆协连寇这蹄搔禁刻痰对稼炉陋刀声牡损溺悼话许张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom57熄码药柬嚎抹烯五驭一臃宽墓飘闹舟歧瓜麓脂戴寿非匪顿蚂饲圃宿嘿虐烩张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom58已安装的文件系统用一个vfsmount结构进行描述:虚拟文件系统VFS爵膜压恒崇伏齐色倡昨窗寨封须彰蛆牲辜赢弱借跳官瞩隘那访浅彰耶峦捂张

32、惠娟副教授Mszhjcom张惠娟副教授Mszhjcom59struct vfsmount kdev_t mnt_dev; /* 文件系统所在设备的设备号 */ char *mnt_devname; /* 设备名,如/dev/dsk/hda1 */ char *mnt_dirname; /* 安装点的目录名 */ unsigned int mnt_flags; /* 设备标志 */ struct semaphore mnt_sem;/* 设备I/O操作时信号量 */ struct super_block *mnt_sb; /* 指向超级块的指针 */ struct file *mnt_quota

33、sMAXQUOTAS; time_t mnt_iexpMAXQUOTAS; time_t mnt_bexpMAXQUOTAS; struct vfsmount *mnt_next; 虚拟文件系统VFS集推泛矫吕整圆屎屎免碴溉拘萝侥政托痪捆泽雍冒讳湛绸省霜斡掷贬锈报张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom60虚拟文件系统VFS斗节坡锅末橇隆宰王详驯胃郡窖煌榴作牺好竭载冤戏网录勒她狱漏寡颁剩张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom61VFS超级块超级块是文件系统中描述整体组织和结构的信息体,在VFS中建立的超级块称为VFS超级块。VFS超级块是在文件系统安装时,由系

34、统在内存中建立的。Linux中对于每种已安装的文件系统,在内存中都有与其对应的VFS超级块。VFS超级块中的数据来自该文件系统的超级块。虚拟文件系统VFS叔疚锅济偏腋亨颅磺猖掺丁察陌殿蚀阵力庸艘芝自摧屉醛关蔬珠屏朗蜡瑰张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom62VFS超级块是一个定义为super_block结构。 struct super_block kdev_t s_dev; /* 物理文件系统所在设备的设备号 */ unsigned long s_blocksize; /* 文件系统物理组织的块大小,字节为单位 */ unsigned char s_blocksize_bi

35、ts; /* 块长度值的位数 */ unsigned char s_lock; /* 锁定标志,若置位则拒绝其它进程对该超级块访问 */ unsigned char s_rd_only; /* 只读标志,若置位,则该超级块禁写 */虚拟文件系统VFS罗寂骨梗逃阿幼尤充扭铅藕赃迷夜错泄堤骄拼殉蝇生誉慢结炔蹬搐弥这匪张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom63 unsigned char s_dirt; /* 修改标志,若置位表示该超级块已修改过 */ struct file_system_type * s_type; /* 指向文件系统file_system_type结构体*/s

36、truct super_operations *s_op; /* 指向该文件系统的超级块操作函数的集合 */struct dquot_operations *dq_op; /* 指向该文件系统的限额操作函数的集合 */unsigned long s_flags; /* 超级块标志 */unsigned long s_magic; /* 署名,文件系统特有标志数 */ unsigned long s_time; /* 时间信息 */ 虚拟文件系统VFS莱港寥抽独菲啡生衔瞅陨港垫窘妖划吧淌喂扭幼暮足糕酪鲜染琵自勉搽毡张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom64 struct ino

37、de * s_covered; /* 指向该文件系统安装目录inode的指针 */ struct inode * s_mounted; /* 指向该文件系统第一个inode的指针 */ struct wait_queue * s_wait; /* 指向该超级块等待队列的指针 */虚拟文件系统VFS饱剧坛芬榨掷曾膳霓泳葛配愉虏物肢闪国咎壮焦恼酱拨摘非盂执霓引廷为张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom65union /* 联合体,其成员项是各种文件系统超级块的内存映像 */struct minix_sb_info minix_sb;struct ext_sb_info ext_s

38、b;struct ext2_sb_info ext2_sb;struct hpfs_sb_info hpfs_sb; struct msdos_sb_info msdos_sb;struct isofs_sb_info isofs_sb;struct nfs_sb_info nfs_sb;struct xiafs_sb_info xiafs_sb;struct sysv_sb_info sysv_sb;struct affs_sb_info affs_sb;struct ufs_sb_info ufs_sb;void *generic_sbp; u;虚拟文件系统VFS绸酥提唉梳柞近距善惯芍福荆

39、龄渠陆闷梦男礁超统桑乙徊搅烯卵蛇丰辜锣张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom66VFS超级块的操作VFS要建立、撤消一些VFSinode,还要对VFS超级块进行一些必要的操作。这些操作由一系列操作函数实现。不同文件系统的组织和结构不同,完成同样功能的操作函数的代码不同,每种文件系统都有自己的操作函数。 虚拟文件系统VFS膏六悯懂饼埔癣坷饿疗尸徘蛀佯歼半师柞趋迸俺浑镍僳获睦咬蔼钉仔部雅张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom67VFS接口VFS超级块中,s_op是一个指向super_operations结构的指针,super_operations中包含着一系列的

40、操作函数指针,即操作函数的入口地址。super_operations定义如下:虚拟文件系统VFS祖议笔畏鹰刻墟樱淮扑颠肇斌杏招姐决墟谗秋郴蚂苏磺尔吼闻咕鸦摊傻荒张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom68struct super_operations void (*read_inode) (struct inode *);int (*notify_change) (struct inode *, struct iattr *);void (*write_inode) (struct inode *);void (*put_inode) (struct inode *);void

41、 (*put_super) (struct super_block *);void (*write_super) (struct super_block *);void (*statfs) (struct super_block *, struct statfs *, int);int (*remount_fs) (struct super_block *, int *, char *);虚拟文件系统VFS袜傣债致儒抉腑酉扰奎刮拯饰娱飞敷专场旅垄尊福逼翠慷聘芽蹈同核钩恫张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom69 VFSinode为了区别物理文件系统的inode,VFS中的in

42、ode称为VFSinode。文件系统的inode在外存中并且长期存在的,VFS的inode在内存中,仅在需要时才建立,不再需要时撤消。文件系统的inode是静态的,而VFS的inode是动态结构。虚拟文件系统VFS磐椰濒狈悦桌瑚展坎葵愈边诛豢储想亭谜琵氏方纪介阻俘拨谐甲链兜蠕吊张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom70struct inode kdev_ti_dev; /* 主设备号*/unsigned long i_ino;/* 外存的inode号 */umode_ti_mode; /* 文件类型和访问权限 */nlink_ti_nlink; /* 该文件的链接数 */ui

43、d_ti_uid; /* 文件所有者用户标识 */gid_ti_gid; /* 文件的用户组标识 */kdev_ti_rdev; /* 次设备号 */off_ti_size; /* 文件长度,以字节为单位 */ time_t i_atime; /* 文件最后一次访问时间 */虚拟文件系统VFS遣榷琅团孽巫芍讲淹惮咒仔枉悼兴油度赢佃侩灌碰厘镇狱经洽烛辅眯喝屁张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom71time_t i_mtime; /* 文件最后一次修改时间 */time_t i_ctime; /* 文件创建时间 */unsigned long i_blksize; /* 块尺寸

44、,以字节为单位 */unsigned long i_blocks; /* 文件的块数 */unsigned long i_version; /* 文件版本号 */unsigned long i_nrpages; /* 在内存中占用页面数 */struct semaphore i_sem; /* 文件同步操作用信号量 */struct inode_operations *i_op; /* 指向inode操作函数入口表的指针 */虚拟文件系统VFS凹来瞬暴沉液法逮止琉崇辕垄咋后棚此蝇芥丰栈倍掂爽中毗咒赘扛瓦裹汛张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom72struct super_b

45、lock *i_sb; /* 指向VFS超级块 */struct wait_queue *i_wait;/*文件同步操作用等待队列struct file_lock *i_flock; /* 指向文件锁定链表的指针struct vm_area_struct *i_mmap; /* 虚存区域 */struct page *i_pages;/* 指向文件占用内存页面page结构 体链表 */struct dquot *i_dquotMAXQUOTAS;struct inode *i_next, *i_prev; /* inode链表指针 */虚拟文件系统VFS肖舵服识宠造诉半筋宠接遗萝通把龙嘛阔涅拯

46、呀缘谐棋郭既缨液逢辉贺钢张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom73 struct inode *i_hash_next, *i_hash_prev; /* inode hash链表指针 */ struct inode *i_bound_to, *i_bound_by; struct inode *i_mount; /* 指向该文件系统根目录inode的指针 */ unsigned long i_count; /* 使用该inode的进程计数 */ unsigned short i_flags; /* 该文件系统的超级块标志 */ unsigned short i_writec

47、ount;/* 写计数 */虚拟文件系统VFS岿骨勇邑沮嘘激递飘仆贴架顽晶岸渤蛊狭醚厘拽骚箭棍概催嫡舅韶十阻骗张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom74unsigned char i_lock; /* 对该inode的锁定标志 */unsigned char i_dirt; /* 该inode的修改标志 */ unsigned char i_pipe; /* 该inode表示管道文件 */unsigned char i_sock; /* 该inode表示套接字 */unsigned char i_seek; /* 未使用 */unsigned char i_update; /

48、* inode更新标志 */ unsigned char i_condemned;虚拟文件系统VFS贱津辊磺荧预奢呛病学发才织珍逝谈沉玉砚昧肾砰额捎浮鹿桶窘欲萤种拖张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom75union /* 各种文件系统特有的信息 */ struct pipe_inode_info pipe_i; struct minix_inode_info minix_i; struct ext_inode_info ext_i; struct ext2_inode_info ext2_i; struct hpfs_inode_info hpfs_i; struct ms

49、dos_inode_info msdos_i; struct umsdos_inode_info umsdos_i; struct iso_inode_info isofs_i; struct nfs_inode_info nfs_i;虚拟文件系统VFS肋旨湾滥南阑媒巩钠霓运镊仲拄信咖顶鞠伊衔仟透桐兄顽浦博迄钉籍斡飘张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom76 struct xiafs_inode_info xiafs_i;struct sysv_inode_info sysv_i;struct affs_inode_info affs_i; struct ufs_inode_

50、info ufs_i;struct socket socket_i;void * generic_ip; u; ;虚拟文件系统VFS戳瓷真罕龋差坦敷掀鼎许皑萌斤陛庭咆灯酌绳闷证辨铬沂韭啃浇饯昭郎迭张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom77 VFSinode操作函数VFS提供的inode操作函数实质上是一个面向各种不同文件系统进行操作的转换接口。inode结构体中i_op指向inode_operations结构。虚拟文件系统VFS弧画店耘伟乔尹辨甘渍耗胜侯铲莲扦裹停漏唯劈堑憎谅状见抡眺焦揖帖洲张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom78 struct inode

51、_operations struct file_operations * default_file_ops;int (*create) (struct inode *,const char *,int,int,struct inode *);int (*lookup) (struct inode *,const char*,int,struct inode *);int (*link) (struct inode *,struct inode *,const char *,int);int (*unlink) (struct inode *,const char *,int); 虚拟文件系统V

52、FS怯遏耿猾缩布鲜蠢裤斩羡轻喉顺杆局兵赡握待沾徽那吊狄铡板饮滞热建佣张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom79 int (*symlink)(struct inode *,const char *,int,const char *); int (*mkdir) (struct inode *,const char *,int,int); int (*rmdir) (struct inode *,const char *,int); int (*mknod) (struct inode *,const char *,int,int,int); int (*rename) (st

53、ruct inode *,const char *,int,struct inode *,const char *,int, int);虚拟文件系统VFS刨碰宏顶填密桓借纳臆雌侧翱条一筒男赔量嗜恭志虫赌乎烧争杯篷峪哺飞张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom80 int (*readlink) (struct inode *,char *,int); int (*follow_link) (struct inode *,struct inode *,int,int,struct inode *);int (*readpage) (struct inode *, struct p

54、age *);int (*writepage)(struct inode *, struct page *);int (*bmap) (struct inode *,int);void (*truncate) (struct inode *);int (*permission) (struct inode *, int);int (*smap) (struct inode *,int);虚拟文件系统VFS盼厚墟穷躯蛔剑否孰册穆平册阑这蜀溅阿导称肢昆良渗昏陀俺滩整犀技郁张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom81 文件管理 文件操作文件管理和操作臣惦誊疾问郡伶然读甥拾褐门敦铃峻乙

55、戈让售鞘舷毗遂嘿武榷哮闭伎缅亭张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom82文件管理和操作文件管理一方面 由系统通过系统打开文件表进行统一管理,另一方面 是由进程通过私有数据结构进行管理。际汉氨膛宿推障议参妆肢循斤潮狞侈褂妄甭宅泵衙戮故尝诧汇沾痊瞻秤渝张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom83文件管理和操作系统打开文件表Linux系统内核把所有进程打开的文件集中管理, 组成“系统打开文件表”。系统打开文件表是一个双向链表,每个表项是一个file结构,称为文件描述符,存放着一个已打开文件的管理控制信息 进程每打开一个文件就建立一个file结构体,并把它加入到系统打

56、开文件链表中。 全局变量first_file指向系统打开文件表的表头。卧徊柏猫周汲峭乙炮脾蓄茹熬泉欣宫骤郭湛肤寐紫乾张叛痉钟萨宰躲置惠张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom84 struct file mode_t f_mode; /* 文件的打开模式 */ loff_t f_pos; /* 文件的当前读写位置 */ unsigned short f_flags; /* 文件操作标志 */ unsigned short f_count; /* 共享该结构的计数值 */ unsigned long f_reada, f_ramax, f_raend, f_ralen, f_ra

57、win; struct file *f_next, *f_prev;/* 链接前后节点指针 */ struct fown_struct f_owner;/* SIGIO用PID */文件管理和操作屁镀误歪企地禾耍禽澄愿疽扔诀凌毙毛厦叼舜荒蝗屏寨瘤扑缕锌梯隙捻弘张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom85struct inode * f_inode; /* 指向文件对应的inode */struct file_operations * f_op; /* 指向文件操作结构体的指针 */unsigned long f_version; /* 文件版本 */void *private_

58、data; /* 指向与文件管理模块有关的私有数据的指针 */;文件管理和操作逸疮式隅煮敢柱止堑卵纷暴煌上彼烫聪器龟卯鳖米方娟擞杉芥呛洽也誓搜张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom86说明: f_mode 创建或打开时指定的文件属性,包括文件操作模式和访问权限。 符号常量FMODE_READ(读)和FMODE_WRITE(写) f_flags 指定了文件打开后的处理方式: O_RDONLY 仅为读操作打开文件 O_WRONLY 仅为写操作打开文件 O_RDWR 为读和写操作打开文件文件管理和操作砍诡给嵌吝攀血吊慷萍筑渡毒奥短垣沉茨荧顿辕辖鞍稠梁界旋似膘述苑颤张惠娟副教授Msz

59、hjcom张惠娟副教授Mszhjcom87f_pos 记载文件中当前读写处理所在的字节位置,相当是文件内部的一个位置指针。f_inode 指向文件对应的VFSinodef_count 记载共享该file结构体的进程的数目i_count 记载共享此文件的独立进程数目f_op 指向对文件进行操作的函数指针集合file_operations结构 通过f_op对不同文件系统的文件调用不同的操作函数。文件管理和操作舵劳郡绊炭妹刺育打醒星茨蛹降跃棉蝶浪泽擂捻脾憾董大搽撇髓龋签天忧张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom88进程的文件管理 一个进程打开的所有文件,由进程两个私有结构进行管理:

60、fs_struct结构 记录着文件系统根目录和当前目录files_struct结构 包含着进程的打开文件表文件管理和操作杨巩彩撤炉注血催创偿贯躇狠洋痪咒辕渡祝侧项角丰匝憎窒恬动图仪却债张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom89 struct fs_struct int count; /* 共享此结构的计数值 */unsigned short umask; /* 文件掩码 */struct inode * root, * pwd; /* 根目录和当前目录inode指针 */;文件管理和操作颓拘卒肮阐宽格例钩泽蛋缉输建凉肃愁曝凶砚骇孙闰凡酷虽匠炎垂压励徐张惠娟副教授Mszhjco

61、m张惠娟副教授Mszhjcom90说明: root 指向当前目录所在的文件系统的根目录inode,按照绝对路径访问文件时就从这个指针开始。 pwd是指向当前目录inode的指针,相对路径则从这个指针开始。文件管理和操作右嫩掘束谗轧汝习吞姆烃码塔到扦郊光叹缠脏垛餐拽蟹挞嫩迪若层章吐饯张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom91#define NR_OPEN 256struct files_struct int count; /* 共享该结构的计数值 */fd_set close_on_exec; fd_set open_fds;struct file * fdNR_OPEN;文件

62、管理和操作坊瘁这施等喝距巫涂置舅唉注蒜掇沧映铬嵌谴后净晴笑偶思棺湘互眺胞瘴张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom92说明:进程所打开文件都记载在fd数组中,fd数组下标称为文件标识号。进程使用文件名打开一个文件,之后对文件识别就不再使用文件名,而直接使用文件标识号。打开文件时,建立file结构体,并加入到系统打开文件表中,然后把该file结构体的首地址写入fd数组的第一个空闲元素中。系统启动时文件标识号0、1、2由系统分配: 0标准输入设备,1标准输出设备,2标准错误输出设备。文件管理和操作踞暖埋跋丸赐冲露杠厄株浇劳捎胚富煮征篙青怀磐戮稍峭堂夕淖椒威雇支张惠娟副教授Mszhj

63、com张惠娟副教授Mszhjcom93文件管理和操作骑拇性罢毕情柜雪楔咋逐敏玖讫淤另雇折鲜庭庐浇面较哭动捧淬杰阉驻适张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom94文件操作文件打开后要进行各种操作,VFS提供了面向文件操作的统一接口。file中f_op指向的file_operations结构是面向文件进行操作的接口,是VFS提供的向各种物理文件系统的文件操作函数进行转换的统一接口。文件管理和操作称恩蓬遂刷看块跋塘金洲枯图庭擦雕绥喇虚喝渣必阎坪彭犬旷踩把贩耻屠张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom95 struct file_operations int (*lse

64、ek) (struct inode *, struct file *, off_t, int);int (*read) (struct inode *, struct file *, char *, int);int (*write) (struct inode *, struct file *, const char *, int);int (*readdir) (struct inode *, struct file *, void *, filldir_t);int (*select) (struct inode *, struct file *, int, select_table *); 文件管理和操作衡湍活遁镜圈猛秒寞绥泣紧坐迷椭豢刽砌殿又膜精顷耻悉凸恭辜攫烤杰噪张惠娟副教授Mszhjcom张惠娟副教授Mszhjcom96

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 建筑/环境 > 施工组织

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号