Linux VFS的主要的数据结构】的更多相关文章

先说明一下,linux内核中各种数据结构也不停的在变,所以不同版本的内核各个数据结构的定义可能会差别很大,这一组关于linux 文件系统的文章中的代码都摘自linux-2.6.34.1. VFS依赖于数据结构来保存其对于一个文件系统的一般表示. 超级块结构:存放已安装的文件系统的相关信息 索引节点结构:对于文件信息的完全的描述 文件结构:存放一个被进程打开的文件的相关信息 目录项结构:存放有关路径名及路径名所指向的文件的信息 组成VFS的结构与一些操作相关联,这些操作可应用于有这些结构所表示的对…
Linux VFS机制简析(二) 接上一篇Linux VFS机制简析(一),本篇继续介绍有关Address space和address operations.file和file operations.dentry和dentry operations和dentry cache API. Address Space Address Space用于管理page caches里的page页,它关联某个文件的所有pages,并管理文件的内容到进程地址空间的映射.它还提供了内存管理接口(page回收等).根…
Linux VFS机制简析(一) 本文主要基于Linux内核文档,简单分析Linux VFS机制,以期对编写新的内核文件系统(通常是给分布式文件系统编写内核客户端)的场景有所帮助. 个人渊源 切入正文之前先扯点别的,舰队我在04年刚接触Linux时就深入分析了VFS,当时刚毕业入职一家做NAS存储的公司,需要对VFS.block device.MD等内核模块深入了解.时隔10几年之后的今天,因给一个分布式文件系统做内核客户端,重拾VFS发现一切还是熟悉的味道.这十几年过去了,内核版本从2.6到4…
<strong>简单归纳:fd只是一个整数,在open时产生.起到一个索引的作用,进程通过PCB中的文件描述符表找到该fd所指向的文件指针filp.</strong> 文件描述符的操作(如: open)返回的是一个文件描述符,内核会在每个进程空间中维护一个文件描述符表, 所有打开的文件都将通过此表中的文件描述符来引用;而流(如: fopen)返回的是一个FILE结构指针, FILE结构是包含有文件描述符的,FILE结构函数可以看作是对fd直接操作的系统调用的封装, 它的优点是带有I…
先说明一下,linux内核中各种数据结构也不停的在变,所以不同版本的内核各个数据结构的定义可能会差别很大,这一组关于linux 文件系统的文章中的代码都摘自linux-2.6.34.1. VFS依赖于数据结构来保存其对于一个文件系统的一般表示. 超级块结构:存放已安装的文件系统的相关信息 索引节点结构:对于文件信息的完全的描述 文件结构:存放一个被进程打开的文件的相关信息 目录项结构:存放有关路径名及路径名所指向的文件的信息 组成VFS的结构与一些操作相关联,这些操作可应用于有这些结构所表示的对…
catalog . 简介 . 扩展属性 . 访问控制表 . 小结 0. 简介 许多文件系统都提供了一些特性,扩展了VFS层提供的标准功能,虚拟文件系统不可能为所有特性都提供具体的数据结构.超出标准的UNIX文件模型的附加特性,通常需要将一个组扩展属性关联到每个文件系统对象Linux内核能够提供的是一个框架,容许增加特定于文件系统的扩展,扩展属性(extended attribute xattrs)是能够关联到文件的任意属性,由于每个文件通常都只关联了所有可能扩展属性的一个子集,扩展属性存储在常规…
inode的管理:Inode-cache hash表inode_hashtable索引节点缓存 dentry的管理: 我们知道,若干dentry描绘了一个树型的目录结构,这就是用户所看到的目录结构,每个dentry指向一个索引节点(inode)结构然而,这些dentry结构并不是常驻内存的,因为整个目录结构可能会非常大,以致于内存根本装不下.Linux的处理方式为:初始状态下,系统中只有代表根目录的dentry和它所指向的inode.当要打开一个文件,文件路径中对应的节点都是不存在的,根目录的d…
知乎链接:https://zhuanlan.zhihu.com/p/58087261 Linux内核代码中广泛使用了数据结构和算法,其中最常用的两个是链表和红黑树. 链表 Linux内核代码大量使用了链表这种数据结构.链表是在解决数组不能动态扩展这个缺陷而产生的一种数据结构.链表所包含的元素可以动态创建并插入和删除.链表的每个元素都是离散存放的,因此不需要占用连续的内存.链表通常由若干节点组成,每个节点的结构都是一样的,由有效数据区和指针区两部分组成.有效数据区用来存储有效数据信息,而指针区用来…
转载:http://www.embeddedlinux.org.cn/html/jishuzixun/201304/14-2538.html 对于嵌入式 Linux 系统来说,有各种体系结构的处理器和硬件平台,并且用户需要根据需求自己定制硬件板.只要是硬件平台有些变化,即使非常小,可能也需要做一些移植工作.内核移植是嵌入式Linux系统中最常见的一项工作. 内核移植工作主要是修改跟硬件平台相关的代码,一般不涉及 Linux 内核通用的程序. 移植的难度也取决于两种硬件平台的差异.Linux 对于…
翻译自Linux文档中的vfs.txt 介绍 VFS(Virtual File System)是内核提供的文件系统抽象层,其提供了文件系统的操作接口,可以隐藏底层不同文件系统的实现. Directiry Entry Cache(dcache) VFS通过open().stat()这些接口传入的文件名搜索dcache,快速找到文件名对应的dentry.dentry的结构是struct dentry,这只是一个内存结构,不会持久化到磁盘中,仅仅是为了提升性能而已. dentry cache是整个文件…
VFS的面向对象的思想,如下图: VFS在上层用户空间的进程与底层特定文件系统之间起到一个承上启下的作用, 对上:封装标准的系统调用接口给用户空间app,user space app不必关心特定文件系统的实现细节. 对下:抽象出标准的开发接口给真实文件系统,只要实现这些接口,就可以实现一个新的真实文件系统. VFS对下特定文件系统提供的通用模型superblock, inode, dentry, file ,它们与进程之间交互关系如下图: 摘自<深入理解linux内核> 理解进程与vfs对象之…
转自:http://blog.chinaunix.net/uid-28362602-id-3425881.html 目录 用户空间的write函数在内核里面的服务例程为sys_write Vfs_write函数实现原理 WORD里面的目录复制过来似乎不能直接用..还是放在这里当主线看吧.. 用户空间的write函数在内核里面的服务例程为sys_write root@syslab ~]# grep write /usr/include/asm/unistd_64.h #define __NR_wr…
双向链表 传统链表与linu内核链表的区别图: 图一 图二 从上图中看出在传统链表中各种不同链表间没有通用性,因为各个数据域不同,而在linux内核中巧妙将链表结构内嵌到数据域结构中使得不同结构之间能连接起来: 链表的常用操作 内核中链表实现文件路径:include/linux/list.h 链表结构定义 struct list_head { struct list_head *next, *prev; }; 获取结构入口地址(list_entry) #define list_entry(ptr…
文件对象 文件对象是进程已经打开文件描述符的内存中的表示,单个文件可能有多个表示打开文件描述符的file结构: struct file { union { struct llist_node fu_llist; /* 文件对象链表 */ struct rcu_head fu_rcuhead; /* 释放之后的RCU链表 */ } f_u; /* 目录项 */ struct path f_path; /* inode */ struct inode *f_inode; /* cached valu…
内核之中数据结构之间的关系图 设备驱动程序…
对于netfilter 可以参考 https://netfilter.org/documentation/HOWTO/netfilter-hacking-HOWTO-3.html netfilter 框架中包含了:filter mat mangle raw security: 在net结构中的成员struct netns_xt xt,是用来存储所有table的, netns_xt结构的成员如下,其中tables存储了多种协议对应的table链表,每种协议对应一个链表,多种table存储在自己所属…
nameidata /mnt/dir1/dir2/ nameidata结构体是一个临时的结构体, 目标是为了找到最后的dentry.…
目录 . 进程相关数据结构 ) struct task_struct ) struct cred ) struct pid_link ) struct pid ) struct signal_struct ) struct rlimit . 内核中的队列/链表对象 ) singly-linked lists ) singly-linked tail queues ) doubly-linked lists ) doubly-linked tail queues . 内核模块相关数据结构 ) st…
http://blog.163.com/he_junwei/blog/static/19793764620152743325659/ http://www.01yun.com/other/20130422/366044.html   使用 /proc 文件系统来访问 Linux 内核的内容 这个虚拟文件系统在内核空间和用户空间之间打开了一个通信窗口 简介: /proc 文件系统是一个虚拟文件系统,通过它可以使用一种新的方法在 Linux? 内核空间和用户空间之间进行通信.在 /proc 文件系统…
虚拟文件系统(virtual file system),别名虚拟文件系统开关,是linux中的一个软件层,向用户空间提供文件系统操作接口. VFS包含的系统调用包括open(2).stat(2).read(2).write(2).chmod(2)等等,这些系统调用在进程环境中执行.下面几个重要的数据结构是VFS(虚拟文件系统中涉及到的数据结构): 1.Directory Entry Cache(dcache) VFS实现了系统调用open(2).stat(2).chmod(2),和其他类似的文件…
概念: ①硬链接:若一个 inode 号对应多个文件名,则称这些文件为硬链接.即硬链接就是同一个文件使用了多个别名.硬链接可由命令 link 或 ln 创建. 其特性: 文件有相同的 inode 及 data block: 只能对已存在的文件进行创建: 不能交叉文件系统进行硬链接的创建: 不能对目录进行创建,只可对文件创建: 删除一个硬链接文件并不影响其他有相同 inode 号的文件. ②软连接:若文件用户数据块中存放的内容是另一文件的路径名的指向,则该文件就是软连接.软链接就是一个普通文件,只…
1.Linux的进程简介: 支持多线程的操作系统中,进程是资源分配的最小单位,线程是调度的基本单位.Linux是现代的32位或64位的支持多线程的操作系统,不过Linux是一种以轻量级进程作为线程,多线程任务中的数个线程以线程的组的方式存在,每个线程以轻量级进程实现. Linux的轻量级进程没有独立的内存空间,进程有独立的内存空间,其中内核级轻量级进程没有内存空间,用户级轻量级进程共享内存空间,进程有自己的mm_struct. 事实上你可以如下理解:linux下,轻量级进程就是指线程,符合POS…
被问到两个问题, 后来想了下如果要讲明白还不太容易,需要对进程的概念,进程管理有清晰的认识: 1. 父进程打开了一个文件,然后通过fork创建一个子进程, 子进程是否共享父进程的文件描述符? 2. 在shell中执行脚本.程序的机制或者流程是什么? 下面就对这两个问题涉及到的Linux进程的基本概念,进程的创建. 线程的实现, 进程的终结等做一下总结: 1. Linux进程基本概念和数据结构 进程-处于执行期的程序和它相关资源的总称.理解: 进程是程序执行的实时结果, 这个实时结果包括很多资源和…
目录 . Linux文件系统简介 . 通用文件模型 . VFS相关数据结构 . 处理VFS对象 . 标准函数 1. Linux文件系统简介 Linux系统由数以万计的文件组成,其数据存储在硬盘或者其他块设备(例如ZIP驱动.软驱.光盘等).存储使用了层次式文件系统,文件系统使用目录结构组织存储的数据,并将其他元信息(例如所有者.访问权限等)与实际数据关联起来,其中采用了各种方法来永久存储所需的结构和数据Linux支持许多不同的文件系统 . Ext2 . Ext3 . ReiserFS . XFS…
目录 . 引言 . Kill Process By Kill Command && SIGNAL . Kill Process By Resource Limits . Kill Process By Code Injection Into Running Process Via GDB . Kill Process By Using Cross Process Virtual Memory Modify To Crash Process && process_vm_wri…
目录 . Linux通信机制分类简介 . 控制机制 0x1: 竞态条件 0x2: 临界区 . Inter-Process Communication (IPC) mechanisms: 进程间通信机制 0x1: 信号(Signals) 0x2: 管道(Pipes) 0x3: 套接字(Sockets) 0x4: System V通信机制(System V IPC Mechanisms) . 多线程并行中的阻塞和同步 0x1: CPU指令集提供的原子操作(Atomic) 0x2: 操作系统提供的原子…
目录 . 引言 . LRK5 Rootkit . knark Rootkit . Suckit(super user control kit) . adore-ng . WNPS . Sample Rootkit for Linux . suterusu . Rootkit Defense Tools . Linux Rootkit Scanner: kjackal 1. 引言 This paper attempts to analyze the characteristics from the…
目录 . 学习Rootkit需要了解的基础知识 . 挂钩(HOOKING) . 直接内核对象操作 . LSM框架(Linux Security Module)于LKM安全 . rootkit检测技术及工具 1. 学习Rootkit需要了解的基础知识 0x1: 什么是rootkit rootkit是允许某人控制操作系统的特定方面而不暴露他或她的踪迹的一组代码.从根本上说来,用户无法察觉这种特性构成了rootkit.rootkit会想尽办法去隐藏自己的网络.进程.I/O等信息(注意,这里所谓的隐藏,…
Linux就这个范儿 第15章 七种武器  linux 同步IO: sync.fsync与fdatasync   Linux中的内存大页面huge page/large page  David Cutler  Linux读写内存数据的三种方式 台湾作家林清玄在接受记者采访的时候,如此评价自己30多年写作生涯:“第一个十年我才华横溢,‘贼光闪现’,令周边黯然失色:第二个十年,我终于‘宝光现形’,不再去抢风头,反而与身边的美丽相得益彰:进入第三个十年,繁华落尽见真醇,我进入了‘醇光初现’的阶段,真正…