0
点赞
收藏
分享

微信扫一扫

【算法】DFS计算四连通块个数

慕容冲_a4b8 2023-04-29 阅读 111

文章目录

一.文件系统

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

1.了解磁盘的物理结构

在这里插入图片描述

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

2.磁盘的存储结构

在这里插入图片描述

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

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

a.磁盘读取

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

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

3.磁盘的逻辑结构

在这里插入图片描述

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

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

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

b.实际IO一次的大小

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

也就是说操作系统将4KB数据加载进来以后,很可能不能被完全利用,但是这也不一定就意味着浪费。根据局部性原理:当我们访问了该数据以后,大概率是要访问该数据周围的数据的。所以一次性加载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的大小是一样的。(大文件占用的数据块多,小文件占用数据块少)

a.文件查找

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

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

b.文件删除

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

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

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

4.2目录的属性和数据

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

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

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

二.软硬链接

软链接的建立和删除

在这里插入图片描述

软链接的使用场景

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

在这里插入图片描述

硬链接的建立和删除

在这里插入图片描述

在这里插入图片描述

硬链接的使用场景

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

在这里插入图片描述

举报

相关推荐

0 条评论