Chinaunix首页 | 论坛 | 博客
  • 博客访问: 320191
  • 博文数量: 33
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1928
  • 用 户 组: 普通用户
  • 注册时间: 2013-12-22 16:27
文章分类

全部博文(33)

文章存档

2015年(33)

分类: LINUX

2015-03-18 01:05:16

一、文件系统

    什么是文件系统?
    文件系统是一种存储和组织计算机数据的方法。它负责对文件存储设备的空间进行组织和分配,负责文件存储并对存入的文件进行保护,以及检索的系统。如etx3和NTFS这两种文件系统对存储空间的划分、碎片的整理及检索的实现都不同,前者常用于linux的文件系统,后者常用于windows的文件系统。
    所以,任意一种存储设备,如果想像linux文件系统一样,以树形结构查看文件,必须被格式化成某一种文件系统。所以我们会看到无论是硬盘还是闪存都会被格式化成某种文件系统(以分区为单位,当然有的分区不用来挂载文件系统,不必格式化,如存放内核的闪存分区)

    
    文件系统类型:
    磁盘文件系统:FAT、 exFAT、NTFS、HFS、HFS+、ext2、ext3、ext4、ODS-5、btrfs等

    闪存文件系统:尽管磁盘文件系统也能在闪存上使用,但闪存文件系统是闪存设备的首选,理由如下:
    擦除区块:闪存的区块在重新写入前必须先进行擦除。擦除区块会占用相当可观的时间。因此,在设备空闲的时候擦除未使用的区块有助于提高速度。
    随机访问:由于在磁盘上寻址有很大的延迟,磁盘文件系统有针对寻址的优化,以尽量避免寻址。但闪存没有寻址延迟。
    写入平衡(Wear levelling):闪存中经常写入的区块往往容易损坏。闪存文件系统的设计可以使数据均匀地写到整个设备。
    日志文件系统具有闪存文件系统需要的特性,这类文件系统包括 JFFS2 和 YAFFS。也有为了避免日志频繁写入而导致闪存寿命衰减的非日志文件系统,如exFAT。

    网络文件系统:它是一种将远程主机上的分区(目录)经网络挂载到本地系统的一种机制。


现在有一个问题:对于每一种文件系统,上层都是通过系统调用来操作的,甚至对于同一个操作系统,转到内核代码也会相同(例如linux系统,支持多种文件系统,上层调用一个系统调用,陷入到内核里的代码是一样的),那么,操作系统是如何知道是哪种文件系统的?这里不得不说一下文件系统的层次了,也就是调用的顺序。


二、文件系统的层次

下面这张图是网上找的:


来说一下这个流程:

首先,应用程序要操作一个磁盘上的文件(如系统调用open)
接着,会通过系统调用接口(见前面的博文,glibc的接口函数,它会执行swi指令)
然后,通过上面的swi指令陷入到内核,到达VFS层(VFS层是一个中间层,它可以让open()、read()、write()等系统调用不用关心底层的存储介质和文件系统类型就可以工作,详度。如系统调用open后调用的sys_open就是属于这一层的函数
再接着,VFS层会帮我们找到具体要操作文件所在的分区和文件系统类型
最后,是根据硬件驱动来驱动硬件来进行实际操作(硬件驱动之上还有一层,隐藏硬件驱动差异的,给它的上一层提供统一的接口

阅读(3609) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~