Minux文件系统_第1页
Minux文件系统_第2页
Minux文件系统_第3页
Minux文件系统_第4页
Minux文件系统_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Linux文件系统简单分析 Linux 文件系统架构 VFS和minix的关系 Minix的具体实现 Minix实现具体系统调用的流程分析 模拟文件系统演示Linux文件系统架构,VFS与minux的关系VFS: 是一个异构文件系统之上的软件粘合层。 可以无缝地使用多个不同类型的文件系统,就像把多个文件系统堆叠在一起一样。 通过VFS,可以为访问文件系统的系统调用提供 一个统一的抽象接口。VFS1. struct file_operations 2. struct super_operations 3. struct inode_operations 4. struct address_spa

2、ce_operations Virtual File System定义了上面4个多态接口(虚函数),任何的文件系统都必须全部或部分实现上面的接口。MINIX文件系统中有如下代码: linux2.6.23/fs/minix/inode.cstatic struct super_operations minix_sops = .read_inode= minix_read_inode, .;static struct address_space_operations minix_aops = .readpage = minix_readpage,.;static struct inode_oper

3、ations minix_symlink_inode_operations = .readlink= generic_re定义了minix_sb_info和minix_inode_info两个结构体,声明了minix文件系统中需要的全局函数。adlink,.;linux2.6.23/fs/minix/file.cstruct file_operations minix_file_operations = .read= generic_file_read,.write= generic_file_write,.;上面的代码就是在MINIX文件系统这个Virtual File System这个“子

4、类”中重新实现了父类的“虚函数”。Minix文件系统在Minix2.6.11.12版本里,文件系统主要包含: Bitmap.c:作用是对于文件系统i节点位图和逻辑块位图进行占用和释放操作。 Dir.c:对目录操作的函数。如minix_readdir, minix_find_entry, minix_add_link, minix_delete_entry 等函数。 File.c:File.c 定义了file的结构体。file_operations inode_operations这两个结构体。 Inode.c :程序包含了处理i节点的函数,iget(),iput()和块映射函数bmap(),以

5、及一些其它函数, iget(),iput()和bmap()主要用于namei.c程序中的由路径名寻找对应i节点的映射函数namei()。 Namei.c:实现了根据目录名或者文件名寻找对应i节点函数,以及一些关于目录建立,删除,和目录项建立删除等操作函数和系统调用。 Minix.h:定义了minix_sb_info和minix_inode_info两个结构体,声明了minix文件系统中需要的全局函数。Minix的磁盘布局:mkfs.h中反映了上图的磁盘布局的函数:write_tablesstatic inline void write_tables(void)/* Mark the super

6、 block valid. */Super.s_state |= MINIX_VALID_FS;Super.s_state &= MINIX_ERROR_FS;if (lseek(DEV, 0, SEEK_SET)bb_error_msg_and_die(seek to boot block failed in write_tables);if (512 != write(DEV, boot_block_buffer, 512)bb_error_msg_and_die(unable to clear boot sector);if (BLOCK_SIZE != lseek(DEV, B

7、LOCK_SIZE, SEEK_SET)bb_error_msg_and_die(seek failed in write_tables);if (BLOCK_SIZE != write(DEV, super_block_buffer, BLOCK_SIZE)bb_error_msg_and_die(unable to write super-block);if (IMAPS * BLOCK_SIZE != write(DEV, inode_map, IMAPS * BLOCK_SIZE)bb_error_msg_and_die(unable to write inode map);if (Z

8、MAPS * BLOCK_SIZE != write(DEV, zone_map, ZMAPS * BLOCK_SIZE)bb_error_msg_and_die(unable to write zone map);if (INODE_BUFFER_SIZE != write(DEV, inode_buffer, INODE_BUFFER_SIZE)bb_error_msg_and_die(unable to write inodes);超级块(superblock)位于:linux-2.6.20/include/linux/minix_fs.h struct minix_super_bloc

9、k _u16 s_ninodes; /* i节点数 */_u16 s_nzones; /*总block数*/_u16 s_imap_blocks; /* i节点位图所占块数 */_u16 s_zmap_blocks; /* 逻辑块位图所占块数 */_u16 s_firstdatazone; /*数据块开始出*/_u16 s_log_zone_size; /* log2(磁盘块数/逻辑块) *_u32 s_max_size; /* 最大文件长度 */_u16 s_magic; /*魔数*/_u16 s_state;_u32 s_zones; ;i节点:struct minix_inode _u1

10、6 i_mode;_u16 i_uid; /磁盘i节点的标示_u32 i_size; /* inode所代表的档案大小 */_u32 i_time;/*访问时间*/_u8 i_gid; /* inode所属的群组id */_u8 i_nlinks;/链接数_u16 i_zone9;/ _u16 i_zone10;文件目录在MINIX文件系统中目录是一种特殊的文件。而每一项都用目录项(directory entry)来表示。在dir.c中主要是函数主要有: opendir:返回指向目录的DIR结构体。 readdir( c):函数读取目录下所有文件(包括目录),返回指向目录下所有文件的diren

11、t结构体。 stat(d-name,stat *e):调用其获取每个文件的详细信息,存储在stat结构体e中。 MINIX目录由包含16个字节目录项的文件组成。目录项的头两个字节构成16位的i-节点号,剩下的14个字节是文件名。 struct minix_dir_entry _u16 inode;/* i节点编号 */ char name0; /* 名称 */ ;从文件名获取数据块文件共享 在一个系统中,一个文件可能由多个用户功能使用。因此用户可以采用同名或者异名方式实现文件共享。 同名可采用相同的路径去访问某一文件。 异名共享是指用户使用各自不同的文件名访问某个文件。 一般有两种方法:基于索引节点的共享方法和基于符号链的共享方法。块高速缓存MINIX使用块高速缓存来改进文件系统性能。高速缓存用一个缓冲数组来实现,其中每个缓冲区由包含指针、计数器和标志的头以及用于存放磁盘块的体组成。所有未使用的缓冲区均使用双链表,按最近一次使用时间从近到远的顺序链接起

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论