【Linux文件系统】被打开的文件与文件系统的文件之间的关联刨析总结

2024-06-24 09:28

本文主要是介绍【Linux文件系统】被打开的文件与文件系统的文件之间的关联刨析总结,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

操作系统管理物理内存以及与外设磁盘硬件进行数据的交换

操作系统如何管理物理内存呢?

其实操作系统内核先对内存先描述再组织的!操作系统管理内存的基本单位是4KB,操作系统会为每一个4KB大小的物理内存块创建一个描述该4KB内存块的struct page结构体,该结构体存储着这4KB内存块的属性信息,通过管理struct page来对内存进行管理,page结构体的大小比较小,OS通常将它们组成一个数组,因此只要对物理内存的管理就变成了对该数组的管理!要想访问某几个页框仅需在page结构体数组中查找即可。

物理内存与磁盘进行数据输入输出时的基本单位是4KB,但是如果物理内存现在要将100字节的数据输入给磁盘,直接将这100字节的内存数据给磁盘就可以了,为什么要必须给4KB内存数据呢?

如果仅仅是要多少给多少,磁盘是机械设备输入输出数据较慢,就可能会导致OS频繁访问磁盘导致整个过程变慢。因此以4KB作为数据交互的基本单位的原因是:1.减少IO次数,减少访问外设次数,提高效率。2.局部性原理。

OS还会对内存管理时采取slab内存分配机制来提升效率:OS会将某些高频的数据结构对象用链表等数据结构连接起来存入缓存区,先不释放它们,这样一来就可以在下次OS需要创建数据结构对象省去malloc创建结构体对象,而直接从缓存区拿,这样一来就提高了操作系统的工作效率。

被打开文件与文件系统文件之间的联系

被打开文件和文件系统文件之间的联系如下图:

将向文件内写入内容的过程:

使用c库文件操作函数将内容写入用户级缓冲区,再通过fd和write系统调用将内容写入对应的内核级缓冲区,再将内容拷贝到磁盘上;或直接使用write系统调用通过fd将文件写入对应的内核级缓冲区即页框中,再将内容拷贝到磁盘上。

描述文件的struct file里虽然有一部分文件的属性,而struct inode中有全部的文件属性。

struct file结构体中有指向struct address_sapce结构体的指针,该结构体中有有指向struct page_tree的结构体的指针,struct page_tree中有struct page文件页缓冲区(内核缓冲区),由该缓冲区将用户输入的内容拷贝到磁盘中。

Linux中每一个进程打开的每一个文件都要有自己的储存文件属性的inode和自己的文件页缓冲区。

操作系统在启动时会默认将文件系统中各分区的Super Block各分组的Group Descriptor Table数据拷贝到物理内存中,这样就使文件页缓冲区向磁盘中拷贝数据时快速找到要写入的文件区域并且清楚哪些磁盘内存块是已被占用的那些是没被占用的,避免造成数据覆盖,也提高了文件拷贝的效率。

这篇关于【Linux文件系统】被打开的文件与文件系统的文件之间的关联刨析总结的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1089753

相关文章

Linux内核定时器使用及说明

《Linux内核定时器使用及说明》文章详细介绍了Linux内核定时器的特性、核心数据结构、时间相关转换函数以及操作API,通过示例展示了如何编写和使用定时器,包括按键消抖的应用... 目录1.linux内核定时器特征2.Linux内核定时器核心数据结构3.Linux内核时间相关转换函数4.Linux内核定时

Linux镜像文件制作方式

《Linux镜像文件制作方式》本文介绍了Linux镜像文件制作的过程,包括确定磁盘空间布局、制作空白镜像文件、分区与格式化、复制引导分区和其他分区... 目录1.确定磁盘空间布局2.制作空白镜像文件3.分区与格式化1) 分区2) 格式化4.复制引导分区5.复制其它分区1) 挂载2) 复制bootfs分区3)

C# List.Sort四种重载总结

《C#List.Sort四种重载总结》本文详细分析了C#中List.Sort()方法的四种重载形式及其实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友... 目录1. Sort方法的四种重载2. 具体使用- List.Sort();- IComparable

SpringBoot项目整合Netty启动失败的常见错误总结

《SpringBoot项目整合Netty启动失败的常见错误总结》本文总结了SpringBoot集成Netty时常见的8类问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参... 目录一、端口冲突问题1. Tomcat与Netty端口冲突二、主线程被阻塞问题1. Netty启动阻

SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)

《SpringBoot整合Kafka启动失败的常见错误问题总结(推荐)》本文总结了SpringBoot项目整合Kafka启动失败的常见错误,包括Kafka服务器连接问题、序列化配置错误、依赖配置问题、... 目录一、Kafka服务器连接问题1. Kafka服务器无法连接2. 开发环境与生产环境网络不通二、序

Linux服务器数据盘移除并重新挂载的全过程

《Linux服务器数据盘移除并重新挂载的全过程》:本文主要介绍在Linux服务器上移除并重新挂载数据盘的整个过程,分为三大步:卸载文件系统、分离磁盘和重新挂载,每一步都有详细的步骤和注意事项,确保... 目录引言第一步:卸载文件系统第二步:分离磁盘第三步:重新挂载引言在 linux 服务器上移除并重新挂p

python3中正则表达式处理函数用法总结

《python3中正则表达式处理函数用法总结》Python中的正则表达式是一个强大的文本处理工具,用于匹配、查找、替换等操作,在Python中正则表达式的操作主要通过内置的re模块来实现,这篇文章主要... 目录前言re.match函数re.search方法re.match 与 re.search的区别检索

Linux下屏幕亮度的调节方式

《Linux下屏幕亮度的调节方式》文章介绍了Linux下屏幕亮度调节的几种方法,包括图形界面、手动调节(使用ACPI内核模块)和外接显示屏调节,以及自动调节软件(CaliseRedshift和Reds... 目录1 概述2 手动调节http://www.chinasem.cn2.1 手动屏幕调节2.2 外接显

Linux(centos7)虚拟机没有IP问题及解决方案

《Linux(centos7)虚拟机没有IP问题及解决方案》文章介绍了在CentOS7中配置虚拟机网络并使用Xshell连接虚拟机的步骤,首先,检查并配置网卡ens33的ONBOOT属性为yes,然后... 目录输入查看ZFhrxIP命令:ip addr查看,没有虚拟机IP修改ens33配置文件重启网络Xh

linux实现对.jar文件的配置文件进行修改

《linux实现对.jar文件的配置文件进行修改》文章讲述了如何使用Linux系统修改.jar文件的配置文件,包括进入文件夹、编辑文件、保存并退出编辑器,以及重新启动项目... 目录linux对.jar文件的配置文件进行修改第一步第二步 第三步第四步总结linux对.jar文件的配置文件进行修改第一步进