操作系统实践 第19章 Linux虚拟文件系统 山东科技大学操作系统教研组.

Slides:



Advertisements
Similar presentations
7.1 内置对象概述及分类 JSP 视频教学课程. JSP2.2 目录 1. 内置对象简介 1. 内置对象简介 2. 内置对象分类 2. 内置对象分类 3. 内置对象按功能区分 3. 内置对象按功能区分 4. 内置对象作用范围 4. 内置对象作用范围.
Advertisements

阻塞操作. 在 linux 里,一个等待队列由一个 wait_queue_head_t 类型的结构来描述 等待队列的初始化: static wait_queue_head_t testqueue; init_waitqueue_head(&testqueue);
Linux 系统. 操作系统发展需求 1 没有操作系统 2 简单批处理操作系统 3 多道程序设计的批处理 4 多道程序设计的分时操作系统 5 多处理机并行系统 6 网络操作系统 7 分布式操作系统.
实用操作系统概念 张惠娟 副教授 1.
C++中的声音处理 在传统Turbo C环境中,如果想用C语言控制电脑发声,可以用Sound函数。在VC6.6环境中如果想控制电脑发声则采用Beep函数。原型为: Beep(频率,持续时间) , 单位毫秒 暂停程序执行使用Sleep函数 Sleep(持续时间), 单位毫秒 引用这两个函数时,必须包含头文件
在PHP和MYSQL中实现完美的中文显示
陈香兰 助教:陈博、李春华 Spring 2009 嵌入式操作系统 陈香兰 助教:陈博、李春华 Spring 2009.
作業系統 第十三章 檔案系統實例.
Kvm异步缺页中断 浙江大学计算机体系结构实验室 徐浩.
Hadoop I/O By ShiChaojie.
存储系统.
第4节 虚拟文件系统 virtual filesystem (VFS)
Linux File System 文件系统 VFS VFS的作用 基于VFS的文件访问 VFS重要数据结构 文件系统的注册与安装
Linux的文件系统 课程目标: 操作系统的运行级别 文件系统架构 设备管理.
辅导课程六.
DM81X 视频采集处理 ——简单采集显示例程讲解 广州创龙电子科技有限公司
第一单元 初识C程序与C程序开发平台搭建 ---观其大略
段磊 王慧锋 TEL: qq群: 数据库系统原理课程设计 实验环节2 段磊 王慧锋 TEL: qq群:
第十章 IDL访问数据库 10.1 数据库与数据库访问 1、数据库 数据库中数据的组织由低到高分为四级:字段、记录、表、数据库四种。
按键驱动 广州创龙电子科技有限公司 Guangzhou Tronlong Electronic Technology Co., Ltd.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
2019/1/12 GDP设计协同 超级管理员操作手册 GDP项目组.
本节内容 模拟线程切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
如何生成设备节点 广州创龙电子科技有限公司
Linux的文件系统 课程目标: 操作系统的运行级别 文件系统架构 设备管理.
中国科学技术大学计算机系 陈香兰(0551- ) Spring 2009
Windows 7 的系统设置.
用event class 从input的root文件中,由DmpDataBuffer::ReadObject读取数据的问题
第七章 操作符重载 胡昊 南京大学计算机系软件所.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
宁波市高校慕课联盟课程 与 进行交互 Linux 系统管理.
Linux的虚拟文件系统.
SOA – Experiment 2: Query Classification Web Service
C++语言程序设计 C++语言程序设计 第七章 类与对象 第十一组 C++语言程序设计.
第二章 登录UNIX操作系统.
内容摘要 ■ 课程概述 ■ 教学安排 ■ 什么是操作系统? ■ 为什么学习操作系统? ■ 如何学习操作系统? ■ 操作系统实例
简单介绍 用C++实现简单的模板数据结构 ArrayList(数组, 类似std::vector)
分裂对象模型 C++ otcl.
实体描述呈现方法的研究 实验评估 2019/5/1.
Select模型 本节内容 视频提供:昆山爱达人信息技术有限公司 视频录制:yang 官网地址:
本节内容 Win32 API中的宽字符 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
iSIGHT 基本培训 使用 Excel的栅栏问题
本节内容 结构体 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 线性地址的管理 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 文件系统 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
Chapter 18 使用GRASP的对象设计示例.
多层循环 Private Sub Command1_Click() Dim i As Integer, j As Integer
Visual Basic程序设计 第13章 访问数据库
C++语言程序设计 C++语言程序设计 第六章 指针和引用 第十一组 C++语言程序设计.
魏新宇 MATLAB/Simulink 与控制系统仿真 魏新宇
本节内容 模块隐藏 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
GIS基本功能 数据存储 与管理 数据采集 数据处理 与编辑 空间查询 空间查询 GIS能做什么? 与分析 叠加分析 缓冲区分析 网络分析
本节内容 C语言的汇编表示 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
本节内容 Windows线程切换_时钟中断切换 视频提供:昆山滴水信息技术有限公司 官网地址: 论坛地址: QQ交流 :
_08文件操作 本节课讲师——void* 视频提供:昆山爱达人信息技术有限公司 官网地址:
Google的云计算 分布式锁服务Chubby.
基于列存储的RDF数据管理 朱敏
C++语言程序设计 C++语言程序设计 第一章 C++语言概述 第十一组 C++语言程序设计.
本节内容 动态链接库 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
C++语言程序设计 C++语言程序设计 第九章 类的特殊成员 第十一组 C++语言程序设计.
本节内容 导出表 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第8章 创建与使用图块 将一个或多个单一的实体对象整合为一个对象,这个对象就是图块。图块中的各实体可以具有各自的图层、线性、颜色等特征。在应用时,图块作为一个独立的、完整的对象进行操作,可以根据需要按一定比例和角度将图块插入到需要的位置。 2019/6/30.
WEB程序设计技术 数据库操作.
本节内容 进程 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
第四章 UNIX文件系统.
FVX1100介绍 法视特(上海)图像科技有限公司 施 俊.
创建、启动和关闭Activity 本讲大纲: 1、创建Activity 2、配置Activity 3、启动和关闭Activity
使用Fragment 本讲大纲: 1、创建Fragment 2、在Activity中添加Fragment
本节内容 this指针 视频提供:昆山爱达人信息技术有限公司 官网地址: 联系QQ: QQ交流群 : 联系电话:
《手把手教你学STM32-STemWin》 主讲人 :正点原子团队 硬件平台:正点原子STM32开发板 版权所有:广州市星翼电子科技有限公司
Presentation transcript:

操作系统实践 第19章 Linux虚拟文件系统 山东科技大学操作系统教研组

本章目标 理解虚拟文件系统在Linux系统中的作用和地位 理解虚拟文件系统的基本结构和操作 熟悉proc文件系统的结构与管理方式

第19章 Linux虚拟文件系统 实验1:访问Linux内核虚拟文件系统 实验2:加载newproc文件系统

实验1 访问Linux内核虚拟文件系统 实验目的 实验内容 熟悉VFS的基本结构 请读者验证上述程序查询该程序所在文件系统的类型 和块大小信息

实验1 访问Linux内核虚拟文件系统 原理/背景 Linux虚拟文件系统是用户进程与文件系统之间的一个软件抽 象层,是一种软件机制 英文表达的全称是Virtual Filesystem Switch,简称为VFS, 负责Linux文件系统的管理 一方面,作为所有实体文件系统的管理者,它必须兼容各种具 体的文件系统 另一方面,它用来为内核其他子系统提供文件处理的通用接口

实验1 访问Linux内核虚拟文件系统 原理/背景 VFS在Linux内核中的逻辑关系

实验1 访问Linux内核虚拟文件系统 原理/背景 VFS在Linux中的作用

实验1 访问Linux内核虚拟文件系统 原理/背景 VFS的基本数据结构 该模型只存在于物理内存中,必须使用各种对象和函数指针与每 种文件系统适配 所有文件系统的实现都必须提供与VFS定义的结构配合的例程, 以弥合两种视图之间的差异

实验1 访问Linux内核虚拟文件系统 原理/背景 VFS的基本数据结构 从结构上来说,它们可以分为文件和文件系统两类 超级块对象 索引节点对象 目录项对象 文件对象 从结构上来说,它们可以分为文件和文件系统两类

实验1 访问Linux内核虚拟文件系统 原理/背景 VFS对象的操作 注册文件系统 extern int register_filesystem(struct file_system_type *); 在Linux中,所有文件系统都保存在一个链表file_systems中,该链 表被以全局变量的形式定义在<fs/filesystems.c>文件中 这里各个文件系统的名称存储为字符串

实验1 访问Linux内核虚拟文件系统 原理/背景 VFS对象的操作 注册文件系统 新的文件系统注册到内核时,将逐元素扫描该链表,直至到达链表尾 部或找到所需的文件系统。如果在链表中找到所需文件系统,会返回 一个适当的错误信息,这是因为一个文件系统不能注册两次;否则将 描述新文件系统的对象置于链表末尾,这样就完成了文件系统的注册 Linux文件系统中,文件系统都会以struct file_system_type数据结 构来表示,即文件系统注册函数register_filesystem的形参和链表 file_systems的数据类型

实验1 访问Linux内核虚拟文件系统 原理/背景 注册文件系统 VFS对象的操作 file_system_type结构被定义在<include/linux/fs.h>文件中 struct file_system_type { const char *name; int fs_flags; struct dentry *(*mount) (struct file_system_type *, int,const char *, void *); void (*kill_sb) (struct super_block *); struct module *owner; struct file_system_type * next; struct hlist_head fs_supers; …… };

实验1 访问Linux内核虚拟文件系统 原理/背景 VFS对象的操作 注册文件系统 相应地,Linux内核也提供了注销文件系统的系统调用接口 extern int unregister_filesystem(struct file_system_type *); 注销文件系统时,首先在链表中file_systems中找到要注销的文件系 统名称,然后将其从链表中删除

实验1 访问Linux内核虚拟文件系统 原理/背景 VFS对象的操作 文件系统装载 当将一个设备装载到文件空间的一个目录时,VFS将调用相应文件系统 所实现的mount()方法 接着,被装载点的目录结构将指向新文件系统的根inode节点 在file_system_type结构体中,函数指针mount指向的函数用于从底层 存储介质读取超级块,该函数依赖具体的文件系统 超级块对象和指向超级块的指针都是在调用mount()之后创建的

实验1 访问Linux内核虚拟文件系统 原理/背景 VFS对象的操作 函数指针mount的原型定义 struct dentry *(*mount) (struct file_system_type *, int,const char *, void *); 第一个参数是以file_system_type结构体描述的文件系统 第二参数表示了使用标志 第三个参数表示装载的设备名称 第四个参数为装载属性选项,通常为ASCII码字符串

实验1 访问Linux内核虚拟文件系统 原理/背景 VFS对象的操作 文件系统装载 当某个文件系统被装载时,将有一个文件系统能够装载点数据结构 vfsmount被创建。它记录该文件系统的根目录、超级块等信息 对于每个已经装载的文件系统,在内存中都创建了一个超级块结构。 该结构保存了文件系统本身和装载点的有关信息

实验1 访问Linux内核虚拟文件系统 原理/背景 与进程相关的文件系统数据结构 Linux系统中每一个进程都有一组与其相关的打开文件 files_struct结构 用于描述进程打开文件对象 进程描述表task_struct中的files指针指向该结构,将进程与其相关 的打开文件关联 该结构被定义在<include/linux/fdtable.h>文件中

实验1 访问Linux内核虚拟文件系统 原理/背景 与进程相关的文件系统数据结构 fs_struct结构 用于描述进程文件系统信息 进程描述表task_struct中的fs指针指向该结构 该结构被定义在<include/linux/fs_struct.h>文件中

实验1 访问Linux内核虚拟文件系统 原理/背景 与进程相关的文件系统数据结构 mnt_namespace结构 主要为了进程可以共享同样的命名空间 进程描述表task_struct中的namespace指针指向该结构 该结构被定义在<fs/mount.h>文件中

实验1 访问Linux内核虚拟文件系统 原理/背景 从当前进程访问Linux内核VFS文件系统 通过以上对VFS文件系统的分析可以发现,可以从当前进程探测和 操纵VFS文件系统

实验2 加载newproc文件系统 实验目的 实验内容 掌握文件系统的加载过程 Linux系统在启动时会默认加载一个proc文件系统,用 于查看运行中的内核信息,第13章中通过proc获取的进 程信息就是在该proc文件系统基础上完成的。下面请读 者在系统启动后,利用模块新加载一个newproc文件系统

实验2 加载newproc文件系统 原理/背景 proc文件系统 proc文件系统是Linux系统的进程文件系统,是一种仅 存在于内存中的伪文件系统,通过它可以查看运行中的 内核,访问进程信息,为用户空间与内核交换数据提供 修改系统行为的接口

实验2 加载newproc文件系统 原理/背景 主要数据结构 超级块 proc文件系统中没有自身独立的超级块表示,这是由于proc使用VFS的 超级块就可以表示其信息了 proc的超级块是在proc文件系统装载时动态分配得到的 可以查阅Linux内核源码<fs/proc/root.c>文件中proc_mount函数及相 关的sget函数

实验2 加载newproc文件系统 原理/背景 主要数据结构 inode节点 proc文件系统中的proc_inode结构体内嵌了inode节点的数据结构 proc_dir_entry proc_inode结构体和proc_dir_entry结构体都被定义在 <fs/proc/internal.h>文件中 proc_dir_entry表示每一个inode节点(即proc_inode)的实例, proc_dir_entry包含了proc文件所需要的信息 每一个proc文件都有一个inode节点

实验2 加载newproc文件系统 原理/背景 主要数据结构 目录项和文件对象 但是从proc_dir_entry结构体的定义发现,proc文件系统包含有文件 对象的相关操作,即proc_fops

实验2 加载newproc文件系统 原理/背景 proc文件系统的操作 proc文件系统使用全局变量proc_fs_type表示其数据类型 在proc文件系统的初始化函数proc_root_init中,通过调用 register_filesystem(&proc_fs_type)向内核注册proc文件系统 类型

实验2 加载newproc文件系统 原理/背景 proc文件系统的操作 proc文件系统在命名空间结构体pid_namespace中定义了指向 vfsmount实例的指针proc_mnt 通过调用kern_mount_data(&proc_fs_type, ns)进行初始化,这 里的ns为命名空间的实例,并且proc_mnt有一个成员包含了proc 文件系统超级块的信息(proc_mnt.mnt_sb) proc_mnt也包含了一个dentry实例proc_mnt.mnt_root proc文件系统通过实例化vfsmount方便了VFS对proc文件的管理

实验2 加载newproc文件系统 原理/背景 proc文件系统的操作 相对于其他逻辑文件系统的具体文件组织形式(比如ext4文件系 统的inode),proc文件系统也有自己的组织结构,那就是 proc_dir_entry结构 所有属于proc文件系统的文件,都对应一个proc_dir_entry结构, 并且在VFS需要读取proc文件的时候,把这个结构和VFS的inode建 立链接(即由inode->u.generic_ip指向该prc_dir_entry结构) proc文件系统实现了一套对proc_dir_entry结构的管理

第19章 Linux虚拟文件系统 课后练习 编写一个名为get_fat_boot的内核函数,通过系统调 用或动态模块调用它可以提取和显示出FAT文件系统盘 的引导扇区信息。这些信息的格式定义在内核文件 <include/uapi/linux/msdos_fs.h>的 fat_boot_sector结构体中

第19章 Linux虚拟文件系统 课后练习 在验证实验exp1程序的基础上,获取程序所在文件系 统的装载点 请在新加载的proc文件系统基础上,挑选第13章中部 分proc相关实验重新实现