2022年阙雪松Linux系统调用分析[ .pdf
《2022年阙雪松Linux系统调用分析[ .pdf》由会员分享,可在线阅读,更多相关《2022年阙雪松Linux系统调用分析[ .pdf(18页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、Linux 系统调用分析sys_sysfs sys_creat sys_llseek sys_flock 9811552 周 天9811553 郏方贵9811554 阙雪松9811562 冯利民名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 1 页,共 18 页 - - - - - - - - - 目录目录. 2Linux 系统调用分析 . 3第一章 Linux文件系统概述 . 3一、VFS 文件系统 . 3二、安装的文件系统的结构 . 2三、打开文件的有关数据结构 . 4第二章sy
2、s_sysfs 系统调用 . 5一、sysfs 系统调用综述 . 4二、sysfs系统调用涉及的数据结构和函数说明: . 7第三章sys_creat系统调用分析 . 8一、sys_creat系统调用综述 . 8二、创建文件的操作过程 . 8三、sys_open 所涉及的数据结构 . 9四、相关函数说明 . 10 附录:源代码致谢. 18 名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 2 页,共 18 页 - - - - - - - - - Linux 系统调用分析摘要:本文是对 L
3、inux 的两个文件系统调用: sys_sysfs 、sys_creat 、进行了好的分析。我们一开始是对 Linux 文件系统做一个简要的介绍, 再对这二个文件系统调用的实现进行分析。Linux 一个最大的特点是它支持多种文件系统,如:EXT 、EXT2 、XIA、MINIX、UMSDOS、MSDOS、VFAT 、PROC 、SMB 、NCP 、ISO9660 、SYSV 、HPFS 、SFFS和 UFS等等,甚至还支持 NFS 。它之所以能支持这么多的文件系统,是由于它在具体的文件系统上增加了一层抽象层:VFS文件系统。 VFS文件系统将独立于具体文件系统的数据和操作集中在自身之中, 并通
4、过数据结构中的UNION 类型和函数指针将具体的文件系统包容进来。 这种分层的概念, 使得 Linux 不仅可以有良好的兼容性,而且也使它有较大的可扩充性。Linux 的文件系统不但可以建立在多种具体的文件系统之上,它还具有较高的性能。这是由它丰富而复杂的Cache机制来保证的。 这里的 Cache机制指的是文件系统中涉及的各种缓冲区。Linux 的文件系统中的缓冲系统有:Inode 缓冲(Inode Cache) 、目录缓冲( Directory Cache) 、Buffer 缓冲( Buffer Cache ,Linux 系统中最为复杂的缓冲之一)和页面缓冲(Page Cache ,在存储
5、管理模块中) ;另外还有各种小型的缓冲系统。这多种缓冲系统各司其职,又构成层次体系,如 Buffer缓冲在文件系统的最底层,负责与设备交互,而页面缓冲就处于Buffer缓冲之上。这种复杂的缓冲层次体系有效地弥补了文件系统中内存与外存之间的速度差异,提高了文件系统的性能。下面,本文先将整个文件系统的概况和一些重要的概念、数据结构介绍一下,然后再讨论文件读写操作的有关内容。第一章 Linux文件系统概述Linux 的文件系统分为两个层次:VFS文件系统和某个具体的文件系统,如典型的 EXT2 。一、 VFS文件系统VFS 文件系统是建立在具体文件系统上的一个抽象层次。它必须管理安装(mount)在
6、 Linux 系统中的每一个具体的文件系统;为此,它维护着众多的数据结构,这些数据结构描述了整个文件系统和实际的安装上的文件系统。VFS采用的概念同 UNIX文件系统相似,即用超级块(SuperBlock )和 Inode节点来描述和管理文件系统。 超级块是整个文件系统的管理数据,而 Inode 则描名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 3 页,共 18 页 - - - - - - - - - 2 述了单个文件或目录。图 1. 上面显示了 Linux 文件系统的组成结构,
7、VFS处于最上层,Buffer Cache处于最下层,负责与设备的交互。Inode Cache 和 Directory Cache为整个文件系统提供服务。二、安装的文件系统的结构下图显示了一个文件系统安装后,它的超级块在 VFS文件系统中的位置和相关的数据结构:UMSDOSMINIXEXT2VFSBuffersCacheDiskDriversInodeCacheDirectoryCache名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 4 页,共 18 页 - - - - - - -
8、 - - 3 图 2 文件安装数据结构上图中涉及到三个表:vfsmount 表。这个表是一个链表, 它登记了 VFS文件系统中当前安装的文件系统。super_block表。这个表是一个数组,它存放了系统当前安装的所有文件系统的超级块。file_system_type表。这也是一个链表, 它登记了 VFS文件系统中当前安装的文件系统的类型信息。vfsmount 表中节点的 mnt_sb指向 super_block表中的元素。而 super_block表中元素的 s_type 指向 File_system_type表中的节点。三、打开文件的有关数据结构一个文件在打开以后,在系统中就要为它建立起相应
9、的数据结构。主要有两个:一是在当前进程的打开文件描述符中为它分配一项,二是分配一个文件结构(file struct ,即 FILE 结构) ,并将文件描述符与该结构对应起来。FILE 结构再指向该文件的 inode 。这样的结构,包括在文件描述符和inode 之间加一层 FILE 结构,主要是为了实现多种方式的共享。在FILE 结构中,有文件读写的指针和文件操作的函数m nt_ devm nt_ dev na m em nt_ flagsm nt_ dirnamem nt_ s b.nex tvfsmountvfsmntlists _de vs _block s izes _fla gss _
10、ty pes _c ov ere ds _m ountedsuper_blockre ad_ s upe rnam enex tre quires _de v.nex tvfsmnttail.nex tfile_system_typeInodeInode名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 5 页,共 18 页 - - - - - - - - - 4 指针等信息。文件共享有两种方式:一是共享inode 节点,是多个 FILE 结构共享一个 inode ;二是共享 FILE
11、结构,是多个文件描述符共享一个FILE 结构,实际上是多个进程(必须是父子进程) 共享一个打开的文件, 尤其是它的读写指针。前一种共享实际是通过文件的链接(link )来实现的, 两个无亲缘关系的进程打开同一个文件也属于这种共享。 后一种共享只有在父子进程之间才会发生。当执行 fork()系统调用后产生一个子进程,子进程将父进程的文件描述符复制到子进程中,这样,子进程和父进程的打开文件表是一样的,都指向同一个FILE 结构,共享其文件读写指针。 (关于文件打开过程的有关内容,参见李明的报告)。下图显示了打开文件的数据结构之间的联系。图 5 打开文件的数据结构之间的关系第二章 sys_sysfs
12、 系统调用一、 sysfs 系统调用综述文件:fs/super.c count.FD0.f_count=2count.FD0f_inodef_op.f_nextf_prevf_count=1f_inodef_op.f_nextf_previ_count=2.count.FD.f_nextf_prev.f_nextf_prevfile_structFILEInodeparentprocesschildprocessotherprocess名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第
13、6 页,共 18 页 - - - - - - - - - 5 调用形式: int sys_fs(int option, ,)此系统调用仅仅用于UNIX System V,它读取文件系统列表,返回系统所注册的文件系统的信息。 系统调用根据可变参数的返回特定的信息。它的功能有下列三种形式:1返回可变参数中指定的描述的文件系统在已注册文件系统列表中的序号。它的形式是:int sysfs(int option, char * name) 此时的第一个参数option=1 。2第二种形式有三个参数,可变参数为序号index 和用于存储对应这个序号的文件系统的名称的字符缓冲区。它的形式为:int sysf
14、s(int option, int index, char * name) 此时的第一个参数option=2 。3返回操作系统中注册的文件系统的个数。此时的第一个参数option=3 。二、 sysfs系统调用涉及的数据结构和函数说明:1.file_system_type数据结构文件系统类型的注册和注销反映在以file_systems(fs/super.c)为链头,file_system_type为节点的单向链表中。 注册表的每一个 file_system_type节点描述一个已注册的文件系统类型。static struct file_system_type *file_systems = (
15、struct file_system_type *) NULL; struct file_system_type struct super_block *(*read_super)(struct super_block *,void *,int); /* read_super所指的函数用于读出该文件系统在外存的超级块 */ const char *name; /* 文件系统的类型名,如ext2 */ int requires_dev; /* 支持文件系统的设备, proc 文件系统不需要任何设备 */ struct file_system_type * next; /* 文件系统类型链表的后续
16、指针 */ ; 2. fs_index(const char* _name) 此函数返回 _name所指的字符串所代表的文件系统在操作系统所注册文件系统列表中序号。名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 7 页,共 18 页 - - - - - - - - - 6 源代码: /from super.c static int fs_index(const char * _name) struct file_system_type * tmp; char * name; int
17、err, index; / 将所查询的文件系统的名称拷贝到核心态内存空间中( 防止用户态内存空间中的数据/ 换出)。err = getname(_name, &name); if (err) return err; index = 0; / 遍历已注册的文件系统列表file_systems, 找到与所查找的文件系统同名的文件系统/ 若操作成功返回其序号for (tmp = file_systems ; tmp ; tmp = tmp-next) if (strcmp(tmp-name, name) = 0) / 操作成功,释放所分配的核心态内存putname(name); / 返回这个文件系统
18、在已注册的文件系统中的序号return index; index+; / 操作不成功,释放所分配的核心态内存putname(name); / 返回出错信息return -EINVAL; 3. fs_name(int index, char* buf) 此函数输入文件系统在操作系统所注册文件系统列表中序号,返回这个序号对应的文件系统的名字,并存入字符串缓冲区buf 。源代码:static int fs_name(unsigned int index, char * buf) struct file_system_type * tmp; int err, len; tmp = file_syste
19、ms; / 遍历文件系统列表,找到第index 个文件系统名师资料总结 - - -精品资料欢迎下载 - - - - - - - - - - - - - - - - - - 名师精心整理 - - - - - - - 第 8 页,共 18 页 - - - - - - - - - 7 while (tmp & index 0) tmp = tmp-next; index-; / 如果找不到,返回错误信息if (!tmp) return -EINVAL; len = strlen(tmp-name) + 1; /文件系统的名称的长度/ 以 buf 开头的 len 长度的内存空间是否可写?err = v
20、erify_area(VERIFY_WRITE, buf, len); if (err) return err; / 拷贝文件系统的名称memcpy_tofs(buf, tmp-name, len); return 0; 4. fs_maxindex() 此函数返回操作系统中所注册的文件系统的个数。源代码:static int fs_maxindex(void) struct file_system_type * tmp; int index; index = 0; / 遍历已注册的文件系统列表,返回已注册的文件系统的总数for (tmp = file_systems ; tmp ; tmp
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 2022年阙雪松Linux系统调用分析 2022 雪松 Linux 系统 调用 分析
限制150内