# tprocfs **Repository Path**: wangqiyuejava63/tprocfs ## Basic Information - **Project Name**: tprocfs - **Description**: 实现一个内核模块, 模仿 linux 的 procfs 实现 cat /tproc/pid/status 查看进程状态、进程层次(父子关系)等信息 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-12-09 - **Last Updated**: 2025-12-11 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## How to test ### install and mount sudo insmod tprocfs.ko sudo mkdir /tproc sudo mount -t tprocfs none /tproc ### check ls /tproc sudo dmesg ### unmount and remove sudo umount /tproc sudo rmmod tprocfs.ko ## Concept 伪文件系统(Pseudo Filesystems)是 Linux 虚拟文件子系统(VFS)中的一类特殊文件系统 不依赖物理存储设备,而是由内核动态生成,用于暴露内核数据结构、设备信息或系统状态给用户态。 它们通过 **VFS** 提供文件接口,遵循 **“一切皆文件”** 的哲学,方便用户和程序访问内核信息。 ### Implement Machanism 伪文件系统的工作原理 伪文件系统首先通过 **register_filesystem** 向内核注册自己的 **struct file_system_type**(如 proc_fs_type) 并在 **挂载** 时(如 mount -t proc proc /proc) 由 VFS 创建对应的 **struct super_block** 伪文件和目录在内核中由 **struct inode** 和 **struct dentry** 结构体表示 并绑定特定的 **操作函数**(如 proc_ops 或 sysfs_ops),实现与 VFS 的集成。 ## VFS(Virtual File System) VFS抽象层之所以能衔接各种各样的文件系统,是因为它定义了所有文件系统都支持的基本抽象接口和数据结构。 同时实际文件系统也将自身的诸如“如何打开文件”,“目录是什么”等概念在形式上与VFS的定义保持一致。 因为实际文件系统的代码在统一的接口和数据结构下隐藏了具体的实现细节,所以在VFS层和内核的其他部分看来,所有文件系统都是相同的,它们都支持像文件和目录这样的概念,同时也支持像创建文件和删除文件这样的操作。 内核通过抽象层能够方便、简单地支持各种类型的文件系统。 实际文件系统通过编程提供VFS所期望的抽象接口和数据结构,这样,内核就可以毫不费力地和任何文件系统协同工作。 并且这样提供给用户空间的接口,也可以和任何文件系统无缝地连接在一起,完成实际工作。' ### inode Unix系统将文件的相关信息(如访问控制权限、大小、拥有者、创建时间等等信息)和文件本身这两个概念加以区分。 文件相关信息,有时被称作文件的元数据(也就是说,有关数据的信息) 被存储在1个单独的数据结构中,该结构被称为 **索引节点(inode)** 它其实是index node的缩写,不过近来术语“inode”使用得更为普遍一些。 ### VFS 四大对象 1)超级块(super block) 2)索引节点(inode) 3)目录项(dentry) 4)文件对象(file) ## reference https://dingiv.github.io/kernel/linux/file/pfs Linux内核设计与实现.pdf by robert love