文件系统大地小神之个人收藏.docx

上传人:b****5 文档编号:11709134 上传时间:2023-03-30 格式:DOCX 页数:13 大小:202.55KB
下载 相关 举报
文件系统大地小神之个人收藏.docx_第1页
第1页 / 共13页
文件系统大地小神之个人收藏.docx_第2页
第2页 / 共13页
文件系统大地小神之个人收藏.docx_第3页
第3页 / 共13页
文件系统大地小神之个人收藏.docx_第4页
第4页 / 共13页
文件系统大地小神之个人收藏.docx_第5页
第5页 / 共13页
点击查看更多>>
下载资源
资源描述

文件系统大地小神之个人收藏.docx

《文件系统大地小神之个人收藏.docx》由会员分享,可在线阅读,更多相关《文件系统大地小神之个人收藏.docx(13页珍藏版)》请在冰豆网上搜索。

文件系统大地小神之个人收藏.docx

文件系统大地小神之个人收藏

YAFFS

  YAFFS(YetAnotherFlashFileSystem)是第一个专门为NANDFlash存储器设计的嵌入式文件系统,适用于大容量的存储设备;并且是在GPL(GeneralPublicLicense)协议下发布的,可在其网站免费获得源代码。

  YAFFS中,文件是以固定大小的数据块进行存储的,块的大小可以是512字节、1024字节或者2048字节。

这种实现依赖于它能够将一个数据块头和每个数据块关联起来。

每个文件(包括目录)都有一个数据块头与之相对应,数据块头中保存了ECC(ErrorCorrectionCode)和文件系统的组织信息,用于错误检测和坏块处理。

充分考虑了NANDFlash的特点,YAFFS把这个数据块头存储在Flash的16字节备用空间中。

当文件系统被挂载时,只须扫描存储器的备用空间就能将文件系统信息读入内存,并且驻留在内存中,不仅加快了文件系统的加载速度,也提高了文件的访问速度,但是增加了内存的消耗。

  为了在节省内存的同时提高文件数据块的查找速度,YAFFS利用更高效的映射结构把文件位置映射到物理位置。

文件的数据段被组织成树型结构,这个树型结构具有32字节的节点,每个内部节点都包括8个指向其他节点的指针,叶节点包括16个2字节的指向物理地址的指针。

YAFFS在文件进行改写时总是先写入新的数据块,然后将旧的数据块从文件中删除。

这样即使在修改文件时意外掉电,丢失的也只是这一次修改数据的最小写入单位,从而实现了掉电保护,保证了数据完整性。

  结合贪心算法的高效性和随机选择的平均性,YAFFS实现了兼顾损耗平均和减小系统开销的目的。

当满足特定的小概率条件时,就会尝试随机选择一个可回收的页面;而在其他情况下,则使用贪心算法来回收最“脏”的块。

  YAFFS文件系统是按层次结构设计的,分成以下4部分:

yaffs_guts.c,文件系统的主要算法,这部分代码完全是用可移植的C语言编写的;yaffs_fs.c,LinuxVFS层的接口;NAND接口,yaffs_guts和NAND内存访问函数之间的包装层,例如调用Linuxmtd层或者RAM模拟层;可移植函数,服务的包装函数。

最重要的一点是,为了获得更好的移植性,YAFFS提供直接调用的模式,这才使得我们有机会来实现YAFFS文件系统在C51系统上的移植。

JFFS2

  JFFS2是JFFS的后继者,由RedHat重新改写而成。

JFFS2的全名为JournallingFlashFileSystemVersion2(闪存日志型文件系统第2版),其功能就是管理在MTD设备上实现的日志型文件系统。

与其他的存储设备存储方案相比,JFFS2并不准备提供让传统文件系统也可以使用此类设备的转换层。

它只会直接在MTD设备上实现日志结构的文件系统。

JFFS2会在安装的时候,扫描MTD设备的日志内容,并在RAM中重新建立文件系统结构本身。

  除了提供具有断电可靠性的日志结构文件系统,JFFS2还会在它管理的MTD设备上实现“损耗平衡”和“数据压缩”等特性。

RAMDISK

内存虚拟硬盘(ramdisk)是指通过软件技术,将物理内存进行分割,将一部分内存通过虚拟技术转变为硬盘以较大幅度提升计算机数据读取速度和保护硬盘。

技术优势 

1、对于计算机系统来说,内存的读取速度大约是硬盘的20倍,使用内存虚拟硬盘能够快速有效地提高数据访问速度。

 

2、传统的机械硬盘经过长期的读写会出现坏道,而在使用过程中,IE缓存文件和系统缓存文件需要大量重复的读写数据,长时间使用会造成硬盘损坏。

而内存并不存在此类隐患。

  

3、目前,由于软件的兼容性影响,32位系统依旧是未来一段时间的主流,而对于32位系统来说最大有效内存容量为3.25G,超出则无效。

内存技术的发展使得现在大量用户内存超过3.25G上限,造成了资源浪费,而使用RAMDISK能够合理的使用这一部分内存容量。

近几年来,计算机的CPU、内存和显卡等主要配件的性能都提升得很快,而与之相对应的磁盘系统性能正越来越严重地成为整个电脑系统性能提升的瓶颈。

虽然磁盘技术也从以前的ATA33发展到今天的ATA66/ATA100/ATA133。

但是,这还是不能彻底解决磁盘瓶颈的问题,特别是在运行一些对数据存取速度要求很高的程序,如数字影像处理或玩3D游戏装入纹理数据时,受磁盘存取速度的影响,屏幕画面时常会出现延迟和停顿。

幸好,一种能在PC平台上应用的、名为“RAMDisk”(RAM驱动器)的技术应运而生,可解电脑玩家们的“燃眉之急”。

所谓的RAM驱动器,实际上是把系统内存划出一部分当作硬盘使用。

对于操作系统来内存的存取速度远远大于机械磁盘,所以RAM驱动器肯定要比机械的硬盘快得多。

你可以把整个应用程序都安装在RamDisk的驱动器中,然后用内存的速度运行它。

使用RAM驱动器技术对于延长笔记本电脑电池使用时间也是十分有利的,因为这样做可以减少访问“耗电大户”——硬盘的次数。

CRAMFS

 CRAMFS(CompressedRomFileSystem)文件系统是专门针对闪存设计的只读压缩的文件系统,其容量上限为256M,采用zlib压缩,文件系统类型可以是EXT2或EXT3.

  如果使用RAMDISK方式来使用文件系统,那么在系统运行之后,首先得把flash上的映像文件全部解压到ram中,构造ramdisk环境,才可以运行程序,但有一个致命的弱点,在正常情下,同样的代码不仅在flash占用了空间,而且还在ram中占用极大的空间,这违背了嵌入式中节省资源的原则.

  cramfs文件系统并不需要一次性地将文件系统中的所有内容解压到ram中,而只是是系统需要访问某个位置的数据时,马上计算出该数据在cramfs中的位置,将其解压到ram中,然后通过内存访问来获取数据,cramfs中的解压缩之后的内存中的数据存放位置都是由cramfs文件系统本身来管理,用户并不需要实现过程,因此增加了透明度,给开发人员节约了时间.

  cramfs拥有以下一些特性:

  1、采用实时解压缩方式,但解压缩的时候有延迟。

  2、cramfs的数据都是经过处理、打包的,对其进先写操作有一定困难。

所以cramfs不支持写操作,这个特性刚好适合嵌入式应用中使用Flash存储文件系统的场合。

  3、在cramfs中,默认文件最大不能超过16MB,可以通过修改cramfs-1.1/linux/cramfs_fs.h下的CRAMFS_SIZE_WIDTH的大小来支持最大为256MB的单个文件,当然linux内核参数也要修改(include/linux/cramfs_fs.h)成相同的参数。

  4、支持组标识(gid),但是mkcramfs只将gid的低8位保存下来,因此只有这8位是有效的。

  5、支持硬链接。

但是cramfs并没有完全处理好,硬链接的文件属性中,链接数仍然为1.

  6、cramfs的目录中,没有“.”和“..”这两项。

因此,cramfs中的·目录的链接数通常也仅有一个。

  6、cramfs中,不会保存文件的时间戳(timestamps)信息。

当然,正在使用的文件由于inode保存在内存中,因此其时间可以暂时地变更为最新时间,但是不会保存到cramfs文件系统中去。

7、当前版本的cramfs只支持PAGE_CACHE_SIZE为4096的内核。

因此,如果发现cramfs不能正常读写的时候,可以检查一下内核的参数设置。

Ext3

Ext3(Thirdextendedfilesystem)是一种日志式文件系统,是对ext2系统的扩展,它兼容ext2。

日志式文件系统的优越性在于:

由于文件系统都有快取层参与运作,如不使用时必须将文件系统卸下,以便将快取层的资料写回磁盘中。

因此每当系统要关机时,必须将其所有的文件系统全部shutdown后才能进行关机。

如果在文件系统尚未shutdown前就关机(如停电)时,下次重开机后会造成文件系统的资料不一致,故这时必须做文件系统的重整工作,将不一致与错误的地方修复。

然而,此一重整的工作是相当耗时的,特别是容量大的文件系统,而且也不能百分之百保证所有的资料都不会流失。

为了克服此问题,使用所谓‘日志式文件系统(JournalFileSystem)。

此类文件系统最大的特色是,它会将整个磁盘的写入动作完整记录在磁盘的某个区域上,以便有需要时可以回溯追踪。

由于资料的写入动作包含许多的细节,像是改变文件标头资料、搜寻磁盘可写入空间、一个个写入资料区段等等,每一个细节进行到一半若被中断,就会造成文件系统的不一致,因而需要重整。

然而,在日志式文件系统中,由于详细纪录了每个细节,故当在某个过程中被中断时,系统可以根据这些记录直接回溯并重整被中断的部分,而不必花时间去检查其他的部分,故重整的工作速度相当快,几乎不需要花时间。

Ext3日志文件系统的特点:

1、高可用性  

系统使用了ext3文件系统后,即使在非正常关机后,系统也不需要检查文件系统。

宕机发生后,恢复ext3文件系统的时间只要数十秒钟。

  

2、数据的完整性

ext3文件系统能够极大地提高文件系统的完整性,避免了意外宕机对文件系统的破坏。

在保证数据完整性方面,ext3文件系统有2种模式可供选择。

其中之一就是“同时保持文件系统及数据的一致性”模式。

采用这种方式,你永远不再会看到由于非正常关机而存储在磁盘上的垃圾文件。

  

3、文件系统的速度  

尽管使用ext3文件系统时,有时在存储数据时可能要多次写数据,但是,从总体上看来,ext3比ext2的性能还要好一些。

这是因为ext3的日志功能对磁盘的驱动器读写头进行了优化。

所以,文件系统的读写性能较之Ext2文件系统并来说,性能并没有降低。

  

4、数据转换  

由ext2文件系统转换成ext3文件系统非常容易,只要简单地键入两条命令即可完成整个转换过程,用户不用花时间备份、恢复、格式化分区等。

用一个ext3文件系统提供的小工具tune2fs,它可以将ext2文件系统轻松转换为ext3日志文件系统。

另外,ext3文件系统可以不经任何更改,而直接加载成为ext2文件系统。

  

5、多种日志模式  

Ext3有多种日志模式,一种工作模式是对所有的文件数据及metadata(定义文件系统中数据的数据,即数据的数据)进行日志记录(data=journal模式);另一种工作模式则是只对metadata记录日志,而不对数据进行日志记录,也即所谓data=ordered或者data=writeback模式。

系统管理人员可以根据系统的实际工作要求,在系统的工作速度与文件数据的一致性之间作出选择。

大地小神补充:

CPU如果要以大分类来分,只有两大类:

一种是CISC(复杂指令集),另一种是RISC(简单指令集),一般的PC的CPU不管是AMD,INTEL,VIA都是属於CISC系列,APPLE的CPU是RISC的。

CPU主记忆体的种类:

记忆体(RandomAccessMemory)这个名词大家一定很熟,但想必应该对记忆体的功用不太了解,记忆体的主要功用是暂存资料其实电脑有很多资料都是靠记忆体来存取,记忆体基本上可以分成两类:

RAM和ROM.

1.RAM:

RAM(RandomAccessMemory)中文译成随机存取记忆体,当他被使用时,系统可以从RAM上存取资料,而且需要电力来维持它的记忆,这种又可分DRAM和SRAM,DRAM(DynamicRandomAccessMemory)翻成动态随机存取记忆体,也就是一般电脑上的主记忆体,或视讯记忆体,而SRAM(StaticRandomAccessMemory)翻成静态随机存取记忆体,因为SRAM的速度比DRAM快,价格也比较高,所以电脑中以SRAM当快取记忆体,所谓的L2Cache和L1Cache就是这个东西,这些东西就是用来提高提高CPU的存取效率.(因为CPU的速度太快,所以需要一些快速的记忆体当桥梁,才不会因为CPU太快把资料处理完而在那歇著)

2.ROM:

ROM(ReadOnlyMemory)和RAM最大的差别在于电脑系统无法任意将资料写入ROM,而且也不需要电力便可以长久保存资料,ROM又可分PROM,EPROM和FlachROM,其中主机板上的BIOS的资料就是存在FlachROM中.

===================================================

大地小神补充:

相当不错,又是一笔财富。

在文件系统方面,Linux®可以算得上操作系统中的“瑞士军刀”。

Linux支持许多种文件系统,从日志型文件系统到集群文件系统和加密文件系统。

对于使用标准的和比较奇特的文件系统以及开发文件系统来说,Linux是极好的平台。

本文讨论Linux内核中的虚拟文件系统(VFS,有时候称为虚拟文件系统交换器),然后介绍将文件系统连接在一起的主要结构。

基本的文件系统体系结构

Linux文件系统体系结构是一个对复杂系统进行抽象化的有趣例子。

通过使用一组通用的API函数,Linux可以在许多种存储设备上支持许多种文件系统。

例如,read函数调用可以从指定的文件描述符读取一定数量的字节。

read函数不了解文件系统的类型,比如ext3或NFS。

它也不了解文件系统所在的存储媒体,比如ATAttachmentPacketInterface(ATAPI)磁盘、Serial-AttachedSCSI(SAS)磁盘或SerialAdvancedTechnologyAttachment(SATA)磁盘。

但是,当通过调用read函数读取一个文件时,数据会正常返回。

本文讲解这个机制的实现方法并介绍Linux文件系统层的主要结构。

什么是文件系统?

首先回答最常见的问题,“什么是文件系统”。

文件系统是对一个存储设备上的数据和元数据进行组织的机制。

由于定义如此宽泛,支持它的代码会很有意思。

正如前面提到的,有许多种文件系统和媒体。

由于存在这么多类型,可以预料到Linux文件系统接口实现为分层的体系结构,从而将用户接口层、文件系统实现和操作存储设备的驱动程序分隔开。

文件系统作为协议

另一种看待文件系统的方式是把它看作一个协议。

网络协议(比如IP)规定了互联网上传输的数据流的意义,同样,文件系统会给出特定存储媒体上数据的意义。

挂装

在Linux中将一个文件系统与一个存储设备关联起来的过程称为挂装(mount)。

使用mount命令将一个文件系统附着到当前文件系统层次结构中(根)。

在执行挂装时,要提供文件系统类型、文件系统和一个挂装点。

为了说明Linux文件系统层的功能(以及挂装的方法),我们在当前文件系统的一个文件中创建一个文件系统。

实现的方法是,首先用dd命令创建一个指定大小的文件(使用/dev/zero作为源进行文件复制)——换句话说,一个用零进行初始化的文件。

清单1.创建一个经过初始化的文件

$ddif=/dev/zeroof=file.imgbs=1kcount=10000

10000+0recordsin

10000+0recordsout

$

现在有了一个10MB的file.img文件。

使用losetup命令将一个循环设备与这个文件关联起来,让它看起来像一个块设备,而不是文件系统中的常规文件:

(Linux中一切皆文件)

$losetup/dev/loop0file.img

$

这个文件现在作为一个块设备出现(由/dev/loop0表示)。

然后用mke2fs在这个设备上创建一个文件系统。

这个命令创建一个指定大小的新的ext2文件系统。

清单2.用循环设备创建ext2文件系统

$mke2fs-c/dev/loop010000

mke2fs1.35(28-Feb-2004)

max_blocks1024000,rsv_groups=1250,rsv_gdb=39

Filesystemlabel=

OStype:

Linux

Blocksize=1024(log=0)

Fragmentsize=1024(log=0)

2512inodes,10000blocks

500blocks(5.00%)reservedforthesuperuser

...

$

使用mount命令将循环设备(/dev/loop0)所表示的file.img文件挂装到挂装点/mnt/point1。

注意,文件系统类型指定为ext2。

挂装之后,就可以将这个挂装点当作一个新的文件系统,比如使用ls命令。

大地小神补充:

mount:

设备与文件系统关联起来

清单3.创建挂装点并通过循环设备挂装文件系统

$mkdir/mnt/point1

$mount-text2/dev/loop0/mnt/point1

$ls/mnt/point1

lost+found

$

如清单4所示,还可以继续这个过程:

在刚才挂装的文件系统中创建一个新文件,将它与一个循环设备关联起来,再在上面创建另一个文件系统。

清单4.在循环文件系统中创建一个新的循环文件系统

$ddif=/dev/zeroof=/mnt/point1/file.imgbs=1kcount=1000

1000+0recordsin

1000+0recordsout

$losetup/dev/loop1/mnt/point1/file.img

$mke2fs-c/dev/loop11000

mke2fs1.35(28-Feb-2004)

max_blocks1024000,rsv_groups=125,rsv_gdb=3

Filesystemlabel=

...

$mkdir/mnt/point2

$mount-text2/dev/loop1/mnt/point2

$ls/mnt/point2

lost+found

$ls/mnt/point1

file.imglost+found

$

通过这个简单的演示很容易体会到Linux文件系统(和循环设备)是多么强大。

可以按照相同的方法在文件上用循环设备创建加密的文件系统。

可以在需要时使用循环设备临时挂装文件,这有助于保护数据。

文件系统体系结构

既然已经看到了文件系统的构造方法,现在就看看Linux文件系统层的体系结构。

本文从两个角度考察Linux文件系统。

首先采用高层体系结构的角度。

然后进行深层次讨论,介绍实现文件系统层的主要结构。

高层体系结构

尽管大多数文件系统代码在内核中(后面讨论的用户空间文件系统除外),但是图1所示的体系结构显示了用户空间和内核中与文件系统相关的主要组件之间的关系。

图1.Linux文件系统组件的体系结构

用户空间包含一些应用程序(例如,文件系统的使用者)和GNUC库(glibc),它们为文件系统调用(打开、读取、写和关闭)提供用户接口。

系统调用接口的作用就像是交换器,它将系统调用从用户空间发送到内核空间中的适当端点。

VFS是底层文件系统的主要接口。

这个组件导出一组接口,然后将它们抽象到各个文件系统,各个文件系统的行为可能差异很大。

有两个针对文件系统对象的缓存(inode和dentry)。

它们缓存最近使用过的文件系统对象。

每个文件系统实现(ext2、JFS等)导出一组通用接口,供VFS使用。

缓冲区缓存会缓存文件系统和相关块设备之间的请求。

例如,对底层设备驱动程序的读写请求会通过缓冲区缓存来传递。

这就允许在其中缓存请求,减少访问物理设备的次数,加快访问速度。

以最近使用(LRU)列表的形式管理缓冲区缓存。

注意,可以使用sync命令将缓冲区缓存中的请求发送到存储媒体(迫使所有未写的数据发送到设备驱动程序,进而发送到存储设备)。

什么是块设备?

块设备就是以块(比如磁盘扇区)为单位收发数据的设备,它们支持缓冲和随机访问(不必顺序读取块,而是可以在任何时候访问任何块)等特性。

块设备包括硬盘、CD-ROM和RAM盘。

与块设备相对的是字符设备,字符设备没有可以进行物理寻址的媒体。

字符设备包括串行端口和磁带设备,只能逐字符地读取这些设备中的数据。

这就是VFS和文件系统组件的高层情况。

现在,讨论实现这个子系统的主要结构。

主要结构

Linux以一组通用对象的角度看待所有文件系统。

这些对象是超级块(superblock)、inode、dentry和文件。

超级块在每个文件系统的根上,超级块描述和维护文件系统的状态。

文件系统中管理的每个对象(文件或目录)在Linux中表示为一个inode。

inode包含管理文件系统中的对象所需的所有元数据(包括可以在对象上执行的操作)。

另一组结构称为dentry,它们用来实现名称和inode之间的映射,有一个目录缓存用来保存最近使用的dentry。

dentry还维护目录和文件之间的关系,从而支持在文件系统中移动。

最后,VFS文件表示一个打开的文件(保存打开的文件的状态,比如写偏移量等等)。

虚拟文件系统层

VFS作为文件系统接口的根层。

VFS记录当前支持的文件系统以及当前挂装的文件系统。

可以使用一组注册函数在Linux中动态地添加或删除文件系统。

内核保存当前支持的文件系统的列表,可以通过/proc文件系统在用户空间中查看这个列表。

这个虚拟文件还显示当前与这些文件系统相关联的设备。

在Linux中添加新文件系统的方法是调用register_filesystem。

这个函数的参数定义一个文件系统结构(file_system_type)的引用,这个结构定义文件系统的名称、一组属性和两个超级块函数。

也可以注销文件系统。

在注册新的文件系统时,会把这个文件系统和它的相关信息添加到file_systems列表中(见图2和linux/include/linux/mount.h)。

这个列表定义可以支持的文件系统。

在命令行上输入cat/proc/filesystems,就可以查看这个列表。

图2.向内核注册的文件系统

VFS中维护的另一个结构是挂装的文件系统(见图3)。

这个结构提供当前挂装的文件系统(见linux/include/linux/fs.h)。

它链接下面讨论的超级块结构。

图3.挂装的文件系统列表

超级块

超级块结构表示一个文件系统。

它包含管理文件系统所需的信息,包括文件系统名称(比如ext2)、文件系统的大小和状态、块设备的引用和元数据信息(比如空闲列表等等)。

超级块通常存储在存储媒体上,但是如果超级块不存在,也可以实时创建它。

可以在./linux/include/linux/fs.h中找到超级块结构(见图4)。

图4.超级块结构和inode操作

超级块中的一个重要元素是超级块操作的定义。

这个结构定义一组用来管理这个文件系统中的inode的函数。

例如,可以用alloc_inode分配inode,用destroy_inode删除inode。

可以用read_inode和write_ino

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 考试认证 > 交规考试

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1