如果表不存在则创建_当创建一个文件的时候,操作系统发生了什么

操作文件是我们平时经常有的操作。但是我们可能并不是很了解他们原理,比如为什么删除一个很大的文件,会非常快?创建一个文件的时候,系统发生了什么?为什么删除的文件,还可以恢复?知其然知其所以然。我们一起深入探索文件系统的一些原理。这篇先分析一下创建文件的过程。

我们先看一下文件系统在硬盘中的布局。

cf6025d6b502f361210ef0783500ad51.png


我们再看一下文件系统在内存中的布局。

412c63910539bb058742e6d2d22a60e5.png


对着上面的图,从左向右,我们看到
1 一个进程有一个文件描述符数组,这个描述符数组的元素,就是我们平时操作文件的时候,使用的那个fd。定义如下:

struct file * filp[NR_OPEN];

2 每个文件描述符只是索引,他对应的项指向一个file结构体,file结构体定义如下。

// 管理打开文件的内存属性的结构,比如操作位置(inode没有读取操作位置这个概念,),实现系统进程共享inodestruct file {    unsigned short f_mode;    unsigned short f_flags;    unsigned short f_count;    struct m_inode * f_inode;    off_t f_pos;};

file结构体是和inode的作用是不一样的,inode是更多的是存储文件的一些持久化的数据,比如大小,时间、属主,数据块位置等。inode是存在硬盘中的。在操作的文件的时候才会加载到内存。如果有修改,需要回写硬盘。file存储的是文件临时的元数据,他只存在内存里。比如一个文件当前读写位置,打开模式等等。关闭文件后就会丢失这些数据。

3 在文件系统中,每一个文件都对应一个inode结构体。inode保存了一个文件的元数据,包括大小,时间,属主,块号等等。inode存在于硬盘和内存,内存的inode叫m_inode,他的部分属性和硬盘inode一一对应(硬盘inode叫d_inode),还有一些是只存在内存中的属性。我们看一下inode在硬盘中的布局。

b20ce9551317e82956a8c1dd2b6457e9.png

了解一系列结构体后,我们开始分析创建文件的这个过程。主要是两件事情,第一,判断文件是否存在,如果不存在则开始创建。

1 根据路径找到最后一级目录对应的inode节点。目录其实也是文件,他和一般文件的区别是,一般文件存储的是用户数据,目录文件存储的是文件信息。目录文件里存储的数据就是一个对象数组,每个元素保存了文件名和inode节点号。

// 目录项结构struct dir_entry {    // inode号    unsigned short inode;    // 文件名    char name[NAME_LEN];};

假设我们找/a/b/hello.txt这个文件。因为/是根文件系统的根路径,他在文件系统初始化的时候,根文件系统会从固定的位置(第一个inode节点),把他对应的inode结构体加载到内存中。我们根据根inode,就知道根目录下面有多少dir_entry,然后逐个比较找到目录a对应的dir_entry,从dir_entry中得到目录a的inode号,再根据a的inode号把inode结构体从硬盘中加载到内存,继续这个过程,直到最后找到hello.txt。

2 所以我们从一个目录下找一个目录或者文件的时候,其实就是遍历这个数组,对比name是否一样,是的话根据inode号取出inode结构体,从而取得文件数据。

3 因为我们是创建文件,所以是肯定找不到的。

4 上面已经解释过,一个文件对应一个inode。现在我们创建一个文件,那自然,我们就要先在硬盘中申请一个inode,并且修改文件系统的元数据inode位图,即这个inode被使用了。然后再在内存中申请一个m_inode。供用户操作文件的。至此,创建文件就完成了。我们发现,创建一个文件,底层发生的事情其实就是在硬盘申请一个inode就可以了。

5 当我们开始操作m_inode对应的文件的时候。比如写入。回归上面的inode结构体可以发现,这时候文件其实是没有被分配硬盘空间的。现在需要写入,那首先就要先在硬盘中申请一块空间。并修改块位图信息。然后申请一块和该硬盘块关联的内存块,用户写入的数据就存在该内存块中,系统会定时回写到硬盘中对应的块。

这就是创建一个文件的大致过程。

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

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

相关文章

两个html页面之间通讯,面试官:前端跨页面通信,你知道哪些方法?

引言在浏览器中,我们可以同时打开多个Tab页,每个Tab页可以粗略理解为一个“独立”的运行环境,即使是全局对象也不会在多个Tab间共享。然而有些时候,我们希望能在这些“独立”的Tab页面之间同步页面的数据、信息或状态。正如下面这…

默认选中_双击dwg图纸,怎么设置默认天正打开?

文尾左下角阅读原文看视频教程好课推荐:零基础CAD:点我CAD室内:点我 周站长CAD:点我CAD机械:点我 Bim教程:点我CAD建筑:点我CAD三维:点我全屋定制:点我 ps教程&#xff1…

临颖一高2021高考成绩查询,临颍一高举办2021年决战高考百日冲刺誓师大会

原标题:临颍一高举办2021年决战高考百日冲刺誓师大会3月4日,县一高举办2021年决战高考百日冲刺誓师大会,擂响了百日冲刺的战鼓,全校5800余名师生参加誓师大会。誓师大会在激昂雄壮的国歌声中拉开了序幕。县一高校长巩海生满怀深情…

2021年慈溪中学高考成绩查询,2021年慈溪市高考状元名单资料,今年慈溪市高考状元多少分...

高考状元一直都备受大家的关注,不管对于学校和还是当地教育系统,都是一件荣誉的事情。高考状元历来都诞生于艳羡的目光中,大家为他们的高分叫好,羡慕他们可以一步踏入国内知名学府。本文高考升学网为大家介绍历年慈溪市高考状元的…

网际风全推数据接口_智能风控系统设计与实践

导读在主流互联网产品中,比如搜索和推荐的系统,为了挖掘用户潜在购买需求,缩短用户到商品或信息的距离,提高用户的使用体验,都需要使用大量的特征来刻画用户的行为。在信息安全领域,建立在人工智能技术之上…

esp8266 html文件,ESP8266 基ESP8266_RTOS_SDK (ESP-IDF )中嵌入网页文件(示例代码)

场景:在写ESP8266 web服务的时候,免不了要将自己设计的网页html和css等文件放入到固件中。在arduino中有fs可以进行上传文件,然后通过文件系统读出。那在ESP-IDF中该怎么办呢。有几个思路1. 通过flash_download_tools 直接向固定地址写入文件…

高中计算机教师考试专业知识,高中教师资格证计算机专业考试内容

【导读】高中教师资格证计算机专业考综合素质、教育知识与能力和学科知识与教学能力,学科知识与教学能力是考计算机科学与技术的专业知识。高中教师资格证计算机专业考试内容高中教师资格证计算机专业考综合素质、教育知识与能力和学科知识与教学能力,学…

MySQL整数类型

整数类型又称数值型数据,数值型数据类型主要用来存储数字。 MySQL 提供了多种数值型数据类型,不同的数据类型提供不同的取值范围,可以存储的值范围越大,所需的存储空间也会越大。 MySQL 主要提供的整数类型有 TINYINT、SMALLINT…

LISP 冻结excel窗格_粗暴讲解,2分钟 | 即懂excel 冻结首行、首列和单元格怎么弄?...

多少人上手excel,都是基本功不扎实啊?!想起当初自己学做数据,迫于不可抗力因素,糊里糊涂上岗。没囤过基础知识,全靠业务实践练操作。领导甩来什么需求,当天就要查各种方法给他做出来&#xff0c…

MySQL小数类型

MySQL 中使用浮点数和定点数来表示小数。 浮点类型有两种,分别是单精度浮点数(FLOAT)和双精度浮点数(DOUBLE);定点类型只有一种,就是 DECIMAL。 浮点类型和定点类型都可以用(M, D)来表示&…

linux windows文件 编码_Mac, Windows和Linux电脑之间如何快速传输文件

Mac, Windows和Linux电脑之间如何快速传输文件本文介绍的方法主要适用于在家庭环境中的多台电脑之间快速传输文件,比如家中有三台电脑分别是Windows, Mac和Linux系统,如果传输少量的小文件,那么可以直接使用微信等通讯软件就可以了。但是如果…

MySQL字符串类型

MySQL 中的字符串类型有 CHAR、VARCHAR、TINYTEXT、TEXT、MEDIUMTEXT、LONGTEXT、ENUM、SET 等。 下表中列出了 MySQL 中的字符串数据类型,括号中的M表示可以为其指定长度。 VARCHAR 和 TEXT 类型是变长类型,其存储需求取决于列值的实际长度&#xff…

5000的台式计算机,预算5000的台式组装机配置清单_预算5000的台式组装机配置

5000的价格在游戏本里只能算是入门级别的。基本上3A游戏只能低特效运行,特效根本无法进行。但是台式电脑不一样。5000元基本可以流畅运行市面上所有游戏,中高特效,1080p分辨率。接下来边肖会给大家推荐预算5000的桌面组装机配置列表。1.带显示…

三菱d700变频器模拟量控制_三菱Q系列PLC,用CCLink控制变频器正反转和多段速

硬件、软件设置:参阅三菱PLC,CC-Link通信协议基础知识远程输入(RX)定义:Rxn0:正转中Rxn1:反转中Rxn2:运行中(端子RUN功能)Rxn3:频率到达(端子SU功能)Rxn4:过负荷报警(端子OL功能)Rxn…

MySQL创建数据表

创建数据表,指的是在已经创建的数据库中建立新表。 创建数据表的过程是规定数据列的属性的过程,同时也是实施数据完整性(包括实体完整性、引用完整性和域完整性)约束的过程。 创表语法 在 MySQL 中,可以使用 CREATE…

西安工程大学计算机科学学院刘宝宝,计算机科学学院召开研究生国家奖学金答辩会...

10月15日上午,计算机科学学院在学院426会议室召开了2020年研究生国家奖学金答辩会。学院2020年研究生国家奖学金评审委员会全体成员和4名参评学生参加了此次会议。会议由研究生辅导员程帅主持。根据《西安工程大学关于开展2020年研究生国家奖学金的通知》要求&#…

wps中图片怎么居中_wps图片怎么添加推动声

wps图片怎么添加推动声呢?很多用户对此还不是很清楚,小编这里就给大家带来有关wps图片怎么添加推动声的回答,希望能够对大家有所帮助。1、如图所示,这是幻灯片中的一张图片,我们为这一张图片添加上“推动”的声音&…

车仪表台上的装饰_一汽大众销量最差的车,旅行车蔚领为什么在国内没有市场?...

说到旅行车,一直是深受欧洲人民所喜爱的这么一类车种。由于国情不同,欧洲大陆上的国家众多,城市与城市之间更是被分割得很"碎",再加上欧洲人民喜欢出去旅游,而一出门便喜欢携带自行车、冲浪板、帐篷等户外装…

计算机水平毕业研究生7分落户,2018毕业生就业落户新评分标准出炉!立信能加多少分?...

原标题:2018毕业生就业落户新评分标准出炉!立信能加多少分?全文字数:1682字阅读所需时间:4分钟近日,上海发布了《2018年非上海生源应届普通高校毕业生进沪就业申请本市户籍评分办法》。与应届毕生生息息相关…

textcnn文本词向量_文本分类模型之TextCNN

六年的大学生涯结束了,目前在搜索推荐岗位上继续进阶,近期正好在做类目预测多标签分类的项目,因此把相关的模型记录总结一下,便于后续查阅总结。一、理论篇: 在我们的场景中,文本数据量比较大,因…