【linux】基础IO(四)

在上一篇基础IO中我们主要讲述了文件再磁盘中的存储,当然我们说的也都只是预备知识,为这一篇的文件系统进行铺垫。

目录

  • 搭文件系统的架子:
  • 填补细节:
    • inode:
    • datablock[]:
  • 更上层的理解:

搭文件系统的架子:

在这里插入图片描述
我们在开始之前还要有一个补充细节:
我们说过文件 = 内容 + 属性
而他们本质上都是数据。

那么内容的数据与属性的数据是在一起存放嘛?
不同的文件系统有不同的规则,在linux下是分开存放

现在我们只要知道每个组内有什么即可。


那我们就先来看存放内容数据的地方:

  • 数据区(Data blocks):存放文件内容

我们在图中展示的的比例大小只是为了好形象的写出各个区域,但实际上数据区占据了90以上的大小
在这里插入图片描述


  • 块位图(Block Bitmap):Block Bitmap中记录着Data Block中哪个数据块已经被占用,哪个数据块没有被占用

比特位的位置表示当前块号,1与0代表当前是否被占用。


我们说过内容与属性是分开存放的,那么属性存放在哪里?

  • i节点表(inode Table):存放文件属性 如 文件大小,所有者,最近修改时间等
struct inode
{size_t size;mode_t mode;int creater;...int inode_number;...int datablocks[N];
}

注意:
此结构体大小为128字节

同时我们要说明一点,inode内部没有文件名,那么我们怎样标识一个文件呢?使用inode_number进行标识。

也就是下图中的最左方数字
在这里插入图片描述

那么文件的内容与属性如何连接起来呢?
使用datablock这个数组进行连接。
数组中的数字是data blocks的位置。


既然datablock有bitmap,inode也肯定要有一个bitmap用来管理inode。

  • inode位图(inode Bitmap):每个bit表示一个inode是否空闲可用。

  • Block Group:ext2文件系统会根据分区的大小划分为数个Block Group。而每个Block Group都有着相同的结构组成。

这个block group里存着这个组的相关管理数据,例如还有多少空的data block ,有多少空的inode_number,组的起始块,结束块位置…


超级块与block group的作用是类似的

  • 超级块(Super Block):存放文件系统本身的结构信息。记录的信息主要有:bolck 和 inode的总量,未使用的block和inode的数量,一个block和inode的大小,最近一次挂载的时间,最近一次写入数据的时间,最近一次检验磁盘的时间等其他文件系统的相关信息。Super Block的信息被破坏,可以说整个文件系统结构就被破坏了

但并不是每个组都有一个SB,而是每隔几个就会有一个SB,这样既可以防止磁盘刮花,也不必占用太多的空间存储。


以上也就是我们磁盘级的文件系统!

我们的格式化也就是在每一个分区内分组,再写入文件系统的过程

填补细节:

inode:

我们说过,inode_number是标识磁盘文件的标识符,但有个前提,是在当前分区是唯一的,也就是说,我们inode编号是以分区为单位的!在不同分区内可能会出现相同的inode编号。

在组内进行更详细的划分:在这里插入图片描述
比如我们现在在当前分区有一个inode为10010的编号,怎么找到对应的属性与数据?
我们使用inode编号与[0, 10000], [10001. 20000]…进行对比,发现是在1号(从0号位下标开始)分组内。于是我们便使用10010 - 10001 = 9,使用9在inode bitmap中寻找,观察此inode编号是否合法,合法后在inode table中
找到该属性,最后再通过datablock[]进而找到内容的存放位置。
在这里插入图片描述

datablock[]:

我们在前边说过,inode结构体大小为128字节,那么datablock能占多少呢?
一般我们使用ext2这个文件系统进行讲解,linux也有ext3,4等,在2中有15个元素,那么一个文件只能存60KB
前12个元素确实如此,但是第13,14个元素并不是单纯的映射,15个更是重量级。
在这里插入图片描述
图只是形象,实际肯定更复杂

我们现在只是想输出一个结论:
我们是有能力存大文件的!甚至跨组,但是不建议,因为这样磁头与盘片又会旋转重新寻址,造成效率低下!

更上层的理解:

问题来了,我们在上层使用的都是文件名啊,可是系统都是用inode编号进行标识,那么怎么进行联系呢?

那我们就不得不谈一谈目录了,目录也是文件。

目录 = 内容 + 属性
属性 :不管是什么文件,可执行,目录还是普通文件都是一样的结构体,只是内容不同在这里插入图片描述
那目录的内容里是什么呢?
是文件名与inode编号的映射关系,所以我们在上层不用inode编号,使用文件名即可对文件进行各种操作。

结论:

  1. 所以同一目录下不能存在相同文件名。
  2. 查找文件的顺序,先使用文件名找到inode编号。


明天就更新完毕,今天快熄灯了

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

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

相关文章

dynamicreports示例

1. 简单段落文本报表 //标题样式StyleBuilder titleStyle DynamicReports.stl.style().setHorizontalTextAlignment(HorizontalTextAlignment.CENTER)//设置对齐方式.setFontSize(50)//设置字体.setBackgroundColor(Color.CYAN);//设置背景颜色//段落样式StyleBuilder paragra…

uniapp 2.0可视化工具:创建与管理Vue文件的实践之旅

引言 在前端开发领域中,Vue以其简洁、易上手的特点,受到了广大开发者的青睐。随着uniapp的不断发展,越来越多的开发者开始利用uniapp的可视化工具来创建和管理Vue文件,以提高开发效率。本文将详细介绍如何使用uniapp 2.0可视化工…

bytetrack复现

一,环境安装 创建虚拟环境 conda create -n bytetrack python=3.8 安装requirements pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple 可能报错,解决办法,安装numpy 安装 pytorch pip install torch==1.12.0+cu113 torchvision==0.13.0+cu1…

redis修改协议改了,有哪些替代品?

Redis 是一款广泛使用的开源内存数据结构存储,它支持多种数据结构,如字符串、哈希表、列表、集合、有序集合等。然而,由于 Redis 最近更改了其开源许可证,一些用户和开发者可能正在寻找替代品。以下是一些 Redis 的替代品&#xf…

解决vue3+ts组件ref定义但是访问不到组件属性

为什么父组件访问不到属性呢 因为使用 <script setup> 语法糖的组件是默认关闭的&#xff0c;也即通过模板 ref 或者 $parent 链获取到的组件的公开实例&#xff0c;不会暴露任何在 <script setup>中声明的绑定。 所以要自己抛出去 解决 为了在 <script setu…

H5动效开发之CSS3动画

动画效果是情感设计的重要手段,在H5开发中,实现动效需要综合利用 JavaScript、CSS(3)、SVG、Canvas 等多种 Web 技术手段才能开发出动人的网页动态效果。 接下来,我们把重心放在 CSS3 动画上面,因为 CSS3 在现如今的网页动效开发中占据着最为重要的一席,作为老大哥 CSS 的…

基于SSM+Jsp+Mysql的超市管理系统

开发语言&#xff1a;Java框架&#xff1a;ssm技术&#xff1a;JSPJDK版本&#xff1a;JDK1.8服务器&#xff1a;tomcat7数据库&#xff1a;mysql 5.7&#xff08;一定要5.7版本&#xff09;数据库工具&#xff1a;Navicat11开发软件&#xff1a;eclipse/myeclipse/ideaMaven包…

SuperMap GIS基础产品FAQ集锦(202403)

一、SuperMap GIS基础产品桌面GIS-FAQ集锦 问题1&#xff1a;【iDesktop】安装了idesktop 11i&#xff0c;现想进行插件开发&#xff0c;根据安装指南安装SuperMap.Tools.RegisterTemplate.exe&#xff0c;运行多次均失败 【问题原因】该脚本是之前老版本针对VS2010写的&…

【算法】Cordic算法的原理及matlab/verilog应用

一、前言 单片机或者FPGA等计算能力弱的嵌入式设备进行加减运算还是容易实现&#xff0c;但是想要计算三角函数&#xff08;sin、cos、tan&#xff09;&#xff0c;甚至双曲线、指数、对数这样复杂的函数&#xff0c;那就需要费些力了。通常这些函数的计算需要通者查找表或近似…

uniapp开发小程序,点击右上角<重新进入小程序>进行刷新时,设置开屏加载页面

一、需求及问题 问题&#xff1a;使用uniapp开发小程序时&#xff0c;有【学生端】和【企业端】两个入口&#xff0c;一进入小程序默认进入【学生端首页】&#xff0c;但是当前处于【企业端】时&#xff0c;点击右上角<重新进入小程序>进行刷新时&#xff0c;页面默认进…

国内如何实现GPT升级付款

本来想找国外的朋友代付的&#xff0c;但是他告诉我他的信用卡已经被绑定了他也升级了所以只能自己想办法了。就在一位博主下边发现了这个方法真的可以。只是需要与支付宝验证信息。刚开始不敢付款害怕被骗哈哈&#xff0c;我反诈骗意识绝对杠杠的 该方法就是我们办理一张虚拟…

每天五分钟深度学习PyTorch:面对Tensorflow,为何我选择PyTorch

这篇专栏文章不是为了挑起tenserflow和pytorch中哪个更好&#xff0c;众所周知tensorflow诞生以来&#xff0c;已经成为最流行的深度学习框架&#xff0c;可以说github中大多数的深度学习代码实现是以tensorflow实现的&#xff0c;也就是说资源众多&#xff0c;社区强大&#x…

还不会免费将PDF转为Word?赶快试试这3种工具!

PDF文档格式转换是高频且刚需的办公需求&#xff0c;虽然很简单&#xff0c;但其实绝大部分人找不到合适的工具。 将PDF免费转为Word的方法有很多&#xff0c;这里主要介绍三种工具。 第一种使用最常见的Word软件&#xff0c;第二种使用免费转换网站pdf2doc&#xff0c;第三种…

AI论文精读之CSPNet—— 一种加强CNN模型学习能力的主干网络

目录 一、论文摘要部分 二、提出背景 三、本文的方法 3.1 DenseNet 3.2 Cross Stage Partial DenseNet 3.3 引入 partial dense block及partial transition layer的目的 3.3.1 partial dense block 3.3.2 partial transition layer 3.4 将CSPNet应用到其他结构中 3.5 E…

比nestjs更优雅的ioc:跨模块访问资源

使用ts的最佳境界&#xff1a;化类型于无形 在项目中使用ts可以带来类型智能提示与校验的诸多好处。同时&#xff0c;为了减少类型标注&#xff0c;达到化类型于无形的效果&#xff0c;CabloyJS引入了ioc和依赖查找的机制。在上一篇文章中&#xff0c;我们创建了一个业务模块t…

基于Java+SpringBoot+Vue文学名著分享系统(源码+文档+部署+讲解)

一.系统概述 随着世界经济信息化、全球化的到来和互联网的飞速发展&#xff0c;推动了各行业的改革。若想达到安全&#xff0c;快捷的目的&#xff0c;就需要拥有信息化的组织和管理模式&#xff0c;建立一套合理、动态的、交互友好的、高效的文学名著分享系统。当前的信息管理…

C++拷贝构造函数

1.声明 语法&#xff1a;函数名&#xff08;类名&#xff09;(const 类名 &对象名) 作用&#xff1a;使用一个对象初始化另一个对象。 注意&#xff1a;拷贝构造函数的参数列表必须是 const 类名 & 对象名。 #include <iostream> using namespace std; class …

sonarQube之Call “Optional#isPresent()“ before accessing the value.

在迁移其他项目并使用sonarQube进行规范扫描的时候出现了 Call “Optional#isPresent()” before accessing the value. 解决&#xff1a;这是因为在获取到之前避免空值&#xff1b; 修改前代码&#xff1a; BigDecimal totalAmount feeList.stream().map(FeeDetailDTO::ge…

深刻理解企业的基本职能 营销与创新

前言 还是读《敏捷营销》心得&#xff0c;同样的因最近在读关于营销方面的书与在学习AI&#xff0c;书中有一个引用&#xff0c;即引用彼得德鲁克大师在他的经典著作《客理的实践》中明确提出&#xff1a;由于企业的目的是创造顾客&#xff0c;任何企业都有两项职能&#xff0c…

稀碎从零算法笔记Day45-LeetCode:电话号码的字母组合

题型&#xff1a;映射、回溯算法、递归 链接&#xff1a;17. 电话号码的字母组合 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 题目描述 给定一个仅包含数字 2-9 的字符串&#xff0c;返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出…