版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第六章嵌入式Linux文件系统第六章嵌入式Linux文件系统(1)Linux文件系统与文件管理虚拟文件系统VFS/dentry目录项对象/inode索引节点对象(2)嵌入式文件系统嵌入式Linux文件系统概述/JFFS2嵌入式文件系统/根文件系统文件系统是操作系统用于确认磁盘或分区上的文件的方法和数据结构。文件系统是负责存取和管理文件信息的机构,用于对数据、文件以及设备的存取控制,它提供对文件和目录的分层组织形式、数据缓冲以及对文件存取权限的控制功能。文件系统具有以下主要功能:1.对文件存储设备进行管理,分别记录空闲区和被占用区,以便于用户创建、修改以及删除文件时对空间的操作。2.对文件和目录的按名访问、分层组织功能。3.创建、删除及修改文件功能。4.数据保护功能。5.文件共享功能
Linux文件系统概述PartOne6.1
为了支持多种不同的文件系统,采用了虚拟文件系统VFS(VirtualFilesystem)技术。虚拟文件系统是对多种实际文件系统的共有功能的抽象,它屏蔽了各种不同文件系统在实现细节上的差异,为用户程序提供了统一的、抽象的、标准的接口以便对文件系统进行访问,如打开,读,写等操作。虚拟文件系统VFS确保了对所有文件的访问方式都是完全相同的。虚拟文件系统VFS虚拟文件系统VFS虚拟文件系统VFS确保了对所有文件的访问方式都是完全相同的。(1)DeviceDrivers,设备驱动用于控制所有的外部设备及控制器。由于存在大量不能相互兼容的硬件设备(特别是嵌入式产品),所以也必须有众多的设备驱动与之匹配。值得注意的是,Linux内核中将近一半的源码都是设备驱动。
(2)DeviceIndependentInterface,该模块定义了描述硬件设备的统一方式(统一设备模型),所有的设备驱动都遵守这个规则,同时可以用一致的形式向上提供接口。这样做可以有效降低开发难度。(3)LogicalSystems逻辑文件系统,每一种文件系统都会对应一个逻辑文件系统,它会实现具体的文件系统逻辑。
(4)SystemIndependentInterface,该模块主要面向块设备和字符设备,负责以统一的接口表示硬件设备和逻辑文件系统,这样上层软件就不再关心具体的硬件形态了。
(5)SystemCallInterface,系统调用接口,向用户空间提供访问文件系统和硬件设备的统一的接口。
VFS是底层文件系统的主要组件(接口)。这个组件导出一组接口,然后将它们抽象到行为可能差异很大的各个文件系统。VFS具有两个针对文件系统对象的缓存:inode索引节点对象和dentry目录项对象,它们缓存最近使用过的文件系统对象。每个文件系统实现(如ext2、JFFS2等等)可以导出一组通用接口供VFS使用。缓冲区缓存会缓存文件系统和相关块设备之间的请求。dentry目录项对象dentry
结构表示一个打开的目录项,structdentry{...structdentry*d_parent;//父目录指针structqstrd_name;//目录名字
structinode*d_inode;//指向inode结构
...conststructdentry_operations*d_op;//操作方法集...};当我们打开文件
/usr/local/lib/libc.so
文件时,内核会为文件路径中的每个目录创建一个
dentry
结构。inode索引节点对象inode
结构表示一个真实的文件。structinode{...uid_ti_uid;//文件所属用户gid_ti_gid;//文件所属组...structtimespeci_atime;//最后访问时间
structtimespeci_mtime;//最后修改时间
structtimespeci_ctime;//文件创建时间...unsignedshorti_bytes;//文件大小...conststructfile_operations*i_fop;//文件操作方法集(用于设置file结构)...};虚拟文件系统VFS综合看来,Linux虚拟文件系统采用了面向对象设计思想,文件系统中定义的VFS相当于面向对象系统中的抽象基类,从它出发可以派生出不同的子类,以支持多种具体文件系统,但从效率考虑内核纯粹使用C语言编程,故没有直接利用面向对象的语义。
Ext2文件系统格式PartTwo6.26.2.1Ext2文件系统TheSecondExtendedFileSystem(ext2)文件系统是Linux系统中的标准文件系统,主要包括普通文件、目录文件、特殊文件和符号链接文件。Ext2文件系统是通过对Minix的文件系统进行扩展而得到的,其存取文件的性能良好,可以管理特大磁盘分区,文件系统最大可达4TB。早期Linux都使用ext2文件系统。在ext2文件系统中,文件由包含有文件所有信息的节点inode进行唯一标识。Ext2文件系统采用三级间接块来存储数据块指针,并以块(默认为1KB)为单位分配空间。在ext2系统中,所有元数据结构的大小均基于“块”,而不是“扇区”。块的大小随文件系统的大小而有所不同。而一定数量的块又组成一个块组,每个块组的起始部分有多种描述该块组各种属性的元数据结构。每个块组依次包括超级块、块组描述符、块位图和节点inode位图、inode表及数据块区。1.超级块每个ext2文件系统都必须包含一个超级块,其中存储了该文件系统的大量基本信息,如块的大小、每块组中包含的块数等。同时系统会对超级块进行备份,备份被存放在块组的第一个块中。超级块的起始位置为其所在分区的第1024个字节,占用1KB的空间,
2.块组描述符一个块组描述符用以描述一个块组的属性。块组描述符组由若干块组描述符组成,描述了文件系统中所有块组的属性,存放于超级块所在块的下一个块中。3.块位图和节点inode位图块位图和inode位图的每一位分别指出块组中对应的哪个块或inode是否被使用。:5.数据块数据块中存放文件的内容,包括目录表、扩展属性、符号链接等4.节点inode表节点inode表用于跟踪定位每个文件,包括位置、大小等,不包括文件名。一个块组只有一个节点inode表。6.2.2目录结构在ext2文件系统中,目录是作为文件存储的。根目录总是在inode表的第二项,而其子目录则在根目录文件的内容中定义。目录项在include/linux/ext2_fs.h文件中定义,其结构如下:structext2_dir_entry_2{ __le32 inode; /*Inodenumber*/ __le16 rec_len; /*Directoryentrylength*/ __u8 name_len; /*Namelength*/ __u8 file_type; char name[EXT2_NAME_LEN]; /*Filename*/};6.3.1EXT3文件系统EXT3是第三代扩展文件系统(Thirdextendedfilesystem),EXT3是在EXT2基础上增加日志形成的一个日志文件系统,常用于Linux操作系统。日志文件系统最大的特点是会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回溯追踪。除开日志文件系统所具有的优点,Ext3的特点还主要有:(1)ext3文件系统在非正常关机状况下,系统无需检查文件系统,而且ext3的恢复时间也极短。(2)ext3文件系统能够极大地提高文件系统的完整性,避免了意外宕机对文件系统的破坏。(3)ext3文件系统可以不经任何更改,而直接加载成为ext2文件系统。由ext2文件系统转换成ext3文件系统也非常容易。(4)3种日志模式可选:日记、顺序、回写。可适应不同场合对日志模式的要求。(5)便于移植,无论是硬件体系或是内核修改,其移植工作均较容易。6.3.2EXT4文件系统第四代扩展文件系统EXT4(Fourthextendedfilesystem)是Linux系统下的日志文件系统,是ext3文件系统的后继版本。2008年12月25日,LinuxKernel2.6.28的正式版本发布。随着这一新内核的发布,Ext4文件系统也结束实验期,成为稳定版。Ext4文件系统的特点主要包括:1.Ext4的文件系统容量达到1EB,而文件容量则达到16TB;2.
Ext4理论上支持无限数量的子目录;3.Ext4文件系统具有64位空间记录块数量;4.Ext4在文件系统层面实现了持久预分配并提供相应的API,比应用软件自己实现更有效率;5.Ext4支持更大的i-节点和支持快速扩展属性和i-节点保留;6.Ext4给日志数据添加了校验功能,日志校验功能可以很方便地判断日志数据是否损坏;7.Ext4支持在线碎片整理,并将提供e4defrag工具进行个别文件或整个文件系统的碎片整理。嵌入式文件系统JFFS2PartFoue6.4嵌入式文件系统嵌入式文件系统是指嵌入式系统中实现文件存取、管理等功能的模块,这些模块提供一系列文件输入输出等文件管理功能,为嵌入式系统和设备提供文件系统支持。QNXVxWorksYaffs/yaffs2CramfsNFS嵌入式Linux文件系统
NorFlash通常容量较小,其主要特点是程序代码可以直接在Flash内运行。NorFlash具有RAM接口,易于访问,缺点是擦除电路复杂,写速度和擦除速度都比较慢,最大擦写次数约10万次,典型的块大小是128kB。NandFlash通常容量较大,具有很高的存储密度,从而降低了单位价格。NandFlash的块尺寸较小,典型大小为8kB,擦除速度快,使用寿命也更长,最大擦写次数可以达到100万次,但是其访问接口是复杂的I/O口,并且坏块和位反转现象较多,对驱动程序的要求较高。一般结论:由于NorFlash和NandFlash各具特色,因此它们的用途也各不相同,NorFlash一般用来存储体积较小的代码,而NandFlash则用来存放大体积的数据。NorFlash和NandFlash的对比JFFS2嵌入式文件系统
JFFS2文件系统层次操作实现垃圾收集平均磨损JFFS2的操作实现structjffs2_inode_cache{structjffs2_scan_info*scan;
//在扫描链表的时候存放临时信息,在扫描结束以后设置成NULLstruct
jffs2_inode_cache*next;structjffs2_raw_node_ref*node;_u32ino;intnlink;};structjfffs2_raw_node_ref{
structjffs2_raw_node_ref*next_in_ino;
structjffs2_raw_node_refnext_phys;
_u32flash_offset;
_u32totlen;
};垃圾收集在JFFS中,文件系统与队列类似,每一个队列都存在唯一的头指针和尾指针。最先写入日志的节点作为头指针,而每次写入一个新节点时,这个节点作为日志的尾指针。每个节点存在一个与节点写入的顺序有关的version
节点,它专门用来存放节点的版本号。该节点每写入一个节点其版本号加1。节点写入总是从日志的尾部进行,而读/写点则没有任何限制。但是擦除和碎片收集操作总是在头部进行。当用户请求写操作时发现存储介质上没有足够的空余空间,也就表明空余空间已经符合“碎片收集”的启动条件。如果有垃圾空间能够被回收,碎片收集进程启动将收集垃圾空间中的垃圾块,否则,碎片收集就线程处于睡眠状态。平均磨损在JFFS2
中进行碎片收集时,随机将干净块的内容移到空闲块,随后擦除干净块内容再写入新的数据。在JFFS2
中,它单独处理每个擦除块,由于每次回收的是一块,碎片收集程序能够提高回收的工作效率,并且能够自动地决定接下来该回收哪一块。每个擦除块可能是多种状态中的提高回收的工作效率,并且能够自动地决定接下来该回收哪一块。每个擦除块可能是多种状态中的一种状态,基本上是由块的内容决定。JFFS2保留了结构列表的链接数,它用来描述单个擦除块
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年甘肃定西渭源县祁家庙镇卫生院招聘考试备考题库及答案解析
- 2026浙江城建融资租赁有限公司第一次社会公开招聘5人笔试模拟试题及答案解析
- 2026江西九江市湖口县市场监督管理局面向社会招聘3人考试备考试题及答案解析
- 2026年湖北经济学院人才招聘笔试备考试题及答案解析
- 2026内蒙古呼和浩特五元蒙医医院招聘16人考试备考题库及答案解析
- 2026湖北武汉东风咨询有限公司招聘2人笔试参考题库及答案解析
- 2026江西裕民银行招聘考试参考题库及答案解析
- 2026上半年贵州绥阳县事业单位招聘73人考试备考题库及答案解析
- 浙商银行嘉兴分行2026年一季度社会招聘笔试参考题库及答案解析
- 2026年塔吊司机安全作业规程
- 介入导管室有关知识课件
- 腾讯云智慧机场建设方案
- 2024年黑龙江哈尔滨“丁香人才周”哈尔滨市生态环境局所属事业单位招聘笔试冲刺题
- 二十四节气和农业生产的关系
- 铸牢中华民族共同体意识课件
- 推广经理半年工作计划
- 110kV线路运维方案
- 智能化弱电工程常见质量通病的避免方法
- 屋顶光伏安全专项施工方案
- 医疗器械拓展性临床试验管理规定(试行)YY/T-0292.1-2020《医用诊断X射线辐射防护器具》
- 《中国古代文学通识读本》pdf
评论
0/150
提交评论