43 tmpfs/devtmpfs 文件系统

news2024/11/18 7:25:41

前言

在 linux 中常见的文件系统 有很多, 如下 

基于磁盘的文件系统, ext2, ext3, ext4, xfs, btrfs, jfs, ntfs 
内存文件系统, procfs, sysfs, tmpfs, squashfs, debugfs 
闪存文件系统, ubifs, jffs2, yaffs  

文件系统这一套体系在 linux 有一层 vfs 抽象, 用户程序不用关心 底层文件系统的具体实现, 用户只用操作 open/read/write/ioctl/close 的相关 系统调用, 这一层系统调用 会操作 vfs 来处理响应的业务 

vfs 会有上面各种文件系统对应的 读写 相关服务, 进而 将操作下沉到 具体的文件系统 

我们这里 来看一下 tmpfs 文件系统, 这是一个 基于 内存的文件系统, 读写的都是 基于内存页 

tmpfs/devtmpfs 可能使用 shmem 相关操作, 也可能使用 ramfs 相关操作, 取决于配置 

rootfs 的部分和 rootfs 文件系统 部分一致, 这里 我们不多赘述, 我们这里主要关心 shmem 的部分

如何分配inode ?

在创建该文件的时候, tmpfs 会创建对应的 inode, 并将改 inode 添加到 dcache

创建 inode 操作来自于, 父级目录的 i_op->create, tmpfs 中对应于 shmem_get_inode

这里主要是基于 tmpfs 的 super_block 新建 inode, 初始化 i_no, i_mapping, i_op, i_fop 什么的 

普通文件的 i_fop 为 shmem_file_operations

/run/xx 是在哪里创建的 ? 

这个创建取决于实际的业务, 业务/内核 代码向 tmpfs 中写出具体的数据到具体的文件 

那么执行 该代码的时候 就会创建对应的文件

如何分配存储空间 ? 

存储空间是来自于 新分配的物理页  

如何读写数据 ?

a_ops->write_begin 会回去 maping, pos 对应的物理页, 如果不存在 则向 系统 进行申请 

然后 iov_iter_copy_from_user_atomic 的实现是将 用户空间待写出的数据 写出到给定的 物理页

执行命令为 ‘echo “4” >> 4.txt ‘, 这里 i->iov->iov_base 中即为待输出的内容, 这里是 一个字符 4, 和一个回车

copy_page_to_iter 即为读取的操作, 将物理页的数据拷贝到 buf 中

如何根据 path 获取到上下文的数据? 

上面在 i_op->create 中创建了 inode, 但是并没有提到将 inode 注册到 dir 中或者怎么怎么样 

那么 读取文件的时候怎么关联找到这个 inode 呢? 

该文件对应的dentry 在 i_op->lookup 的时候, 将 dentry 放到了 dcache_hashtable 中 

然后 之后才是走的上面的 i_op->create 来创建文件对应的 inode, 然后将 dentry 关联上 inode

然后 在之后 读取该文件的时候, lookup_fast 的时候去 dcache_hashtable 中查询对应的 dentry 的信息 

进而拿到 inode, 以及 inode 相关附加信息

进而是根据 inode, 以及上下文, 封装 file 对象 

 完


 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1359118.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

keras 深度学习框架实现 手写数字识别

阅读本文之前,请先参考--------win10搭建keras深度学习框架 安装运行环境 阅读本文之前,请先参考--------keras人工智能框架 MNIST 数据集 随机展示 查看训练图片 完整代码如下图: 在sublimeText中 使用ctrlB运行代码,结果如…

没有一家车企能绕开「数据闭环」

作者 |张祥威 编辑 |德新 2023年,在比亚迪那次公布智驾数据规模后,智能化下半场的战斗就正式打响了。 如今,自动驾驶正在沿着特斯拉提出的「BEVTransformer」急速推进,这条技术路线短短几年就得到了验证,随着智驾起较…

报表控件Stimulsoft 2023回顾:都做了哪些产品的改变?

在2023年过去一年中,报表控件Stimulsoft 针各类控件都做了重大改变,其中新增了某些产品、同时加强了很多产品的性能和UI设计,更加符合开发者需求,下面就跟随小编一起来回顾,具体都有哪些↓↓↓ Stimulsoft Ultimate &…

静图如何做成动态gif图?手把手教你一招制作

我们在跟小伙伴聊天时,都会发送gif动图,能够让我们的心情更加开心。当我们找不到合适的图片时,就可以自己制作专属于自己的gif动图,那么怎能操作呢?很简单,通过使用gif在线生成(https://www.gif…

MIT_线性代数笔记:第 24 讲 马尔可夫矩阵;傅里叶级数

目录 马尔可夫矩阵 Markov matrices傅里叶级数 Fourier series 本讲学习马尔可夫矩阵和傅里叶级数,两者是关于特征值和投影矩阵的应用。 马尔可夫矩阵 Markov matrices A [ 0.1 0.01 0.3 0.2 0.99 0.3 0.7 0 0.4 ] A \begin{bmatrix} 0.1 & 0.01 & 0.3 \\…

Python爬虫实战技巧:如何在爬取过程中动态切换代理IP

目录 前言 第一步:获取代理IP列表 第二步:测试代理IP的可用性 第三步:动态切换代理IP 总结 前言 在进行爬虫开发的过程中,有时候需要使用代理IP来访问目标网站,以避免被封IP或者降低访问频率的限制。本文将介绍如…

菜单显示博客页

结果图 难点及其实现 滚动条自定义: .card::-webkit-scrollbar { width: 4px;} .card::-webkit-scrollbar-thumb { border-radius: 8px; box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.2); background: #666666; } .card::-webkit-scrollbar-thumb:hover { backgr…

c# windows10大小端试

测试代码: unsafe public void ceshi() {byte[] by BitConverter.GetBytes(0x12345678);Debug.WriteLine(" byte[0] 0x" by[0].ToString("x2"));Debug.WriteLine(" byte[1] 0x" by[1].ToString("x2"));Debug.WriteLi…

MinIO 批处理框架添加了对过期时间的支持

您现在可以使用 MinIO 批处理框架执行 S3 删除操作,以通过单个 API 请求删除大量对象。借助 MinIO 批处理框架,可以快速轻松地在 MinIO 部署中执行重复或批量操作,例如批量复制和批量密钥轮换。MinIO 批处理框架处理所有手动工作,…

【自动化测试总结】优点、场景、流程、项目人员构成

一、自动化测试的概念 以程序测试程序,以代码代替思维,以脚本的运行代替手工测试,可以大大提高工作测试的效率。 二、自动化测试的优点 1.回归测试更为方便,可靠。自动化测试最主要的任务和特点,特别是在程序修改比较…

Minitab 20安装包下载及安装教程

Minitab 20下载链接:https://docs.qq.com/doc/DUmNYVGxtUnZkWUpk 1.选中下载好的安装包,鼠标右键解压到”Minitab 20“文件夹 2.选中Setup,鼠标右击选择“以管理员身份运行” 3.点击“下一步” 4.点击“下一步” 5.勾选我接受许可协议中的条…

oracle语法学习

oracle语法学习 1.备份表 create table bd_psndoc_temp as select * from bd_psndoc2.还原表 drop table bd_psndoc; create table bd_psndoc as select * from bd_psndoc_temp3.查询表的前5条记录 select * from bd_psndoc_temp where rownum<54.从一个表中复制所有的列…

stm32学习笔记:TIM-输出比较

四部分讲解内容&#xff0c;本文是第二部分 输出比较主要用于PWM波形的控制电机&#xff08;驱动电机的必要条件&#xff09; 1、定时器基本定时&#xff0c;定一个时间&#xff0c;然后让定时器每隔一段时间产生一个中断&#xff0c;来实现每隔一个固定时间执行一段程序的目…

HarmoryOS Ability页面的生命周期

接入穿山甲SDK app示例&#xff1a; android 数独小游戏 经典数独休闲益智 广告接入示例: Android 个人开发者如何接入广告SDK&#xff0c;实现app流量变现 Ability页面的生命周期 学习前端&#xff0c;第一步最重要的是要理解&#xff0c;页面启动和不同场景下的生命周期的…

老师们居然这样把期末考试成绩发给家长——群发成绩系统的妙用

在现代社会&#xff0c;随着科技的发展和教育的进步&#xff0c;家校之间的沟通方式也在不断更新和完善。其中&#xff0c;群发成绩系统作为一种新型的教育信息化工具&#xff0c;在期末考试成绩的传递方面发挥了重要作用。老师们通过群发成绩系统&#xff0c;将期末考试成绩快…

合合TextIn团队发布 - 文档图像多模态大模型技术发展、探索与应用

合合信息TextIn&#xff08;Text Intelligence&#xff09;团队在2023年12月31日参与了中国图象图形学学会青年科学家会议 - 垂直领域大模型论坛。在会议上&#xff0c;丁凯博士分享了文档图像大模型的思考与探索&#xff0c;完整阐述了多模态大模型在文档图像领域的发展与探索…

在pycharm中执行 os.makedirs 提示用户名或密码不正确

问题&#xff1a;在pycharm中运行脚本&#xff0c;在 \10.0.21.249\share 共享目录下创建目录提示错误 发现&#xff1a;手动在该目录下创建目录没有问题。 解决方法&#xff1a; 切换到cmd 命令行运行该脚本成功创建 猜测&#xff1a;感觉应该是pycharm中使用的用户名和密码存…

医疗设备产生谐波对配电系统危害有哪些

1.对电网的影响 电网中的谐波会增加系统损耗&#xff0c;使设备发热&#xff0c;影响设备使用寿命。此外当并联的无功补偿电容器容抗与系统感抗匹配时&#xff0c;将发生n次并联谐振&#xff0c;造成电容器组的过电压和过电流。当基波频率为时&#xff0c;谐振频率&#xff0c…

【重磅新品】小眼睛科技推出紫光同创盘古系列FPGA开发板套件,盘古200K开发板,紫光同创PG2L200H,Logos2系列

FPGA&#xff0c;即现场可编程门阵列&#xff0c;作为可重构电路芯片&#xff0c;已经成为行业“万能芯片”&#xff0c;在通信系统、数字信息处理、视频图像处理、高速接口设计等方面都有不俗的表现。近几年&#xff0c;随着国家战略支持和产业发展&#xff0c;国产FPGA迎来迅…

LLM(九)| 使用LlamaIndex本地运行Mixtral 8x7大模型

欧洲人工智能巨头Mistral AI最近开源Mixtral 8x7b大模型&#xff0c;是一个“专家混合”模型&#xff0c;由八个70亿参数的模型组成。Mistral AI在一篇博客文章&#xff08;https://mistral.ai/news/mixtral-of-experts/&#xff09;介绍了Mixtral 8x7b&#xff0c;在许多基准上…