当前位置: 首页> 教育> 培训 > 微信管理系统在哪_企业标准备案平台官网_文件外链生成网站_常州百度搜索优化

微信管理系统在哪_企业标准备案平台官网_文件外链生成网站_常州百度搜索优化

时间:2025/7/11 0:51:46来源:https://blog.csdn.net/qq_37077309/article/details/142258968 浏览次数:0次
微信管理系统在哪_企业标准备案平台官网_文件外链生成网站_常州百度搜索优化

文章目录

    • 概要
    • 整体架构流程
    • 技术细节

概要

提示:这里可以添加技术概要
linux内核中 devtmpfs实现介绍
内核版本:5.10

Devtmpfs在Linux中是一个特殊的设备文件系统,主要用来linux内核中加速启动过程和管理设备节点。高版本的linux基本都是使用devtmpfs来管理设备节点。

devtmpfs(device temporary file system)是在 Linux 内核 2.6.33 版本中引入的。 devtmpfs 的引入是为了简化设备节点的创建过程,并且减少对用户空间程序(如 udev)的依赖,使得设备节点能够在系统启动早期就可用。

整体架构流程

代码流程如下:

devtmpfs是和tmpfs类似,是存在内存中的,不会存储到硬盘,主要功能是:创建和删除设备节点(mknod)

技术细节

在这里插入图片描述

1,初始化:
devtmpfs_init
vfs_kern_mount(&internal_fs_type, 0, “devtmpfs”, opts);
register_filesystem(&dev_fs_type); // 注册文件系统
kthread_run(devtmpfsd, &err, “kdevtmpfs”); //创建kthread处理setup和loop。

Devtmpfs初始化时候先vfs_kern_mount产生一个挂载点描述结构vfsmount mnt结构,然后注册dev_fs_type文件系统,最后再创建devtmpfsd的kthread。

2,devtmpfsd线程代码:
Devtmpfsd
devtmpfs_setup
devtmpfs_work_loop();

Devtmpfsd会先调用devtmpfs_setup函数挂载devtmpfs到 “/” 目录,然后进入work_loop,等待请求去创建和删除设备文件。

创建/删除设备文件接口:
devtmpfs_create_node
devtmpfs_delete_node

在内核启动init进程(systemd)后,由systemd将devtmpfs挂载到 /dev 目录。

线程实现细节:
有一个全局的 requests 结构来接收发送的请求,这个结构是个 链表,新的请求将插入头部,request指向当前设置的req,然后唤醒等待的处理线程,等待处理完成。
线程处理会加自旋锁然后 一次性将链表中所有请求 处理完成。提交请求和处理请求均有加锁操作spin_lock。

static struct req {struct req *next;struct completion done;int err;const char *name;umode_t mode;	/* 0 => delete */kuid_t uid;kgid_t gid;struct device *dev;
} *requests; //链表  从头部加数据   线程处理一次性将链表中所有请求处理完成static int devtmpfs_submit_req(struct req *req, const char *tmp)
{init_completion(&req->done);spin_lock(&req_lock);req->next = requests;requests = req;spin_unlock(&req_lock);wake_up_process(thread);wait_for_completion(&req->done); //等待请求完成kfree(tmp);return req->err;
}static void __noreturn devtmpfs_work_loop(void)
{while (1) {spin_lock(&req_lock);while (requests) {struct req *req = requests;requests = NULL;spin_unlock(&req_lock);while (req) {struct req *next = req->next;req->err = handle(req->name, req->mode,req->uid, req->gid, req->dev);complete(&req->done);// 完成请求req = next;}spin_lock(&req_lock);}__set_current_state(TASK_INTERRUPTIBLE);spin_unlock(&req_lock);schedule();}
}

并不是所有的device都会创建设备节点
只有分配设备号的设备会创建,net设备不会创建
在这里插入图片描述
设备节点(dev目录下的设备文件)本质是由vfs_mknod创建
字符设备c和块设备b文件,fifo和socket文件也是vfs_mknod实现。
在这里插入图片描述

小结
以上介绍了devtmpfs基本概念和实现细节,有需要可以参考devtmpfs的单线程req实现内核线程相关操作。

关键字:微信管理系统在哪_企业标准备案平台官网_文件外链生成网站_常州百度搜索优化

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: