Linux的虚拟文件系统.

Slides:



Advertisements
Similar presentations
阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Advertisements

第九章 文件系统 (一)文件系统的基本概念 (二)文件的逻辑结构与存取方法 (三)文件的物理结构 (四)文件目录结构 (五)文件的共享与保护
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
操作系统实践 第19章 Linux虚拟文件系统 山东科技大学操作系统教研组.
第七章 操作系统接口 7.1 联机用户接口 7.2 Shell命令语言 7.3 系统调用 7.4 UNIX系统调用 7.5 图形用户接口.
第2节 ext2文件系统 索引文件的的代表 索引文件 文件使用三部曲 文件共享 文件保护 举例.
第2章 文 件 系 统 2.1 文件系统及其分类 2.2 二级扩展文件系统ext2构成 2.3 虚拟文件系统VFS 2.4 缓冲区的缓存
Linux File System Li-Shien Chen.
Oracle数据库 Oracle 子程序.
在PHP和MYSQL中实现完美的中文显示
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
作業系統 第十三章 檔案系統實例.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
LSF系统介绍 张焕杰 中国科学技术大学网络信息中心
Linux 切换、 创建和删除目录 系统管理 宁波市高校慕课联盟课程
Hadoop I/O By ShiChaojie.
面向对象建模技术 软件工程系 林 琳.
Linux server 連線軟體: 主機:kitty.cs.pu.edu.tw 帳號:dar 密碼:n….w.
存储系统.
第4节 虚拟文件系统 virtual filesystem (VFS)
Linux File System 文件系统 VFS VFS的作用 基于VFS的文件访问 VFS重要数据结构 文件系统的注册与安装
Linux的文件系统 课程目标: 操作系统的运行级别 文件系统架构 设备管理.
大学计算机基础 典型案例之一 构建FPT服务器.
走进编程 程序的顺序结构(二).
网络常用常用命令 课件制作人:谢希仁.
文件读写实践 广州创龙电子科技有限公司 01 广州创龙电子科技有限公司
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
2019/1/12 GDP设计协同 超级管理员操作手册 GDP项目组.
第3章 Linux文件系统 任何操作系统都是基于文件系统上的,Linux中所有的内容都是由文件组成。文件系统是文件组织的抽象,学习Linux文件系统的相关知识有助于深入理解Fedora Core 6操作系统。Red Hat Linux操作系统从Red Hat 7.2版本开始就支持新的ext3文件系统,而不再使用以前的ext2文件系统。
如何生成设备节点 广州创龙电子科技有限公司
Linux的文件系统 课程目标: 操作系统的运行级别 文件系统架构 设备管理.
第四章 附件 (应用程序软件包).
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
实验四 Linux文件目录 一、实验目的 1、了解Linux文件系统与目录操作; 2、了解Linux文件系统目录结构;
Windows 7 的系统设置.
YMSM D-PACK 安装手册 作成者:D-PACK维护组(YMSLx) 作成日:
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
SOA – Experiment 2: Query Classification Web Service
作業系統 第三章 作業系統結構.
C语言程序设计 主讲教师:陆幼利.
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
作業系統 Operating System 第四單元 檔案系統
本节内容 随机读取 视频提供:昆山爱达人信息技术有限公司.
VB与Access数据库的连接.
Cassandra应用及高性能客户端 董亚军 来自Newegg-NESC.
姚金宇 MIT SCHEME 使用说明 姚金宇
分裂对象模型 C++ otcl.
Lab17 程序设计B班
Web安全基础教程
信号量(Semaphore).
iSIGHT 基本培训 使用 Excel的栅栏问题
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
Python 环境搭建 基于Anaconda和VSCode.
实验目的:掌握数据的顺序存储结构及它们在计算机中的操作。 实验内容:
_08文件操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
Google的云计算 分布式锁服务Chubby.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
入侵检测技术 大连理工大学软件学院 毕玲.
Presentation transcript:

Linux的虚拟文件系统

提纲 虚拟文件系统VFS的作用 VFS的数据结构 文件系统类型 文件系统安装 路径名查找 VFS系统调用的实现 文件加锁 2019/4/5 嵌入式OS

虚拟文件系统VFS的作用 虚拟文件系统 Linux与其他类Unix系统一样,采用虚拟文件系统VFS来达到支持多种文件系统格式的目标 Virtual Filesystem Virtual Filesystem Switch VFS是一个软件层,用来处理与Unix标准文件系统相关的所有系统调用。 是用户应用程序与文件系统实现之间的抽象层 能为各种文件系统提供一个通用的、统一的接口 Linux与其他类Unix系统一样,采用虚拟文件系统VFS来达到支持多种文件系统格式的目标 2019/4/5 嵌入式OS

VFS在一个简单文件复制操作中的作用 假设用户输入以下shell命令 其中, $ cp /floppy/TEST /tmp/test 其中, /floppy是MS-DOS的磁盘的一个挂载点(安装点) /tmp是Ext2文件系统中的一个目录 对于cp命令而言,它不需要知道/floppy/TEST和/tmp/test分别是什么文件系统类型 在cp命令中,它通过VFS提供的系统调用接口进行文件操作 2019/4/5 嵌入式OS

2019/4/5 嵌入式OS

VFS支持的文件系统类型 VFS支持的文件系统可以划分为三种主要类型 基于磁盘的文件系统:它们管理在本地磁盘分区中可用的存储空间 Linux使用的文件系统:ext2、ext3、ReiserFS Unix家族的文件系统:SYSV文件系统,UFS,MINIX文件系统以及VERITAS VxFS 微软公司的文件系统:MS-DOS、VFAT以及NTFS ISO9660CD-ROM文件系统和通用磁盘格式的DVD文件系统 其他有专利权的文件系统,如HPFS、HFS、AFFS、ADFS 起源于非Linux系统的其他日志文件系统,JFS,XFS 2019/4/5 嵌入式OS

各种不同的文件系统通过mount(挂载、安装)到根文件系统中 网络文件系统:用于访问属于其他网络计算机的文件系统所包含的文件 NFS、Coda、AFS、SMB、NCP 特殊文件系统 不同于上述两大类 不管理具体的磁盘空间 /proc 各种不同的文件系统通过mount(挂载、安装)到根文件系统中 在Linux中,根文件系统即根目录所代表的文件系统 通常是ext2文件系统 2019/4/5 嵌入式OS

VFS中通用文件模型概念 VFS的基本思想:引入一个通用文件模型,这个模型能够表示所有支持的文件系统 对于一个具体实现的文件系统,在处理时,需要将其进行概念上的转换 例如,在通用文件模型中,目录被看成是普通文件 在实现上, read()sys_readfile数据结构f_opMS_DOS文件操作指针(其中的read操作) 类似面向对象的概念 2019/4/5 嵌入式OS

通用文件模型有下列对象类型组成 超级块对象(superblock object) 索引节点对象(inode object) 存放文件系统相关信息:例如文件系统控制块 索引节点对象(inode object) 存放具体文件的一般信息:文件控制块/inode 文件对象(file object) 存放已打开的文件和进程之间交互的信息 目录项对象(dentry object) 存放目录项与文件的链接信息 2019/4/5 嵌入式OS

三个不同的进程打开同一个文件 同一个 硬链接 两个不同的硬链接 2019/4/5 嵌入式OS

VFS所处理的系统调用 mount、umount:挂载/卸载文件系统 sysfs :获取文件系统信息 statfs、fstatfs、ustat :获取文件系统统计信息 chroot :更改根目录 chdir、fchdir、getcwd :操纵当前工作目录 mkdir、rmdir :创建/删除目录 getdents、readdir 、link 、unlink 、rename :对目录项进行操作 readlink 、symlink :对符号链接进行操作 chown 、fchown 、lchown :更改文件所有者 chmod 、fchmod 、utime :更改文件属性 open、close、create … 2019/4/5 嵌入式OS

上述大部分操作之需要与通用文件模型中的一些对象打交道,而不需要真正操作具体的文件系统和文件,因此可以把VFS看成是一个“通用”的文件系统,在必要时依赖某种具体的文件系统 2019/4/5 嵌入式OS

VFS的数据结构 每个VFS对象都对应一定的数据结构,在这个数据结构中包含对象的属性及其方法 一个具体的文件系统:超级块对象:super_block 所有超级块链表:super_blocks :s_list域 文件系统特有信息:s_fs_info域 脏标志:s_dirt域 文件系统特有方法:super_operations数据结构及域 2019/4/5 嵌入式OS

一个具体的文件:Inode对象:inode 一个打开文件:文件对象:file 文件操作指针f_pos 文件对象特有的方法 专用高速缓存:flip,filp_cachep 目录项对象:dentry 2019/4/5 嵌入式OS

与进程相关的文件 文件系统相关信息fs_struct 打开文件相关信息files_struct 2019/4/5 嵌入式OS count:共享此表的进程的个数 Root:根目录的目录项及在该目录上安装的文件系统对象 Pwd:当前工作目录的目录项及在该目录上安装的文件系统对象 2019/4/5 嵌入式OS

2019/4/5 嵌入式OS Count:共享本数据结构的进程的个数 Max_fds:文件对象的当前最大数目;参见alloc_fdtable Next_fd:初始化为0;分配fd的时候,被赋值为所分配的最大文件描述符加1; Fd:指向文件对象指针数组;通常指向fd_array,当fd_array不够时,将分配一个新的更大的文件对象指针数组,将其地址存放在fd字段中,并同时更新max_fds字段的值。 Close_on_exec:指向执行exec时需要关闭的文件描述符的指针 Open_fds:指向打开文件描述符的指针 Close_on_exec_init:执行exec时需要关闭的文件描述符的初始集合 Open_fds_init:文件描述符的初始集合 Fd_array:文件对象指针的初始化数组 2019/4/5 嵌入式OS

2019/4/5 嵌入式OS

文件系统类型 特殊文件系统 用来为系统程序员、系统管理员等提供一种容易的方式来操作内核的数据结构并实现操作系统的特殊特征 常用的特殊文件系统 2019/4/5 嵌入式OS

2019/4/5 嵌入式OS

文件系统类型的注册 文件系统类型:file_system_type 在系统初始化期间,register_filesystem()用来注册编译时指定的每个文件系统 相应的文件系统对象被插入到file_systems链表中 unregister_filesystem() 2019/4/5 嵌入式OS

文件系统的挂载 根文件系统 每个文件系统都有自己的根目录 如果一个文件系统的根目录是系统目录树的根目录,那个这个文件系统就是根文件系统 在系统初始化过程中被直接mount 提供系统初始化脚本以及基本命令 每个文件系统都有自己的根目录 如果一个文件系统的根目录是系统目录树的根目录,那个这个文件系统就是根文件系统 其他文件系统可以挂载到系统的目录树上 这样的目录称为挂载点(mount点,安装点) 文件系统之间的挂载关系对应文件系统之间的父子关系 2019/4/5 嵌入式OS

例如,放在软盘/dev/fd0上的ext2文件系统,可通过下列命令安装在/flp上 mount -t ext2 /dev/fd0 /flp 一般情况下,只允许挂载一次 在umount之前,其他对/dev/fd0的挂载命令会失败 在2.4中,可以挂载多次 不管被挂载多少次,只有一个真实的文件系统,因此只有一个超级块对象 2019/4/5 嵌入式OS

已挂载文件系统描述符vfsmount 挂载根文件系统 挂载一个文件系统 卸载一个文件系统 第一阶段:安装一个特殊的文件系统,该文件系统仅提供一个作为初始安装点的空目录:init_mount_tree 第二阶段:mount_root 挂载一个文件系统 sys_mount 卸载一个文件系统 sys_umount 2019/4/5 嵌入式OS

路径名查找 VFS是如何从文件路径名找到相应的索引节点的? 搜索的起点: 分析路径名,将它拆分成一个文件名序列 除了最后一个文件名之外,其他所有文件名必定都是目录名 搜索的起点: 绝对路径:currentfsroot 相对路径:currentfspwd 2019/4/5 嵌入式OS

在这个索引节点的目录文件中,找到第一个目录名(文件名)所对应的索引节点 首先找到起点目录的索引节点 在这个索引节点的目录文件中,找到第一个目录名(文件名)所对应的索引节点 在第一个目录名的索引节点的目录文件中找到第二个目录名(文件名)所对应的索引节点 …反复,直到文件名序列的最后一项 2019/4/5 嵌入式OS

在上述查找过程中要处理的其他问题: 路径名查找 对每个目录的访问权限必须进行检查 若是符号链接,需要进行扩展 要考虑符号链接的循环引用(进行处理) 目录名可能是一个文件系统的安装点,必须扩展到一个新的文件系统中 路径名查找 数据结构:struct nameidata 在需要进行路径名查找的时候,依此调用如下函数:path_init, path_walk, path_release 2019/4/5 嵌入式OS

查找操作的标志 2019/4/5 嵌入式OS

标准查找操作 要处理的问题 跳过第一个路径名分量前的任何/ 考虑符号链接的查找 检查权限 考虑“.” 考虑“..” 考虑普通目录,要在目录项高速缓存中查找 … 2019/4/5 嵌入式OS

父路径名的查找 在很多情况下,查找操作的真正目的不是路径名的最后一个分量,而是最后分量的前一个分量 例如创建一个文件时 此时,路径解析的结果中存放最后一个分量所在目录对应的对象 2019/4/5 嵌入式OS

符号链接的查找 关于符号链接的解析由内核来完成 如何识别这是一个符号链接? 如何处理符号链接的循环情况? 2019/4/5 嵌入式OS

VFS系统调用的实现 仍然考虑 假定cp执行下列代码片段(实际要更复杂) $ cp /floppy/TEST /tmp/test inf = open("/floppy/TEST", O_RDONLY, 0); outf = open("/tmp/test", O_WRONLY | O_CREAT | O_TRUNC, 0600); do { len = read(inf, buf, 4096); write(outf, buf, len); } while (len); close(outf); close(inf); 2019/4/5 嵌入式OS

open()系统调用 read和write系统调用 close系统调用 sys_open sys_write sys_read sys_close 2019/4/5 嵌入式OS

Thanks! The end.