系统IO——Linux下一切皆文件

目录

一、文件描述符

1.文件描述符的地位

2.文件描述符的本质:数组索引

3.标准文件描述符

二、VFS虚拟文件系统

1.概述

2.VFS结构

三、Linux inode

1.概述

2.内存中的inode结构

3.磁盘上的inode:

4.inode是什么?

5.磁盘上inode的大小

6.文件查找


一、文件描述符

1.文件描述符的地位

对于Linux内核而言,所有打开的文件和I/O资源都是通过文件描述符引用的。这是Unix/Linux系统设计的核心抽象之一,它统一了各种I/O操作的接口

2.文件描述符的本质:数组索引

在Linux内核中,每一个进程维护着一张文件描述符表,它可以当成一个数组,而这个数组的每个元素都指向一个struct file 结构体,文件描述符就是这个数组的索引值。

为什么文件描述符是一个非负的整数?

答: 数组的索引必须是大于等于0的整数

3.标准文件描述符

一个进程的文件描述符从0开始,并且0、1、2分别代表以下数据:

文件描述符宏定义默认绑定设备典型用途
0STDIN_FILENO键盘程序输入
1STDOUT_FILENO显示器程序正常输出
2STDERR_FILENO显示器错误信息和诊断输出

二、VFS虚拟文件系统

1.概述

VFS(Virtual Filesystem Swith)称为虚拟文件系统或虚拟文件系统转换,是一个内核软件层,在具体的文件系统之上抽象的一层,用来处理与Posix文件系统相关的所有调用,表现为能够给各种文件系统提供一个通用的接口,使上层的应用程序能够使用通用的接口访问不同文件系统,同时也为不同文件系统的通信提供了媒介。

VFS就是对各种文件系统的一个抽象,它为各种文件系统提供了一个通用接口

2.VFS结构

三、Linux inode

1.概述

我们把内存中的inode结构称为VFS inode,而文件系统以EXT2为代表,把Ext2 inode作为磁盘上的inode代表。

2.内存中的inode结构

VFS inode包含文件访问权限、属主、组、大小、生成时间、访问时间、最后修改时间等信息。它是linux管理文件系统的最基本单位,也是文件系统连接任何子目录、文件的桥梁。inode结构中的静态信息取自物理设备上的文件系统,由文件系统指定的函数填写,它只存在于内存中,可以通过inode缓存访问。虽然每个文件都有相应的inode结点,但是只有在需要的时候系统才会在内存中为其建立相应的inode数据结构,建立的inode结构将形成一个链表,我们可以通过遍历这个链表去得到我们需要的文件结点.VFS 也为已分配的inode构造缓存和hash table,以提高系统性能。inode结构中的struct inode_operations *top为我们提供了一个inode操作列表,通过这个列表提供的函数我们可以对VFS inode结点进行各种操作。每个inode结构都有一个i结点号i_ino,在同一个文件系统中每个i结点号是唯一的。

3.磁盘上的inode:

EXT2通过使用inode来定义文件系统的结构以及描述系统中每个文件的管理信息,每个文件都有一个inode且只有一个,即使文件中没有数据,其索引结点也是存在的。每个文件用一个单独的Ext2 inode结构来描述,而且每一个inode都有唯一的标志号。Ext2 inode为内存中的inode结构提供了文件的基本信息,随着内存中inode结构的变化,系统也将更新Ext2 inode中相应的内容。Ext2 inode对应的是Ext2 inode结构。

4.inode是什么?

理解inode,要从文件储存说起。

文件储存在硬盘上,硬盘的最小存储单位叫做“扇区”(Sector)。每个扇区储存512字节(相当于0.5KB)。

操作系统读取硬盘的时候,不会一个个扇区地读取,这样效率太低,而是一次性连续读取多个扇区,即一次性读取一个“块”(block)。这种由多个扇区组成的“块”,是文件存取的最小单位。“块”的大小,最常见的是4KB,即连续八个sector组成一个block。

文件数据都储存在“块”中,那么很显然,我们还必须找到一个地方储存文件的元信息,比如文件的创建者、文件的创建日期、文件的大小等等。这种储存文件元信息的区域就叫做inode,中文译名为“索引节点”。

每一个文件都有对应的inode,里面包含了与该文件有关的一些信息。

5.磁盘上inode的大小

inode也会消耗硬盘空间,所以硬盘格式化的时候,操作系统自动将硬盘分成两个区域。一个是数据区,存放文件数据;另一个是inode区(inode table),存放inode所包含的信息。

每个inode节点的大小,一般是128字节或256字节。inode节点的总数,在格式化时就给定,一般是每1KB或每2KB就设置一个inode。假定在一块16B的硬盘中,每个inode节点的大小为128字节,每1KB就设置一个inode,那么inode table的大小就会达到128MB,占整块硬盘的12.8%。

6.文件查找

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值