VFS-目录项对象(dentry)

  • 每个文件除了有一个索引节点 inode 数据结构外,还有一个目录项 dentry 数据结构
  • dentry 结构代表的是逻辑意义上的文件,描述的是文件逻辑上的属性,目录项对象在磁盘上并没有对应的映像

  • inode 结构代表的是物理意义上的文件,记录的是物理上的属性 对于一个具体的文件,系统 其 inode 结构在磁盘上就有对应的映像

  • 一个索引节点对象可能对应多个目录项对象

VFS-文件对象(file)

  • 进程是通过文件描述符来访问文件的
  By convention, UNIX System shells associate file descriptor 0 with the standard
input
of a process, file descriptor 1 with the standard output, and file descriptor 2 with
the standard error
. This convention is used by the shells and many applications; it is
not a feature of the UNIX kernel. Nevertheless, many applications would break if these
associations weren’t followed.
  Although their values are standardized by POSIX.1, the magic numbers 0, 1, and
should be replaced in POSIX-compliant applications with the symbolic constants
STDIN_FILENO, STDOUT_FILENO, and STDERR_FILENO to improve readability.
These constants are defined in the <unistd.h> header.
  File descriptors range from 0 through OPEN_MAX−1. (Recall Figure 2.11.) Early
historical implementations of the UNIX System had an upper limit of 19, allowing a
maximum of 20 open files per process, but many systems subsequently increased this
limit to 63.
  • Linux 中专门用了一个 file 文件对象来保存打开文件的文件位置,这个对象称为打开的文件描述 open file description
  • 文件描述符是用来描述打开的文件的 。 每个进程用一个 files_struct 结构来记录文件描述符的使用情况,这个 files_struct 结构称为用户打开文件表, 它是进程的私有数据
  • file 结构中主要保存了文件位置,还把指向该文件索引节点的指针也放在其中 。file 结构形成一个双链表,称为系统打开文件表

   

   

  • 超级块是对一个文件系统的描述

  查看超级块的命令:DUMPE2FS  (dumpe2fs - dump ext2/ext3/ext4 filesystem information)

DUMPE2FS(8)                           System Manager's Manual                           DUMPE2FS(8)

NAME
dumpe2fs - dump ext2/ext3/ext4 filesystem information SYNOPSIS
dumpe2fs [ -bfghixV ] [ -o superblock=superblock ] [ -o blocksize=blocksize ] device DESCRIPTION
dumpe2fs prints the super block and blocks group information for the filesystem present on
device. Note: When used with a mounted filesystem, the printed information may be old or inconsis‐
tent. OPTIONS
-b print the blocks which are reserved as bad in the filesystem. -o superblock=superblock
use the block superblock when examining the filesystem. This option is not usually
needed except by a filesystem wizard who is examining the remains of a very badly
corrupted filesystem. -o blocksize=blocksize
use blocks of blocksize bytes when examining the filesystem. This option is not usu‐
ally needed except by a filesystem wizard who is examining the remains of a very
badly corrupted filesystem.
##################################################################################################
至于DUMPE2FS(8), 8是什么意思呢?
The table below shows the section numbers of the manual followed by the types of pages they
contain. 1 Executable programs or shell commands
2 System calls (functions provided by the kernel)
3 Library calls (functions within program libraries)
4 Special files (usually found in /dev)
5 File formats and conventions eg /etc/passwd
6 Games
7 Miscellaneous (including macro packages and conventions), e.g. man(7), groff(7)
8 System administration commands (usually only for root)(系统管理命令)
9 Kernel routines [Non standard]
~$ df -Th	# 只可以查看已经挂载的分区和文件系统类型。
Filesystem Type Size Used Avail Use% Mounted on
udev devtmpfs 888M 0 888M 0% /dev
tmpfs tmpfs 184M 6.0M 178M 4% /run
/dev/vda1 ext4 50G 4.5G 43G 10% /
tmpfs tmpfs 917M 24K 917M 1% /dev/shm
tmpfs tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs tmpfs 917M 0 917M 0% /sys/fs/cgroup
tmpfs tmpfs 184M 0 184M 0% /run/user/500
#dumpe2fs /dev/loop0 	【-h不打印Group信息】

dumpe2fs 1.42.9 (网上示例仅供参照)
Filesystem volume name: <none>
Last mounted on: <not available> 最后挂载目录
Filesystem UUID: cef5f647-058f-49bd-88c6-baf3ce2338a0
Filesystem magic number: 0xEF53 ext4文件系统标志
Filesystem revision #: 1 (dynamic)
Filesystem features: has_journal ext_attr resize_inode dir_index filetype needs_recovery extent 64bit flex_bg sparse_super huge_file uninit_bg dir_nlink extra_isize
Filesystem flags: signed_directory_hash
Default mount options: user_xattr acl
Filesystem state: clean
Errors behavior: Continue
Filesystem OS type: Linux
Inode count: 25688 文件系统inode号总数,由系统决定但可以指定比例
Block count: 102400 文件系统block总数,==容量/默认的1KB
Reserved block count: 5120 保留的block总数,默认比例为5%
Free blocks: 93504 空闲的block总数,
Free inodes: 25677 空闲的inode总数
First block: 1 第一个block号
Block size: 1024 block大小
Fragment size: 1024
Group descriptor size: 64 块组描述大小
Reserved GDT blocks: 256 预留块组描述block数量
Blocks per group: 8192 块组中block数量
Fragments per group: 8192
Inodes per group: 1976 块组中inode数量==25688/13
Inode blocks per group: 247 块组中inode占用block总数
Flex block group size: 16 inode表大小?
Filesystem created: Tue Nov 27 13:26:27 2018
Last mount time: Tue Nov 27 13:28:39 2018
Last write time: Tue Nov 27 13:28:39 2018
Mount count: 1 挂载次数
Maximum mount count: -1
Last checked: Tue Nov 27 13:26:27 2018
Check interval: 0 (<none>)
Lifetime writes: 4447 kB
Reserved blocks uid: 0 (user root)
Reserved blocks gid: 0 (group root)
First inode: 11 文件系统的第一个inode号
Inode size: 128 inode大小
Journal inode: 8 日志文件inode号
Default directory hash: half_md4
Directory Hash Seed: 45d2f9d4-714a-4ccf-9c9d-308d12552317
Journal backup: inode blocks
Journal features: journal_64bit
日志大小: 4096k
Journal length: 4096
Journal sequence: 0x00000002
Journal start: 1 Group 0: (Blocks 1-8192) [ITABLE_ZEROED]
Checksum 0x0229, unused inodes 1965
主 superblock at 1, Group descriptors at 2-2
保留的GDT块位于 3-258
Block bitmap at 259 (+258), Inode bitmap at 275 (+274)
Inode表位于 291-537 (+290)
4683 free blocks, 1965 free inodes, 2 directories, 1965个未使用的inodes
可用块数: 3510-8192
可用inode数: 12-1976
  • 索引节点是对一个文件物理属性的描述

     索引节点(Inode)查看命令: stat  <file>

  • 目录项是对一个文件逻辑属性的描述
  • 一个进程所处的位置是由 fs_struct 来描述的,而一个进程 或用户 打开的文件是由
    files_struct 来描述的,而整个系统所打开的文件是由 file 结构来描述

  • VFS-数据结构之间的关系

    

  文件系统的注册和注销

  • 当内核被编译时 就已经确定了可以支持哪些文件系统,这些文件系统在系统引导时在 VFS 中进行注册 。
  • VFS 的初始化函数用来向 VFS 注册,即填写文件注册表 file_system_type 数据结构
  • 注册调用 register_filesystem 函数
  • 注销即删除一个 file_system_type 结构,需调用 unregister_filesystem() 函数

 文件系统的安装

  • 安装一个文件系统实际上是安装一个物理设备
  • 自己( 一般是超级用户 )安装文件系统时 需要指定三种信息:文件系统的名称包含
    文件系统的物理块设备文件系统在已有文件系统中的安装点

  • mount  -t  iso9660  /dev/hdc  /mnt/cdrom 其中 iso9660 是光驱文件系统的名称,
     /dev/hdc 是包含文件系统的物理块设备 ,/mnt/cdrom 就是将要安装到的目录,即安装点 。

  • 在用户程序中要安装一个文件系统则可以调用 mount 系统调用 。 安装过程主要工作
    是创建安装点对象,将其挂接到根文件系统的指定安装点下,然后初始化超级块对象,从而
    获得文件系统基本信息和相关的操作 。

 文件系统的安装

  • 如果文件系统中的文件当前正在使用 该文件系统是不能被卸载的
  • 否则,查看对应的 VFS 超级块,如果该文件系统的 VFS 超级块标志为 脏,则必须将超级块信息写回磁盘

  • 之后,对应的 VFS 超级块被释放,vfsmount 数据结构将从 vfsmntlist 链表中断开并被释放

  • 具体的实现代码为 fs/super.c 中的 sys_umount 函数

Linux文件系统概述二的更多相关文章

  1. 宿主机Windows访问虚拟机Linux文件(二)

    上一篇文章中详细讲述FTP服务(基于文件传输协议的服务),本文则介绍另一种能够实现此功能Telnet(Telecommunications network 远程登陆)服务.本文介绍的telnet我常用 ...

  2. Linux文件系统概述

    Unix文件是以字节序列组成的信息载体(container),内核不解释文件的内容. Linux文件系统中的文件是数据的集合,文件系统不仅包含着文件中的数据而且还有系统的结构,所有Linux用户和程序 ...

  3. Linux 文件缓存 (二)

    close系统调用入口1. 首先来到系统调用入口,主要使用__close_fd进行了具体的处理过程,并没有耗时操作.(current->files表示进程当前打开文件表信息,fd为需要关闭的文件 ...

  4. 自学Linux Shell8.1-linux文件系统概述及操作

    点击返回 自学Linux命令行与Shell脚本之路 8.1-linux文件系统概述及操作 1. linux支持的文件系统 Windows常用的分区格式有三种,分别是FAT16.FAT32.NTFS格式 ...

  5. 运维系列之二 Linux文件种类和扩展名

    一.文件种类 1.普通文件 用ls查看文件属性时,显示的是[-] 2.目录文件(directory) 文件属性第一个为[d] 3.连接文件(link) 类似于win下的快捷方式,文件第一个属性为[l] ...

  6. 十二、文件和目录——Linux文件系统结构

    12.1 Linux文件系统结构 12.1.1 文件操作基本元素 文件操作相关的最基本元素是:目录结构,索引节点和文件的数据本身 目录结构(目录项) 索引节点(i 节点) 文件的数据 12.1.2 文 ...

  7. Linux系统运维笔记(二),Linux文件编辑命令

    Linux系统运维笔记 Linux文件编辑命令 首先我们使用命令 vi filename 打开一个文件,这个时候进入到的是命令模式 接下来我们按i,然后键盘随便输入写内容. 然后按ESC重新进入到命令 ...

  8. Linux实战教学笔记08:Linux 文件的属性(上半部分)

    第八节 Linux 文件的属性(上半部分) 标签(空格分隔):Linux实战教学笔记 第1章 Linux中的文件 1.1 文件属性概述(ls -lhi) linux里一切皆文件 Linux系统中的文件 ...

  9. Linux设备管理(二)_从cdev_add说起

    我在Linux字符设备驱动框架一文中已经简单的介绍了字符设备驱动的基本的编程框架,这里我们来探讨一下Linux内核(以4.8.5内核为例)是怎么管理字符设备的,即当我们获得了设备号,分配了cdev结构 ...

随机推荐

  1. 483. Smallest Good Base

    For an integer n, we call k>=2 a good base of n, if all digits of n base k are 1. Now given a str ...

  2. unity 引入 android第三方sdk

    unity中调用java代码中介绍了unity调用android java代码的一些基础.引入android开发第三方sdk的操作跟调用java代码的操作相似,只是多了一步引入第三方jar. unit ...

  3. 51nod1770(xjb)

    题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1770 题意:中文题诶- 思路:随便写几个例子不难发现乘机中间部 ...

  4. 【渗透测试】如何使用burpsuite对特殊密码进行爆破

    爆破是渗透测试中必不可少的一部分,对于没有太大价值可利用的漏洞或是业务只有一个登陆页面时,爆破更是我们的最合适的选择.那么在爆破时,抛去目标系统对爆破频率的限制,如果遇到较为复杂的密码,该如何顺利进行 ...

  5. Windows 2008 R2 如何安装.net framework 3.5

    服务器中安装sql server2012 ,  安装过程中提示没有此 “ Framework 3.5.1 功能 ” , 是不是很尴尬 于是简单记录安装 Framework 3.5.1 功能的步骤 一. ...

  6. ScrollTo:实现平滑滚动到页面指定位置

    ScrollTo:实现平滑滚动到页面指定位置 ScrollTo是一款基于jQuery的滚动插件,当点击页面的链接时,可以平滑地滚动到页面指定的位置.适用在一些页面内容比较多,页面长度有好几屏的场合,本 ...

  7. Django (八) 中间件&验证码&富文本&缓存

    中间件&验证码&富文本&缓存 1. 中间件&AOP   中间件:是一个轻量级的,底层的插件,可以介入Django的请求和响应过程(面向切面编程) ​ 中间件的本质就是一 ...

  8. 2017浙江工业大学-校赛决赛 小M和天平

    Description 小M想知道某件物品的重量,但是摆在他面前的只有一个天平(没有游标)和一堆石子,石子可以放左边也可以放右边.他现在知道每个石子的重量.问能不能根据上述条件,能不能测出所问的重量. ...

  9. struts2的@Result annotation 如何添加params,并且在页面取值

    http://www.bubuko.com/infodetail-2492575.html .............................................. 标签:lai  ...

  10. HTML文档设置标记

    格式标记 1.<br> 强制换行标记,让后面的文字.图片.表格等,显示在下一行.单标记 2.<p> 换段落标记,换段落是由于多个空格和回车在HTML中会被等效为一个空格,所以H ...