文件系统和软硬链接

news2024/11/29 8:55:35

文章目录

    • 一.文件系统
      • 1.了解磁盘的物理结构
      • 2.磁盘的存储结构
        • a.磁盘读取
      • 3.磁盘的逻辑结构
        • a.为什么操作系统不直接使用CHS地址?
        • b.实际IO一次的大小
      • 4.磁盘的分区管理
        • 4.1.ext文件系统
          • a.文件查找
          • b.文件删除
        • 4.2目录的属性和数据
    • 二.软硬链接
      • 软链接的建立和删除
          • 软链接的使用场景
      • 硬链接的建立和删除
          • 硬链接的使用场景

一.文件系统

文件操作就是进程和被打开文件之间的关系,但是操作系统不可能同时将磁盘中的所有文件打开。被打开的文件要被管理起来,没有被打开的文件为了方便我们随时去读取也要被管理起来。

1.了解磁盘的物理结构

在这里插入图片描述

磁盘是计算机中几乎唯一 一个机械设备并且是一个外设,它的速度很慢,但它廉价且存储量大,目前仍然是企业存储设备的首选。对于磁盘我们应该有以下的认识:

1.磁盘是通过磁头充放电改变盘面南北极调换将数据写入到盘面上的

2.磁盘不止一片盘面,而是一摞,每个盘片有两面,有多少个盘面就有多少个磁头

3.磁头和盘面之间有很微小的距离,它们并没有直接触碰到一起(如果磁头碰到盘面就可能将盘面刮花导致数据的丢失)

4.所有的磁头是被连接在一起的,只能一起运动(共进退),即它们是指向不同盘面的同一个位置

2.磁盘的存储结构

在这里插入图片描述

一块盘面是由多个磁道构成,一个磁道又被划分成多个扇区。各个盘面中半径相同的圆一起构成了一个柱面。

在读取磁盘数据的时候,是按照扇区为单位读取的。虽然越靠近圆心的磁道周长越小,但是它们存取的数据是一样多的,即每个扇区的存储能力是相同的,都是512字节。

a.磁盘读取

磁盘写入数据依靠的是磁头,读取数据依靠的仍然是磁头。当磁盘开始运作的时候,盘片在高速旋转,磁头在来回摆动。磁头摆动的过程就是在定位磁道(柱面)的过程,定位了磁道(柱面)以后,磁头就固定在那个磁道上不再发生偏转,此时再来确认是哪一个磁头,最后再确认数据在该磁道的哪一个扇区。

磁盘中有多个盘面也就有多个磁头,所以在确认磁道以后还需要确认磁头,确认磁头也是在确认数据在哪个盘面,为确认扇区也提供了前提。

这种定位方式被称为C(柱面)H(磁头)S(扇区)定位法

3.磁盘的逻辑结构

在这里插入图片描述

如果使用CHS定位法,这是一种三维寻址方式,效率不够高,所以为了效率和方便管理,实际上操作系统在管理磁盘的时候,是将磁盘抽象成一种线性结构(数组)。此时我们需要读取某一个区域中的数据,只需要拿到这个区域的下标即可,这个下标在操作系统中就称为LBA地址。

操作系统内部也是使用的LBA地址,当我们实际要去磁盘中读取数据时就需要将LBA地址转换成CHS地址(通过计算可以得到)。

a.为什么操作系统不直接使用CHS地址?

1.为了方便管理,CHS寻址是三维的,而数组下标则是一维寻址

2.让操作系统的代码与硬件进行解耦,不让硬件的变化影响操作系统

b.实际IO一次的大小

虽然一个扇区的大小是512字节,但是对于文件来说还是太小了,毕竟我们大部分的文件文件都是几兆到几个G的。所以操作系统每次去磁盘读取数据的时候都会以1KB,2KB,4KB为基本单位(大部分都是4KB)。也就是说哪怕你只需要读取一个扇区中的一个比特位,操作系统也会加载4KB大小的数据。

也就是说操作系统将4KB数据加载进来以后,很可能不能被完全利用,但是这也不一定就意味着浪费。根据局部性原理:当我们访问了该数据以后,大概率是要访问该数据周围的数据的。所以一次性加载4KB大小的空间,在某种程度上也算是一种预加载。

在对比顺序表和链表的时候,说顺序表CPU高速缓存命中率高。不就是因为顺序表的数据存储在一块连续的空间中吗,因为一次性会加载4KB大小的空间,所以下次再去访问顺序表后续的元素就会发现它已经在内存中了。

操作系统中的内存其实是被划分成了一个一个的块,这些块的大小为4KB,这就是页框。

而磁盘中的文件,尤其是二进制可执行文件,也是被划分成了4KB大小的块,这个就是页帧。

4.磁盘的分区管理

我们的磁盘动不动就是512G,要管理这么大一块空间是一件很不容易的事。操作系统在管理磁盘的时候采取的是分治的思想,首先将磁盘进行分区(将磁盘分成C盘,D盘),然后再将区进行分组。

4.1.ext文件系统

在这里插入图片描述

注意:Boot Block是启动块,大小为1kb,由pc标准规定的,用来存储磁盘分区信息和启动信息,任何文件系统都不能操作该块。其他的每个Block Group都具有相同的组成结构

Super Block:存放的是文件系统本身的结构信息未使用的Data Block和inode的数量、一个Data Block和inode的大小、最近一次挂载的时间、最近一次写入数据的时间、最近一次检验磁盘的时间等其他文件系统的相关信息,主要包括Date Block和inode的总量。每一个Block Group中都有一个Super Block,其中以Group0中的为主,其他的为辅;这是一种备份,因为一旦Super Block被损坏整个文件系统都会受到影响。

Group Descriptor Table:块组描述表,存放该分区中的所有块组的属性信息

Block Bitmap:是一个位图结构,用1表示该位置的Data Block被占用,用0表示没有被占用

inode Bitmap:位图结构,用1表示该inode被占用,0表示没有被占用

inode Table:inode表,存放该分组内所有可用的inode(已使用的+未使用的),每个inode的大小是128/256字节,inode和文件一 一对应,每个inode中都存放着该文件的几乎所有属性(在操作系统中,inode是文件的唯一标识)。文件名不在inode中存放

Data Blocks(数据块):存放分组内所有的Data Block,Data Block用于存放文件的数据,每个Data Block的大小是一样的。(大文件占用的数据块多,小文件占用数据块少)

通过上面的信息我们要知道这些:

1.格式化就是重写文件系统,而文件系统的恢复就是用其他没有被损害的Super Block去恢复被损坏了Super Block

2.创建新文件就是在inode Bitmap中找到一个没有被占用的inode存放该文件的属性,再去Block Bitmap中找到没有被占用的Data Block写入该文件的数据,最后建立inode和Data Block之间的映射关系

a.文件查找

inode和文件是一一对应的,inode在同一个分区是连续的,不同分区的inode是没有关联的。查找文件就是去inode Bitmap中查找该inode所对应的比特位是否为1,如果是,就说明该文件存在,而该inode在位图中对应的比特位相对于第一个比特位有一个偏移量,这个偏移量就可以作为该inode在inode Table的相对位置。这就可以得到文件的属性内容了。

在inode中存在一个block[15]数组,该数组中0-11下标存放的都是该文件使用的数据块,而block[12]对应的数据块中不存放文件的内容,而是存放其他的数据块地址,文件的数据也可以写入到数据块所存储的数据块中,数据块中存数据块,这就是二级索引。block[13]就是三级索引,block[14]就是四级索引。这样逐级展开以后就可以存放相当巨大的数据。

一个数据块的大小只有4KB,而一个数据块大小的地址可能只有4字节,通过建立索引的方式就可以解决大文件的存储和查找

b.文件删除

在文件系统中删除文件只要将该文件对应的inode在inode Bitmap中由1置0,这个文件就算是被删除了。

因为一旦一个inode在inode Bitmap中被由0置1,操作系统就会认为该inode没有被占用,会将这个inode分配一个新创建的文件并覆盖式的写入文件属性。

几乎所有在计算机中的删除都是这样的惰性删除。

在创建一个新文件时,是实实在在的要写入数据,但是要删除一个文件只要在inode Bitmap中将对应的比特位由1置0即可,这就是为什么删除文件远比下载文件要快。

因为删除文件只是在inode Bitmap中将对应的比特位由1置0,所以这也为文件恢复提供了可能性,当一个文件被误删以后最好不要做任何除了恢复文件的操作,否则就可能会有新数据覆盖之前被删掉文件的数据块(或者inode)。

4.2目录的属性和数据

虽然操作系统用inode标识文件,但用户使用的是文件名,但inode又不存储文件名。一个目录也有自己的inode和数据块,目录的inode存放的子让是目录的属性,目录的数据块中存放的就是该目录下所有文件的文件名和inode映射关系。

这就是为什么同一个目录下不能有两个同名文件,因为inode与文件是一一对应的(也就是说一个inode只能与一个文件名映射)。

在Linux权限学习时提到要在一个目录中创建新文件必须要有写入权限,这是因为在目录下创建新文件就要在该目录对应的数据块中写入新文件和其inode对应的映射关系。

二.软硬链接

软链接的建立和删除

在这里插入图片描述

1.使用ls -li可以查看文件的inode

2.软链接是一个独立的文件,有自己的inode和数据块

3.删除软连接可以使用unlink也可以使用rm直接删除软连接文件

软链接的使用场景

软链接相当于Windows下的快捷方式:

在这里插入图片描述

删除软链接并不会影响源文件,但源文件一旦被删除以后软链接就失效了

硬链接的建立和删除

在这里插入图片描述

观察发现,硬链接文件的inode和源文件相同,硬链接没有自己的inode并不是一个独立的文件,它只是对应文件名和inode的一个映射关系。

在这里插入图片描述

硬链接数代表有几个文件指向这个inode,inode中有一个ref变量,新建一个硬链接ref++,反之则ref–,只有当ref被减为0的时候这个文件才会被真正的删除。(关闭文件也是一样,只有没有任何进程使用该文件这个文件才会被关闭)这种方式被称为引用计数。

也就是说硬链接其实是给该文件取了一个别名,并让ref增加一,使得该文件再被删除以后,这个文件的数据还能被硬链接访问。

硬链接的使用场景

当我们创建一个新文件时,它的硬链接数就是1(代表它自己本身).但是我们创建一个目录时,默认的硬链接数就是2,这是因为除了目录本身,还会默认创建一个.文件代表当前目录

在这里插入图片描述

当我们创建一个目录后,会默认生成...,其中.代表当前目录,而..代表上级目录,这就是为什么我cd ..可以退回到上级目录的原因。

如果我在dir目录下继续创建目录,那么dir的硬链接数会继续++,因为新目录下会有..指向dir目录

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

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

相关文章

【VM服务管家】VM4.0软件使用_1.4 通讯类

目录 1.4.1 通讯管理:ModBus通信发送非整型数据的方法1.4.2 通讯管理:使用Modbus TCP通讯协议与流程交互 1.4.1 通讯管理:ModBus通信发送非整型数据的方法 描述 环境:VM4.0.0 现象:Modbus通信发送数据只能为Int类型&a…

快速搭建Electron+Vite3+Vue3+TypeScript5脚手架 (无需梯子,快速安装Electron)

一、介绍 😆 😁 😉 Electron是一个使用 JavaScript、HTML 和 CSS 构建桌面应用程序的框架。 嵌入 Chromium 和 Node.js 到 二进制的 Electron 允许您保持一个 JavaScript 代码代码库并创建 在Windows上运行的跨平台应用 macOS和Linux——不需…

【网课平台】Day13.订单支付模式:生成支付二维码与查询支付

文章目录 一、需求:生成支付二维码1、需求分析2、表设计3、接口定义4、接口实现5、完善controller 二、需求:查询支付结果1、需求分析2、表设计与模型类3、接口定义4、接口实现步骤一:查询支付结果步骤二:保存支付结果&#xff08…

如何写出一份大厂都不会拒绝的简历?

你好,我是宋光璠,今天我以过来人的身份教你写出一份惊艳面试官的简历。 简历算是我们过去经历的一个缩影,虽然只有短短一两页,但也能让人从中发现你的优点,一份优质的简历更是如此,所以今天我就带你从头到…

PLC模糊PID(梯形图实现)

博途PLC的模糊PID控制详细内容请查看下面的博客文章: Matlab仿真+博途PLC模糊PID控制完整SCL源代码参考(带模糊和普通PID切换功能)_博途怎么实现模糊pid_RXXW_Dor的博客-CSDN博客模糊PID的其它相关数学基础,理论知识大家可以参看专栏的其它文章,这里不再赘述,本文就双容…

网络安全常用术语

肉鸡 肉鸡指的就是被黑客成功入侵并取得控制权限的电脑。黑客们可以随意的控制肉鸡,就像在使用自己的电脑一样,很形象的比喻,就像是养的肉鸡,任黑客宰杀和利用。关键的是,在成为肉鸡后,只要黑客不对电脑进…

【VM服务管家】VM4.x算子SDK开发_3.4 控件嵌入类

目录 3.4.1 图片存储:图片保存的方法3.4.2 辅助十字线:给图像添加辅助十字线的方法3.4.3 控件调用:在WPF中使用Winform控件的方法3.4.4 图形改变事件:渲染控件上图形改变事件的实现方法3.4.5 鼠标事件:渲染控件上鼠标事…

Hive的基本操作和查询语法以及案例(大数据查询)

1、 13-Hive的基本操作和查询语法以及案例_hive分区表查询语句_大数据下的画像人的博客-CSDN博客 2、SQL 中多个 and or 的组合运算 SQL 中多个 and or 的组合运算_weixin_30611509的博客-CSDN博客sql关系型运算符优先级高到低为:not >and> orAND、OR运算符…

零基础想成为黑客,只需要四步

前言 首先要明白,该篇文章说的黑客不是那种窃取别人信息、攻击别人系统的黑客,说的是调试和分析计算机安全系统的网络安全工程师。 黑客技术的核心之一就是渗透攻防技术,是为了证明网络防御按照预期计划正常运行而提供的一种机制。就是通过模…

语音处理加窗分帧

语音处理加窗分帧 一、分帧 语音数据和视频数据不同,本没有帧的概念,但是为了传输与存储,我们采集的音频数据都是一段一段 的。为了程序能够进行批量处理,会根据指定的长度(时间段或者采样数)进行分段,结构化为我们编程…

从FPGA说起的深度学习(八)-数据并行性

这是新的系列教程,在本教程中,我们将介绍使用 FPGA 实现深度学习的技术,深度学习是近年来人工智能领域的热门话题。 在本教程中,旨在加深对深度学习和 FPGA 的理解。 用 C/C 编写深度学习推理代码高级综合 (HLS) 将 C/C 代码转换为…

11款专家级渗透测试工具

导语:在本文中,我们将深入研究渗透测试员用来挫败客户防御系统的工具。 渗透测试员,有时也称“道德黑客”,他们本质上是安全专家,负责对客户的网络或系统发起模拟攻击,以寻找潜在漏洞。他们的目标是展示恶意…

电脑技巧:Windows系统原版纯净软件必备的两个网站

目录 一、MSDN我告诉你 二、helloWindows 三、总结 Windows系统是个人电脑使用最广泛的操作系统,大家可能会遇到下载Windows镜像、SQLServer、Office等官方软件,会遇到各种各样捆绑、广告软件,甚至还有可能电脑被植入病毒的风险。该如何避…

代码随想录算法训练营第四十五天|70. 爬楼梯 (进阶)、322. 零钱兑换、279.完全平方数

文章目录 70. 爬楼梯 (进阶)322. 零钱兑换279.完全平方数 今天的题一道是求装满背包的可能情况;另两道都是求装满背包的所需的最小物品数目,不用考虑是组合还是排序问题 70. 爬楼梯 (进阶) 背包问题,求装满…

设置苹果电脑vsode在新窗口中打开文件

0、前言 最近切换到mac电脑工作,又得重新安装一些工具软件并设置。虽然这些设置并表示啥复杂的设置,但是久了不设置还是会忘记。于是记录之,也希望给能帮助到需要的人。 我们使用vscode阅读或者编辑文件时,有时候希望同时打开多…

RabbitMQ 01 概述

什么是消息队列 进行大量的远程调用时,传统的Http方式容易造成阻塞,所以引入了消息队列的概念,即让消息排队,按照队列进行消费。 它能够将发送方发送的信息放入队列中,当新的消息入队时,会通知接收方进行处…

MySQL的JSON 数据类型

概述: MySQL提供了一个专门用于存储JSON数据的数据类型:JSON。JSON数据类型允许您在MySQL数据库中存储和操作JSON格式的数据。 以下是关于JSON数据类型的一些基本操作和函数: 创建表: 要在表中创建一个JSON类型的列&#xff0…

C/C++每日一练(20230429)

目录 1. 螺旋矩阵 🌟🌟 2. 戳气球 🌟🌟🌟 3. 实现五则运算 🌟 🌟 每日一练刷题专栏 🌟 Golang每日一练 专栏 Python每日一练 专栏 C/C每日一练 专栏 Java每日一练 专栏 1…

从0搭建Vue3组件库(十):如何搭建一个 Cli 脚手架

本篇文章将实现一个名为create-easyest脚手架的开发,只需一个命令npm init easyest就可以将整个组件库开发框架拉到本地。 创建 Cli 包 首先,我们在 packages 目录下新建 cli 目录,同执行pnpm init进行初始化,然后将包名改为create-easyest 这里需要知道的是当我们执行npm in…

layui框架实战案例(21):layui上传的哪些事(layui.upload组件、 file文件域、php后台上传)

上传的哪些事 一、核心方法与基础参数选项二、使用upload组件1.调用layui.upload2.文件上传进度条3.弹出进度条4.完整核心代码5.效果预览6.后台上传代码7.附带参数data 一、核心方法与基础参数选项 upload.render({elem: #uploadlicense//指向容器选择器, url: ?mIndex&ai…