Linux系统调用

来源:互联网 发布:mac jdk dmg安装教程 编辑:程序博客网 时间:2024/05/27 09:47

系统调用规定用户进程进入内核空间的具体位置。进行系统调用时,程序运行空间需要从用户空间进入内核空间,处理完后再返回到用户空间。

 

虚拟文件系统(VFS)

Linux的文件系统由两层结构构建。第一层是虚拟文件系统(VFS),第二层是各种不同的具体的文件系统。

 

VFS就是把各种具体的文件系统的公共部分抽取出来,形成一个抽象层,是系统内核的一部分。它位于用户程序和具体的文件系统之间。它对用户程序提供了标准的文件系统调用接口,对具体的文件系统,它通过一系列的对不同文件系统公用的函数指针来实际调用具体的文件系统函数,完成实际的各有差异的操作。任何使用文件系统的程序必须经过这层接口来使用它。通过这样的方式,VFS就对用户屏蔽了底层文件系统的实现细节和差异。

 

VFS不仅可以对具体文件系统的数据结构进行抽象,以一种统一的数据结构进行管理,并且还可以接受用户层的系统调用,例如:write、open、stat、link等。此外,它还支持多种文件系统之间的相互访问,接受内核其他子系统的操作请求,例如内存管理和进程调度。

 

通用文件模型

VFS文件系统所引入的主要思想在于引入了一个通用的文件模型(common file model),这个模型的核心是4个对象类型,即超级块对象(superblock object),索引节点对象(inode object)、文件对象(file object)和目录项对象(directory object),它们都是内核空间中的数据结构,是VFS的核心,不管各种文件系统的具体格式是什么样的,它们的数据结构在内存中的映像都要和VFS通用文件模型相交互。

 

通用文件模型由下列对象组成。

超级块:super block,存放文件系统中已安装文件系统的有关信息,对于磁盘的文件系统,这类对象对应存放磁盘上的文件系统控制块,也就是说每个文件系统对应一个超级块对象。

索引节点:inode,对于具体文件系统,这类对象对应于存放在磁盘上的文件控制块(FCB),也就是说,每个文件对应一个索引节点,每一个索引节点又有一个索引节点号,这个号用于惟一标识某个文件系统地指定文件。

目录项:dentry,存放目录项与对应文件链接的信息。

文件:file,存放打开文件与进程之间进行交互的有关信息,进程与文件系统的桥梁。

 

 

 

1.超级块对象

超级块对象是用来描述整个文件系统的信息。VFS超级块是由各种具体的文件系统在安装时建立的,只存在于内存中。

(1)超级块对象结构体

超级块对象由super_block结构体表示,定义在文件<linux/fs.h>中。

超级块对象由alloc_super()函数创建并初始化。在文件系统安装时,内核会调用该函数以便从磁盘读取文件系统超级块,并且将其信息填充到内存的超级块对象中。

 

(2)超级块对象操作

超级块对象中有一个重要的域就是s_op,它指向超级块的操作函数表。超级块操作函数由super_operation结构体表示,定义在<linux/fs.h>中。

 

2.索引节点对象

(1)索引节点对象结构体

文件系统处理文件所需要的信息都放在索引节点的数据结构中,文件名可以随时更改,但是索引节点是惟一的,一般索引节点有3种类型。

磁盘文件:狭义的磁盘上存储的文件、数据文件、进程文件。

设备文件:同样有组织管理的信息、目录项信息,不一定有数据块(文件内容),主要的是文件操作。

特殊节点:一般和存储介质没有关系,它们可能是由CPU在内存中动态生成的。

索引节点对象由inode结构体表示,定义在文件<linux/fs.h>中。

 

每一个inode有一个索引节点号i_ino。在同一个文件系统中,每一个索引节点号是惟一的。此外,每一个文件都有个文件主,它是指这个文件的创造者,是可以改变的。每一个用户都有一个用户组,因此inode结构中就有相应的i_uid,i_gid,用以指明文件组的身份,也用于权限管理。

 

inode中还有两个设备号i_dev和i_rdev,分别代表主设备号和从设备号,比如系统的第一个硬盘的第一个分区。每当一个文件被访问时,系统都要在这个文件的inode中记下时间标记以及和时间相关的几个域。

索引节点的管理:每一个索引节点必然位于下列循环双向链表的某一个中。

没有使用索引节点的链表:变量inode_unused来表示,这个链表用作内存高速缓存。

使用索引节点的链表

脏(被修改过的)索引节点列表:Hash表。

 

(2)索引节点对象操作

与超级块对象类似,所以节点对象中也有成员"i_op"用于指向索引节点的操作。索引节点操作是由inode_operations定义的,这里的函数指针由文件系统实现。

 

3.目录项对象

每个dentry代表路径中的一个特定部分。dentry结构描述的是逻辑意义上的文件,描述其逻辑意义上的属性,因此目录项对象在磁盘上并没有对应的映像。

 

4.文件对象

(1)文件对象结构体

文件对象是由file结构体表示。

(2)文件对象操作(file_operation)

 

 

 

原创粉丝点击